Microsoft.Office.Tools.Excel.ApplicationFactory.GetVstoObject导致VBA内存泄漏?

时间:2014-09-30 16:54:40

标签: c# excel vba com vsto

下面是一个最小样本VSTO-Project,它强制Excel VBA-Environment显示错误“内存不足”并导致VBA项目出现两次。

问题:这是“GetVstoObject”-Method中的错误。我该怎么办?

步骤:

  1. 在Excel 2010中:创建新工作簿并按ALT + F11以进入VBA环境
  2. 在VBA.ThisWorkworkbook中:创建一个空的新Sub

      

    子测试()

         

    End Sub

  3. 将工作簿保存为 Test.xlsm 并退出Excel。

  4. 在Visual Studio中创建新的 Excel 2010-Add-In
  5. 使用以下代码替换 ThisAddIn.cs 中的所有代码。
  6. 使用F5
  7. 开始调试Excel
  8. 使用F5
  9. 开始调试 ExcelAddIn1
  10. 打开已保存的工作簿 Test.xlsm
  11. 再次重新打开已保存的工作簿(重要:必须“外部”执行此操作,例如使用Windows任务栏中的Excel跳转列表)
  12. 结果:

    • CTP加倍
    • 如果您点击ALT + F11打开VBA,您将收到“内存不足”错误

    感谢您提供任何解释/解决方案!

    此致 Jörg


    C#最小插件代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml.Linq;
    using Excel = Microsoft.Office.Interop.Excel;
    using Office = Microsoft.Office.Core;
    using Microsoft.Office.Tools.Excel;
    
    namespace ExcelAddIn1
    {
        public partial class ThisAddIn
        {
            private void ThisAddIn_Startup(object sender, System.EventArgs e)
            {
                this.Application.WorkbookActivate += new Excel.AppEvents_WorkbookActivateEventHandler(Application_WorkbookActivate);
            }
    
            void Application_WorkbookActivate(Excel.Workbook Wb)
            {
                //This is the important line:
                var activeVstoWorkbook = Globals.Factory.GetVstoObject(Wb);
            }
    
            #region VSTO generated code
    
            private void InternalStartup()
            {
                this.Startup += new System.EventHandler(ThisAddIn_Startup);
            }
    
            #endregion
        }
    }
    

0 个答案:

没有答案