【问题标题】:How to prevent an Excel Workbook_Open event from firing when opened by VB.NET如何防止 Excel Workbook_Open 事件在被 VB.NET 打开时触发
【发布时间】:2018-06-22 08:08:44
【问题描述】:

我有一个工作簿,当你打开它时它会做一些非常棒的事情。这很好,我想保持原样,但我也想与这个神奇的工作簿相关的 VB.NET 项目分享一些内部功能。

我的 VB.NET 应用程序取代了打开事件的功能。因此,如果用户在 Excel 中打开工作簿,我希望魔法发生。如果我从我的 VB.NET 应用程序中打开同一个工作簿,我想禁止 Workbook_Open 事件,以便我可以从 VB.NET 中发挥作用。

在调用 Open 之前是否可以设置一个标志,允许我从该工作簿运行宏,同时抑制打开事件?

VB.NET 代码如下所示:

' Set up Excel
Dim excelApp As Application
Dim thisWorkbook As Workbook
Dim excelBooks As Workbooks

' Start Excel 
excelApp = New Application With
{
    .Visible = False  ' Ninja mode
}

' Open the workbook
excelBooks = excelApp.Workbooks
thisWorkbook = excelBooks.Open(My.Settings.ExcelFileName)

' Run the subroutine.
excelApp.Run("WhizBang", SecretVBNETMagicPassedInToExcel)

' Close the workbook and release the COM objects.
thisWorkbook.Close(SaveChanges:=False)
Marshal.ReleaseComObject(thisWorkbook)
Marshal.ReleaseComObject(excelBooks)
excelApp.Quit() 
Marshal.ReleaseComObject(excelApp)
GC.Collect()

【问题讨论】:

    标签: vb.net excel vba


    【解决方案1】:

    由于您不想运行的代码位于 Workbook_Open 事件处理程序中,因此您可以在打开工作簿之前禁用应用程序的事件,以防止调用处理程序代码。

    excelApp.EnableEvents = False
    

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 2021-12-27
      • 2019-01-15
      相关资源
      最近更新 更多