Создайте новый объект выбора во время выполнения в word vba

Я задавал этот вопрос ранее, но не думаю, что был достаточно ясным.

Мне нужно написать макрос Word VBA, который предложит пользователю выбрать текст, выделив его после запуска макроса, а затем обработать новый выбор. Этот процесс будет повторяться в макросе неизвестное количество раз.

Единственная проблема, с которой я столкнулся, - это выяснить, как заставить макрос VBA «приостановить» и позволить пользователю сделать этот выбор. Если кто-то знаком с AutoCAD VBA, я ищу эквивалент метода AcadSelectionSet.SelectOnScreen. Это кажется настолько очевидным и фундаментальным, но я просто не могу найти в файлах справки Microsoft или поиске в Интернете ничего, что показало бы мне, как это сделать. Пожалуйста, помоги, если можешь!


person david    schedule 03.04.2009    source источник


Ответы (2)


Возможно, вам стоит посмотреть на событие WindowSelectionChange объекта Application?

В специальном модуле ThisDocument вам понадобится такой код:

Public WithEvents app As Application

Private Sub app_WindowSelectionChange(ByVal Sel As Selection)

MsgBox "The selection has changed"

End Sub

Очевидно, замените MsgBox полезным кодом и используйте параметр Sel для доступа к выбору. Если вы хотите попробовать другие события, используйте раскрывающиеся списки в верхней части модуля ThisDocument.

Чтобы настроить его, вам понадобится такой макрос в обычном модуле кода:

Sub setUpApp()

Set ThisDocument.app = ThisDocument.Application

End Sub

После того, как setUpApp будет запущен один раз, событие app_WindowSelectionChange будет запускаться всякий раз, когда выбор изменяется.

person barrowc    schedule 05.04.2009

Вы можете использовать немодальную форму, чтобы ваш макрос продолжал работать до тех пор, пока не будет выполнено определенное условие:

Дизайнер форм:

  • Добавьте форму.
  • Добавьте одну кнопку.
  • Добавьте один ярлык.

Код формы:

Option Explicit

Dim m_stopHere As Boolean
Dim m_timesDone As Long

Private Sub CommandButton1_Click()

    m_timesDone = m_timesDone + 1
    m_stopHere = Not DoStuff(m_timesDone)

    Me.Caption = "DoStuff was called " & m_timesDone & " time(s)."

       If m_stopHere Then
    MsgBox "Processing finished, closing form..."
    Unload Me
   End If
End Sub

Private Function DoStuff(times As Long) As Boolean

    Dim myCondition As Boolean

    If times < 5 Then
    MsgBox "You selected: " & Selection.Text
    Selection.Collapse wdCollapseEnd
    myCondition = True
    Else
    Me.Label1.Caption = "No more selections, thanks!"
    End If

    DoStuff = myCondition
End Function

Private Sub UserForm_Initialize()
    Me.Label1.Caption = "Please select some text in Word and press the button."
End Sub

Другой модуль кода:

Sub StopAndGo()
    UserForm1.Show vbModeless
End Sub
person guillermooo    schedule 30.04.2009