【问题标题】:Bypass workbook_open when opening from word从 word 打开时绕过 workbook_open
【发布时间】:2015-11-10 09:38:06
【问题描述】:

我正在做一个需要 excel 文档和 word 文档的项目。我已经将 Excel 文档完全编程为使用 UserForms 工作,其中一个在打开文档时会自动打开。 (见下面的代码)

Private Sub Workbook_Open()
    frmOpen.Show
End Sub

word 文档已被编程为从该 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

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

【问题讨论】:

  • frmOpen.Show 行更改为frmOpen.Show vbmodeless 这将启动表单但不会停止其他代码

标签: vba excel ms-word


【解决方案1】:

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

正如@Siddarth Rout 在 cmets 中所说,您可以使用 frmOpen.Show vbmodeless 在无模式模式下显示您的用户窗体,以避免阻塞其他代码执行。请参阅 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

【讨论】:

  • 非常感谢!工作得很好,现在我查看了其他一些帮助文档,发现我做错了什么(我使用的是 exWb 而不是 objExcel)。 =)
猜你喜欢
  • 1970-01-01
  • 2020-11-17
  • 2013-04-24
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
相关资源
最近更新 更多