我的VBA代码中缺少什么?希望有多个复选框,当其中一个被选中时,它会隐藏所有其他行。

问题描述 投票:0回答:1

崭新的微软Word的VBA编码垃圾。我有一个有12行的表格,我想在每行旁边放置一个标准的内容控制复选框,当任何给定的复选框被选中时,其他行就会消失。

目前,我的运气很好,纯文本,但试图用书签来隐藏整个表格的一行,似乎只对第一个复选框有效。(如果我的代码比它需要的更复杂,对不起。我也跳过了所有的代码,因为其他10行都是一样的,所以最后12行的代码是 End If的是必要的)。)

image

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)

Dim cc As ContentControl

For Each cc In ActiveDocument.ContentControls

If cc.Title = "impact" Then

    If cc.Checked = True Then
        ActiveDocument.Bookmarks("bfganalytical").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("EA").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("fascia1").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("fascia2").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("grille1").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("grille2").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("shutter1").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("shutter2").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("liner").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("license").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("lamp1").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("lamp2").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("blank").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("impact").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("beamanalytical").Range.Font.Hidden = False
    Else: ActiveDocument.Bookmarks("impact").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("bfganalytical").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("EA").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("fascia1").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("fascia2").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("grille1").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("grille2").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("shutter1").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("shutter2").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("liner").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("license").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("lamp1").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("lamp2").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("beamanalytical").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("blank").Range.Font.Hidden = False
    End If
    Exit Sub
Else: If cc.Title = "license" Then

    If cc.Checked = True Then
        ActiveDocument.Bookmarks("beamanalytical").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("impact").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("fascia1").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("fascia2").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("grille1").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("grille2").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("shutter1").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("shutter2").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("liner").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("license").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("lamp1").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("lamp2").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("blank2").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("blank3").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("EA").Range.Font.Hidden = True
        ActiveDocument.Bookmarks("bfganalytical").Range.Font.Hidden = False
    Else: ActiveDocument.Bookmarks("impact").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("bfganalytical").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("EA").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("fascia1").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("fascia2").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("grille1").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("grille2").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("shutter1").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("shutter2").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("liner").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("license").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("lamp1").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("lamp2").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("beamanalytical").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("blank2").Range.Font.Hidden = False
        ActiveDocument.Bookmarks("blank3").Range.Font.Hidden = False
    End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Next
End Sub
word-vba
1个回答
1
投票

其实你不需要比这更复杂的东西。

Private Sub Document_ContentControlOnExit(ByVal CCtrl As ContentControl, Cancel As Boolean)
With CCtrl
  If .Range.Information(wdWithInTable) = True Then
    If .Checked = True Then
      .Range.Tables(1).Range.Font.Hidden = True
      .Range.Rows(1).Range.Font.Hidden = False
    Else
      .Range.Tables(1).Range.Font.Hidden = False
    End If
  End If
End With
End Sub

循环浏览所有的内容控件是相当不必要的。你甚至不需要任何标题或书签。


0
投票

假设内容控件Title与书签名称相同,你可以试试你的这个简化版代码。

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)

  Dim cc As ContentControl

  For Each cc In ActiveDocument.ContentControls
    If ActiveDocument.Bookmarks.Exists(cc.Title) Then
      ActiveDocument.Bookmarks(cc.Title).Range.Font.Hidden = cc.Checked
    End If
  Next cc
End Sub

EDIT:你的原始代码存在的问题是,它只允许隐藏一行.为了使你的解决方案有效,你需要查询每个书签对应内容控件的检查状态。你最好的选择是确保书签的名称与以下两种情况相匹配 cc.Titlecc.Tag否则,你又回到了复杂而繁琐的代码。

© www.soinside.com 2019 - 2024. All rights reserved.