Запускать макрос, когда в Word установлен любой флажок - PullRequest
0 голосов
/ 05 июня 2018

Я бы хотел использовать общий код для неизвестного числа флажков, чтобы изменить стиль форматирования строки.У меня есть несколько строк, которые начинаются с флажка, и я хочу установить флажок, чтобы установить нормальную строку, и снять флажок, чтобы установить формат заголовка 2.

Private Sub Document_ContentControlOnEnter(ByVal ContentControl As ContentControl)

If ContentControl.Checked = True Then
    Selection.Style = ActiveDocument.Styles("Normal")
ElseIf contextcontrol.Checked = False Then
    Selection.Style = ActiveDocument.Styles("Heading 2")
End If

End Sub

При установке флажка курсор на этой строке устанавливается такЯ надеюсь, что эта стратегия будет работать.Я никогда не использовал vba в Word, поэтому я думаю, что я делаю что-то не так, просто заставляя код срабатывать?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Отсутствует конец if, и на самом деле все еще нужно использовать при вводе, чтобы это работало.Проблема с запуском кода была из-за того, что я поместил это в Модули> Макросы вместо документа.Правильный код:

Private Sub Document_ContentControlOnEnter(ByVal CCtrl As ContentControl)
With CCtrl
  If .Type = wdContentControlCheckBox Then
    If .Checked = True Then
      .Range.Paragraphs.First.Style = wdStyleNormal
    Else
      .Range.Paragraphs.First.Style = wdStyleHeading2
    End If
  End If
End With
End Sub
0 голосов
/ 06 июня 2018

Вы используете макрос ContentControlOnEnter, который сообщает вам только о состоянии элемента управления содержимым, когда вы его выбрали, а не о том, на что вы могли его изменить.Для последнего вам нужен макрос ContentControlOnExit - и для выхода из управления содержимым после установки / снятия флажка.Кроме того, вы должны проверить тип элемента управления содержимым, чтобы он не выдавал и не выдавал ошибку, если элемент управления содержимым не является флажком.Например:

Private Sub Document_ContentControlOnExit(ByVal CCtrl As ContentControl, Cancel As Boolean)
With CCtrl
  If .Type = wdContentControlCheckBox Then
    If .Checked = True Then
      .Range.Paragraphs.First.Style = wdStyleNormal
    Else
      .Range.Paragraphs.First.Style = wdStyleHeading2
    End If
  End If
End With
End Sub
...