从单词

时间:2015-11-10 09:38:06

标签: excel vba excel-vba ms-word

我正在开发一个既需要excel文档又需要word文档的项目。我已经完全编写了excel文档,使用UserForms工作,其中一个在打开文档时自动打开。 (见下面的代码)

Private Sub Workbook_Open()
    frmOpen.Show
End Sub

单词文档已编程为从此Excel文档中读取数据并将其写入报告中。 (见下面的代码)

Private Sub cmdAutomatic_Click()
    Dim objExcel As New Excel.Application
    Dim exWb As Excel.Workbook
    Dim selectID As String


    Set exWb =objExcel.Workbooks.Open("C:\ Path")
    exWb.Close

    ''Data is written into the document here

    Set exWb = Nothing
    Unload Me
End Sub

问题是,每次按下此按钮,它都会从Excel文档打开用户表单,并暂停其他代码,直到用户表单关闭。有没有办法只在用户表单打开时。

我试过了

Application.EnableEvents = False

然而,这只会返回一个未找到的方法或数据成员(所以我假设必须运行excel才能excel?)

很抱歉,如果这个问题已经得到解答,我找不到解决此问题的任何内容。也很抱歉,如果这有一个非常简单的解决方案,这是一个学校项目,这是我第一次使用VBA

编辑: 我意识到执行以下操作可能会起作用

exWb.Application.EnableEvents = False

但是因为我需要在“Set”之前将它设置为停止打开表单,所以它不起作用(因为对象未在行运行的位置设置)。

1 个答案:

答案 0 :(得分:1)

您可以在打开工作簿之前使用objExcel.EnableEvents = False停用Excel事件,然后使用objExcel.EnableEvents = True重新激活它们。

正如@Siddarth Rout在评论中所说,您可以使用frmOpen.Show vbmodeless以无模式模式显示UserForm,以避免阻止其他代码执行。请参阅MSDN关于此的评论:https://msdn.microsoft.com/en-us/library/office/gg251819.aspx

所以你的代码看起来像这样:

Private Sub cmdAutomatic_Click()
    Dim objExcel As New Excel.Application
    Dim exWb As Excel.Workbook
    Dim selectID As String

    objExcel.EnableEvents = False
    Set exWb =objExcel.Workbooks.Open("C:\ Path")

exWb.Close
    objExcel.EnableEvents = True
    ''Data is written into the document here

    Set exWb = Nothing
    Unload Me
End Sub