Приостановить макрос VBA Word, позволить пользователю сделать выбор и перезапустить с того места, где он остановился. - PullRequest
0 голосов
/ 26 августа 2018

У меня есть требование, чтобы сценарий VBA в Microsoft Word приостанавливался, чтобы пользователь мог выбрать текст, который будет скопирован в буфер обмена, чтобы его можно было экспортировать в файл Excel.Пользователь сделает ряд выборов и, наконец, укажет, что он / она сделал, когда содержимое буфера обмена будет скопировано в файл шаблона Excel.

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

Представленный ниже вопрос / ответ Stakeoverflow, кажется, отвечает этому требованию, но у меня естьне смог заставить его работать.Похоже, что код неполон.

Приостановить макрос VBA, позволить пользователю сделать выбор и перезапустить с того места, где он остановился

Может кто-нибудь предоставить пример кода VBA, которыйдобивается этого?

Ваша помощь очень ценится, когда я бью головой о стену, и она начинает болеть!

1 Ответ

0 голосов
/ 26 августа 2018

В VBA нет способа "приостановить" макрос. Код должен выполняться до конца ... Если нет команды для пользовательского ввода.

Ввод может быть запрошен с помощью методов InputBox и MsgBox, но они блокируют доступ к документу, поскольку они модальные . A UserForm , однако, может быть установлен для отображения как немодальный , то есть он остается сверху, но не блокирует доступ к документу или функциям приложения. Поскольку вы уже работаете с пользовательской формой, это может быть реализовано относительно легко.

В небольшом приведенном ниже примере кнопка Continue запускает код для выполнения действия по выбору пользователя. При нажатии Done весь код завершается, а форма выгружается.

enter image description here

Код за пользовательской формой

Option Explicit

Private Sub cmdContinue_Click()
    Debug.Print Selection.Range.Text
End Sub

Private Sub cmdDone_Click()
    Me.Hide
End Sub

Private Sub UserForm_Activate()
    'Position the form near the top-left of the window
    'So that the user can work with the document
    Me.Top = Application.ActiveWindow.Top + 50
    Me.Left = Application.ActiveWindow.Left + 50
End Sub

Код в обычном модуле

Option Explicit

Sub DisplayModeless()
    Dim frm As frmModelessForInput

    Set frm = New frmModelessForInput
    frm.Show False  'Display as non-modal
    Set frm = Nothing
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...