如何防止在VB.NET打开Excel工作簿时触发打开事件

如何防止在VB.NET打开Excel工作簿时触发打开事件,vb.net,excel,vba,Vb.net,Excel,Vba,我有一个工作簿,当你打开它的时候,它会做一些古怪的事情。这很好,我想保持原样,但我也想与一个VB.NET项目共享一些与此神奇工作簿相关的内部函数 我的VB.NET应用程序将取代打开事件的功能。因此,如果用户在Excel中打开工作簿,我希望奇迹发生。如果我从我的VB.NET应用程序中打开同一个工作簿,我想抑制工作簿的“打开”事件,这样我就可以从VB.NET中执行魔术了 在调用Open之前,是否可以设置一个标志,允许我从该工作簿运行宏,同时抑制Open事件 VB.NET代码如下所示: ' Set u

我有一个工作簿,当你打开它的时候,它会做一些古怪的事情。这很好,我想保持原样,但我也想与一个VB.NET项目共享一些与此神奇工作簿相关的内部函数

我的VB.NET应用程序将取代打开事件的功能。因此,如果用户在Excel中打开工作簿,我希望奇迹发生。如果我从我的VB.NET应用程序中打开同一个工作簿,我想抑制工作簿的“打开”事件,这样我就可以从VB.NET中执行魔术了

在调用Open之前,是否可以设置一个标志,允许我从该工作簿运行宏,同时抑制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()

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

excelApp.EnableEvents = False