none
关于excel vba 调用托管代码的问题 RRS feed

  • 常规讨论

  • 在vs 里面新建了一个项目 excel addin 项目 代码如下:
    namespace jrjExcel
    {
        [System.Runtime.InteropServices.ComVisible(true)]
        public class MyManagedFunctions
        {
            public int GetNumber()
            {
                return 42;
            }
        }
        public partial class ThisAddIn
        {
            private void ThisAddIn_Startup(object sender, System.EventArgs e)
            {
                #region VSTO 生成的代码

                try
                {

                    this.Application = (Excel.Application)Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Wrap(typeof(Excel.Application), this.Application);
                    this.Application.Run("RegisterCallback", new MyManagedFunctions(), missing, missing, missing, missing, missing
                    , missing, missing, missing, missing, missing,
                    missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing,
                    missing, missing, missing, missing, missing, missing, missing, missing);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

                #endregion

            }

            private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
            {
            }

            #region VSTO 生成的代码

            /// <summary>
            /// 设计器支持所需的方法 - 不要
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
            private void InternalStartup()
            {
                this.Startup += new System.EventHandler(ThisAddIn_Startup);
                this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
            }

            #endregion
        }
    }

    然后我在excel的vbe里新建一个模块 里面写上代码
    Dim managedObject As Object
     

    Public Sub RegisterCallback(callback As Object)
        Set managedObject = callback
    End Sub
     

    Public Function GetNumberFromVSTO() As Integer
        GetNumberFromVSTO = managedObject.GetNumber()
    End Function

    可是在excel里数据=GetNumberFromVSTO() vba根本不执行这个宏

    如果新建一个宏

    public Function AA()
    AA = managedObject.GetNumber()
    End Function
    宏 会执行 但是 执行就报错 managedObject 的值是nothing

    有人遇到过类似的问题么 我该怎么解决

    2009年4月27日 7:17