繁体   English   中英

Word VBA - 循环浏览带有条件的书签

[英]Word VBA - Looping through bookmarks with a condition

我对 VBA 很陌生,所以非常感谢任何帮助。

我正在尝试构建一个实现以下功能的宏:

  1. 运行时打开用户表单

  2. 用户表单要求用户将不同的主题分类为“适用”或“不适用”

  3. 对每个主题进行分类后,宏会将所有“不适用”主题移动到文档中的“不适用”部分

  4. 默认情况下,分类为“适用”

每个主题都设置为自己的书签。 我被困在代码的 For each / next 部分。 到目前为止我有这个:

Sub CleanUp()    
    Dim doc As Document
    Dim book As Bookmark

    For Each book In ActiveDocument.Range.Bookmarks
        If book = "Applicable" Then
        Selection.GoTo what;= wdgotobookmark, which:= book
        Selection.Cut
        Selection.GoTo what:=wdGoToBookmark, Name:="PASTE_HERE"
        Selection.PasteAndFormat (wdFormatOriginalFormatting)
    Next book
end sub

两个初步问题:

  1. 如何使用选项按钮为每个主题设置一个值? 我什至可以使用这样的用户表单吗? 大约有 50 个主题,所以我不确定是否需要为每个主题设置一个变量。

     Private Sub OptionButton2_Click() Set book = "Applicable" End Sub
  2. 如果我确实需要为每个主题/书签创建一个变量,使用 for/next 循环是否更好? 这样我就可以将变量名设置为等于计数器? 例如topic1、topic2、topic3等?

更好的方法(恕我直言)是使用文档变量,其状态可以通过文档中的 IF 字段进行测试,这样,根据测试结果,内容将显示在“适用”或“不适用”部分中,如合适的。

例如,假设您创建了一个名为“Topic1”的文档变量,其值可以是 1 或 0。在:

  • “适用”部分,您将有一个 IF 字段编码为:

    {IF{DOCVARIABLE Topic1}= 1“要显示的内容”}

  • “不适用”部分,您将有一个 IF 字段编码为:

    {IF{DOCVARIABLE Topic1}= 0“要显示的内容”}

其中“要显示的内容”在每个字段中都相同。 为了简化处理,您可能只在“适用”部分创建字段,然后将它们复制到“不适用”部分并将 1 更改为 0。

如果使用复选框来指示给定主题是否适用,则宏代码可以像这样简单:

Private Sub CommandButton1_Click()
Dim Ctrl As Control: Const CtrlType As String = "CheckBox"
For Each Ctrl In UserForm1.Controls
  If TypeName(Ctrl) = CtrlType Then
  With Ctrl
    If .Caption Like "Topic#*" Then
      ActiveDocument.Variables(.Name).Value = .Value ^ 2
    End If
  End With
  End If
Next
ActiveDocument.Fields.Update
End Sub

注意:上述示例的字段大括号对(即“{}”)都是在文档本身中创建的,通过 Ctrl-F9(Mac 上的 Cmd-F9,或者,如果您使用的是笔记本电脑,您可能需要使用 Ctrl-Fn-F9); 您不能简单地键入它们或从该消息中复制和粘贴它们。 通过任何标准 Word 对话添加它们也不切实际。 字段结构中表示的空格都是必需的。

有关使用文档变量的更多信息,请参阅: https : //support.microsoft.com/en-us/help/306281/how-to-store-and-retrieve-variables-in-word-documents

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM