[Solved] Pause VBA Word macro, allow user to make a selection, and restart where it left off


There’s no way in VBA to “pause” a macro. Code must run to completion… Unless there’s a command for user input.

Input can be requested via the InputBox and MsgBox methods, but those block access to the document because they’re modal. A UserForm, however, can be set to display as non-modal, meaning it stays on top, but doesn’t block access to the document or the application features. Since you’re already working with a UserForm, this can be implemented relatively easily.

In the small example below, the Continue button runs the code to perform an action on the user selection. When Done is clicked the entire code is exited and the form unloaded.

enter image description here

Code behind the user form

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

Code in a regular module

Option Explicit

Sub DisplayModeless()
    Dim frm As frmModelessForInput

    Set frm = New frmModelessForInput
    frm.Show False  'Display as non-modal
    Set frm = Nothing
End Sub

3

solved Pause VBA Word macro, allow user to make a selection, and restart where it left off