C# Microsoft.Office.Tools.Excel.ApplicationFactory.GetVstoObject是否导致VBA内存泄漏?

C# Microsoft.Office.Tools.Excel.ApplicationFactory.GetVstoObject是否导致VBA内存泄漏?,c#,excel,vba,com,vsto,C#,Excel,Vba,Com,Vsto,下面是一个最小的VSTO项目示例,它强制Excel VBA环境显示错误“内存不足”,并导致VBA项目出现两次 问题:这是“GetVstoObject”方法中的错误吗。我怎样才能四处走动? 步骤: 在Excel 2010中:创建新工作簿并按ALT+F11进入VBA环境 在VBA.ThisWorkBook中:创建一个空的新子文件夹 子测试() 端接头 将工作簿另存为Test.xlsm并退出Excel 在Visual Studio中创建新的Excel 2010加载项 将此addin.cs中的所有代码

下面是一个最小的VSTO项目示例,它强制Excel VBA环境显示错误“内存不足”,并导致VBA项目出现两次

问题:这是“GetVstoObject”方法中的错误吗。我怎样才能四处走动?

步骤:

  • 在Excel 2010中:创建新工作簿并按ALT+F11进入VBA环境
  • 在VBA.ThisWorkBook中:创建一个空的新子文件夹

    子测试()

    端接头

  • 将工作簿另存为Test.xlsm并退出Excel

  • 在Visual Studio中创建新的Excel 2010加载项
  • 将此addin.cs中的所有代码替换为以下代码
  • 用F5开始调试Excel
  • 用F5开始调试ExcelAddIn1
  • 打开保存的工作簿Test.xlsm
  • 重新打开保存的工作簿(重要提示:必须“从外部”打开,例如使用windows任务栏中的Excel jumplist)
  • 结果:

    • CTP翻了一番
    • 如果按ALT+F11打开VBA,将出现“内存不足”错误
    感谢您的解释/解决方案

    问候,, 约格


    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
        }
    }