Макрос Word для отмены выбора элемента управления контентом после макроса - PullRequest
0 голосов
/ 06 июня 2018

Мой текущий проект - составление списка для коллег, и, поскольку мне нравится все усложнять, я запускаю макросы, чтобы он проверял, когда он заканчивает работу.Описание работы изменится со стиля заголовка на обычный, когда он его завершит, а затем обновит ToC.Все это работает, но у меня возникают проблемы с тем, что контроль содержания иногда остается выбранным.Обычно я могу проверить и снять галочку один или два раза без проблем, но в конце концов курсор по какой-то причине не выходит из флажка, поэтому последующие щелчки не запускают OnEnter.

Private Sub Document_ContentControlOnEnter(ByVal CCtrl As ContentControl)
With CCtrl
  If .Type = wdContentControlCheckBox Then
    If .Checked = True Then
      .Range.Paragraphs.First.Style = wdStyleNormal
      ActiveDocument.TablesOfContents(1).Update
      Selection.Collapse direction:=wdCollapseEnd
    Else
      .Range.Paragraphs.First.Style = wdStyleHeading2
      ActiveDocument.TablesOfContents(1).Update
      Selection.MoveRight 1
    End If
  End If
End With
End Sub

Есть ли способ заставить слово отменить выделение элемента управления содержимым и переместить курсор куда-нибудь на той же строке?

Я пробовал Selection.MoveDown 1, Selection.Collapse direction:=wdCollapseEnd, а также Selection.MoveEnd, но ни один не работает.

1 Ответ

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

Вы можете использовать тот факт, что через Диапазон управления контентом можно получить доступ к объектам, которые его содержат.Например, вы можете «углубиться» в абзац, в котором находится элемент управления контентом:

CCtrl.Range.Paragraphs(1).Range.Characters.Last.Select

Это также может быть любой символ в абзаце.Следующее (в моем тесте) помещает выделение сразу после элемента управления контентом:

CCtrl.Range.Paragraphs(1).Range.Characters(4).Select

Включено в ваш код:

Private Sub Document_ContentControlOnEnter(ByVal CCtrl As ContentControl)
  With CCtrl
    If .Type = wdContentControlCheckBox Then
      If .Checked = True Then
        .Range.Paragraphs.First.Style = wdStyleNormal
        ActiveDocument.TablesOfContents(1).Update
        Selection.Collapse direction:=wdCollapseEnd
      Else
        .Range.Paragraphs.First.Style = wdStyleHeading2
        ActiveDocument.TablesOfContents(1).Update
        Selection.MoveRight 1
      End If

      'Select the last character in the paragraph (the paragraph mark)
      CCtrl.Range.Paragraphs(1).Range.Characters.Last.Select
      'Remove the selection, so the cursor blinks at the end of the paragraph
      Selection.Collapse

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