我在此站點及其他站點上搜索了這些問題的答案,并且還瀏覽了我擁有的有關 VB/VSTO 的一系列 VB/C# 書籍。到目前為止,我已經畫了一個空白。我已經在 VB.NET facebook 組上發布了相同的問題,如果我得到解決方案,我會在這里發布,以便對其他人有所幫助。
我正在使用 VB.Net 和 VSTO 為 Excel 開發應用程式級加載項。
部分功能涉及打開 .xlsm(啟用 Excel 宏)檔案。我有三個問題希望你能幫助我。
我想打開啟用宏的每個 xlsm 檔案,但不啟動 xlsm 檔案中的任何 Auto_Open 宏,或觸發 Workbook_Open 事件。那可能嗎?
xlsm 檔案可能有它自己的功能區附加到檔案。是否可以禁止添加 xlsm 的功能區?
xlsm 檔案可能具有連接到 VBA 宏的 ActiveX 控制元件。如果 VBA 宏產生錯誤,是否可以在 .NET 加載項中捕獲錯誤?該錯誤可能包括“找不到宏”
有關資訊,目前我使用下面的代碼片段禁用宏。雖然這對第 1 項有幫助,但對第 2 項或第 3 項沒有幫助(事實上,禁用宏是第 3 項的原因)。
目前,當我打開 xlsm 檔案時,我使用以下代碼禁用宏:
' WorkbookType is a string representing a keyword within the Excel filename
' xlApp is running instance of Excel
Dim xlApp = Marshal.GetActiveObject("Excel.Application")
aWorkbook = xlApp.ActiveWorkbook
aSheet = xlApp.ActiveSheet
' Save current macro security setting
Dim oldSecurity = xlApp.AutomationSecurity
' Disable macros
xlApp.AutomationSecurity =
Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable
' Find & open WorkbookType workbook files in ProjectFolder
Dim info As New DirectoryInfo(CurrentProjectFolder)
For Each fileItem As IO.FileInfo In info.GetFiles
If fileItem.Name.Contains("~") Then
' Ignore temporary files
ElseIf fileItem.Name.Contains(WorkbookType) AndAlso fileItem.Name.Contains(".xls") Then
xlApp.AskToUpdateLinks = False
Dim wb = xlApp.Workbooks.Open(CurrentProjectFolder & "\" & fileItem.Name, UpdateLinks:=False)
xlApp.AskToUpdateLinks = True
End If
Next
' Restore macro security setting
xlApp.AutomationSecurity = oldSecurity
uj5u.com熱心網友回復:
xlsm 檔案可能具有連接到 VBA 宏的 ActiveX 控制元件。如果 VBA 宏產生錯誤,是否可以在 .NET 加載項中捕獲錯誤?該錯誤可能包括“找不到宏”
COM 加載項(由 VSTO 加載項表示)和 VBA 宏是完全不同的物體。您無法處理 COM 加載項中的 VBA 錯誤,反之亦然。但是您可能會對應用程式事件做出反應,請參閱物件模型 (Excel)以獲取可用事件串列。
xlsm 檔案可能有它自己的功能區附加到檔案。是否可以禁止添加 xlsm 的功能區?
要阻止加載自定義功能區 UI,您需要通過洗掉 Excel 檔案中包含的功能區 XML 自定義項來編輯檔案。VBA 現在不提供任何 UI 自定義。您可以使用Open XML SDK從 VSTO 加載項動態編輯打開的 XML 檔案,而無需涉及宿主應用程式或其物件模型。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/448302.html
