我正在Word中使用VBA创建SmartForm,用户可以在其中勾选复选框,以显示我已使用命名格式"TEXT_BUTANE"将其作为书签的某些信息
因为每个产品(丁烷/丙烷/乙烷)在整个文档中都有多个书签,所以我将它们命名为"TEXT_BUTANE1"TEXT_BUTANE2"等
因此,我想循环浏览所有书签,并根据其所属的组隐藏/显示文档中的部分,即所有以"TEXT_BUT"开头的书签都将被视为一个集体隐藏(或如果选中则显示)的组
我得到了一个编译错误"Next without For",但从我所看到的语法是正确的
它在创建LoopThroughBookmarks Sub之前就已经工作了,但我需要这样的东西,这样我就可以隐藏/显示文档的多个部分
如有任何帮助,将不胜感激
Private Sub CHECK_BUTANE_Click()
Dim vw As Word.View
Dim bChecked As Boolean
Dim bkm As Word.Bookmark
'turned on non-printing characters individually so that
'not displaying Hidden text does not affect these settings.
Set vw = Application.ActiveWindow.View
If vw.ShowAll = True Then 'if TRUE then SHOW following
vw.ShowParagraphs = True
vw.ShowObjectAnchors = True
vw.ShowTabs = True
vw.ShowHyphens = True
vw.ShowOptionalBreaks = True
vw.ShowSpaces = True
End If
vw.ShowAll = False 'if FALSE then HIDE following
vw.ShowHiddenText = False
bChecked = Me.CHECK_BUTANE.Value
'if CHECKED
If bChecked Then
Call LoopThroughBookmarks("BUT", True) 'then TRUE so loop through bookmarks passing PRODUCT
Else
Call LoopThroughBookmarks("BUT", False) 'then FALSE so loop through bookmarks passing PRODUCT
End If
End Sub
Public Sub LoopThroughBookmarks(product As String, bChecked As Boolean)
Dim bkm As Bookmark
Dim strMarks() As String
Dim intCount As Integer
Dim checkString As String
Dim bkmName As String
checkString = "CHECK_" + product 'CHECK_BUT or CHECK_PRO or CHECK_MET
If ActiveDocument.Bookmarks.Count > 0 Then
ReDim strMarks(ActiveDocument.Bookmarks.Count - 1)
intCount = 0
For Each bkm In ActiveDocument.Bookmarks 'Set bkm to be current Bookmark
bkmName = Left$(bkm.Name, 9) 'taking first 9 chars for bkm comparison
If bkmName = checkString Then 'if TRUE
bkm.Range.Font.Hidden = Not bChecked 'then hidden is false
Else 'is FALSE
bkm.Range.Font.Hidden = bChecked 'so stay visibility
Next bkm
End If
End Sub
您可能会得到这个错误,因为在代码的这一部分中,您在Next
之前缺少了一个End If
:
If bkmName = checkString Then 'if TRUE
bkm.Range.Font.Hidden = Not bChecked 'then hidden is false
Else 'is FALSE
bkm.Range.Font.Hidden = bChecked 'so stay visibility
Next bkm
作为进一步的观察,您可能会简化代码的这一部分
bChecked = Me.CHECK_BUTANE.Value
'if CHECKED
If bChecked Then
Call LoopThroughBookmarks("BUT", True) 'then TRUE so loop through bookmarks passing PRODUCT
Else
Call LoopThroughBookmarks("BUT", False) 'then FALSE so loop through bookmarks passing PRODUCT
至
Call LoopThroughBookmarks("BUT",Me.CHECK_BUTANE.Value)