Word VBA - цикл по закладкам с условием - PullRequest
0 голосов
/ 16 марта 2020

Я очень плохо знаком с VBA, поэтому любая помощь очень ценится.

Я пытаюсь создать макрос, который выполняет следующее:

  1. Когда запускается открывается пользовательская форма

  2. Пользовательская форма просит пользователей классифицировать различные темы как «Применимо» или «Не применимо»

  3. Один раз по каждой теме c классифицировано, макрос переместит все темы «Не применимо» в раздел «Не применимо» в документе

  4. По умолчанию категеризация будет «Применимо»

Каждый топи c устанавливается как отдельная закладка. Я застрял на Для каждой / следующей части кода. У меня есть это до сих пор:

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. Как я могу использовать опционную кнопку, чтобы установить значение для каждой топи c? Могу ли я использовать такую ​​форму пользователя? Там около 50 тем, поэтому я не был уверен, нужно ли мне устанавливать переменную для каждой топи c.

      Private Sub OptionButton2_Click()
            Set book = "Applicable"
        End Sub
    
  2. Если мне нужно чтобы создать переменную для каждой темы / закладки, лучше ли l oop с for / next? Таким образом, я могу установить имя переменной равным счетчику? Например, theme1, topic2, topic3, et c.?

1 Ответ

1 голос
/ 17 марта 2020

Лучшим подходом (IMHO) было бы использование переменных документа, состояние которых можно проверить с помощью полей IF в документе таким образом, чтобы в зависимости от результата теста содержимое отображалось в «Применимо» или «Не применимо». в соответствующих случаях.

Например, предположим, что вы создаете переменную документа с именем 'Topic1', значения которой могут быть 1 или 0. В:

  • "Применимо" раздел, вы должны иметь поле IF, закодированное вдоль строк:

    {IF {DOCVARIABLE Topic1} = 1 "Содержимое для отображения"}

  • "Не применимо msgstr "раздел, у вас есть поле IF, закодированное в виде строк:

    {IF {DOCVARIABLE Topic1} = 0" Содержимое для отображения "}

где" Контент для отображения "одинаков в каждом поле. Чтобы упростить обработку, вы можете просто создать поля в разделе «Применимо», а затем скопировать их в раздел «Не применимо» и изменить значения от 1 до 0.

Если флажки используются, чтобы указать, является ли данный топ c применимо, код макроса может быть таким простым:

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 (Cmd-F9 на Ma c или, если вы используете ноутбук, вам может понадобиться Ctrl-Fn-F9); Вы не можете просто напечатать их или скопировать и вставить их из этого сообщения. Также нецелесообразно добавлять их через какие-либо стандартные диалоги Word. Все пробелы, представленные в полевых конструкциях, являются обязательными.

Подробнее об использовании переменных документа см. https://support.microsoft.com/en-us/help/306281/how-to-store-and-retrieve-variables-in-word-documents

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...