暂停VBA Word宏,允许用户进行选择,然后从中断处重新开始

时间:2018-08-26 02:29:38

标签: vba

我需要暂停Microsoft Word中的VBA脚本,以便用户可以选择要复制到剪贴板的文本,以便可以将其导出到Excel文件。当剪贴板中的内容复制到模板Excel文件中时,用户将进行很多选择,最后指示完成。

我有将每个选择复制到剪贴板,然后将所有行复制到Excel文件的代码。但是,我需要在弄清楚如何暂停代码以允许用户进行选择然后重新启动代码以将选择内容复制到剪贴板上保持坚持。我可以使用切换开关来获取用户窗体,以便在按下时切换状态和标签。但是还没有弄清楚如何暂停VBA代码以允许用户导航到Word文档的下一部分以进行下一步选择。

下面的Stakeoverflow问题/答案似乎可以解决此要求,但我无法使其正常运行。似乎代码不完整。

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

有人可以提供实现此目的的示例VBA代码吗?

您的坚持受到了极大的赞赏,因为我一直在撞墙撞头,并且开始受伤!

1 个答案:

答案 0 :(得分:0)

VBA中无法“暂停”宏。代码必须运行完成...除非没有用于用户输入的命令。

可以通过InputBoxMsgBox方法请求输入,但是由于它们是 modal 的,因此它们阻止了对文档的访问。但是,可以将 UserForm 设置为显示为 non-modal ,这意味着它位于顶部,但不会阻止对文档或应用程序功能的访问。由于您已经在使用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