从excel VBA初始化C#类

从excel VBA初始化C#类,c#,excel,vba,initialization,C#,Excel,Vba,Initialization,我有一门VBA课程: Option Explicit Private mo As omMsg.Message Private Sub Class_Initialize() Set mo = New omMsg.Message End Sub Private Sub mo_OnMessageSend(ByVal status As omMsg.ProcessStatus, ByVal msg As String) ProcessComMessage status, msg End S

我有一门VBA课程:

Option Explicit

Private mo As omMsg.Message

Private Sub Class_Initialize()
 Set mo = New omMsg.Message
End Sub

Private Sub mo_OnMessageSend(ByVal status As omMsg.ProcessStatus, ByVal msg As String)
   ProcessComMessage status, msg
End Sub
mo_OnMessageSend没有被调用

C类课程如下:

namespace omMsg
{   
public interface IMessage
{
    void sendMessage(Message.ProcessStatus status, string msg);       
    event Message.MessageHandler OnMessageSend;
}

[ClassInterface(ClassInterfaceType.None)]
public class Message : IMessage
{
    public enum ProcessStatus { Retrieving, Generating, Error, Complete }

    public delegate void MessageHandler(ProcessStatus status, string msg);
    public event MessageHandler OnMessageSend;

    public void sendMessage(ProcessStatus status, string msg)
    {
        if (OnMessageSend != null)
            OnMessageSend(status, msg);
    }
}
}
请帮忙。我这样做对吗

谢谢。

我们将从一个非常基本的示例开始。我们会得到Excel 调用以字符串作为输入的.NET方法(例如“ 并返回与该输入字符串连接的“Hello”(因此, 例如,“你好,世界”)

-在VisualStudio2005中创建一个名为“DotNetLibrary”的C#Windows类库项目。这是哪个文件夹并不重要 本示例的目的如下

-要从Excel调用库中类中的方法,我们需要该类具有默认的公共构造函数。显然,这门课也很重要 需要包含我们要调用的任何方法。为了这次步行 只需将以下代码复制并粘贴到我们的默认类文件中:

就是这样:如果你看网络上现有的文章,或者阅读 MSDN帮助,您可能认为您需要使用接口或装饰 您的类具有属性和guid。但是,对于基本的互操作 您不需要这样做

-Excel将使用COM与我们的图书馆进行通信。Excel要使用COM库,需要在 登记处。VisualStudio可以为我们生成这些条目

为此,请打开项目属性(双击“属性” 在解决方案资源管理器中)。然后:i)在“应用程序”选项卡上,单击 “程序集信息…”按钮。在生成的对话框中,检查 “使程序集COM可见”复选框。单击“确定”。ii)关于“构建” 选项卡选中“为COM互操作注册”复选框(朝向底部: 您可能需要向下滚动)

-建立图书馆

-现在启动Excel并打开一个新的空白工作簿。在Excel2007中打开VBA代码编辑器:i)这有点难找到。你有 使“开发人员”选项卡在功能区上可见(如果尚未设置) 向上的要执行此操作,请单击Microsoft Office按钮(屏幕左上方) 屏幕),然后单击Excel选项(最底部)。检查 结果选项中的“在功能区中显示开发人员选项卡”复选框 对话单击“确定”。这会将“开发人员”添加到功能区菜单的末尾: 点击这个。然后单击屏幕左端的“Visual Basic”图标 丝带。ii)在早期版本的Office(2003、XP、2000)中,只需转到 菜单栏上的工具/宏/Visual Basic编辑器

-我们现在需要包括对我们新图书馆的参考。在Visual Basic编辑器的“工具”菜单上选择“引用”。如果你滚动 在生成的对话框中,您应该会发现“DotNetLibrary”是 在名单上。选中旁边的复选框,然后单击“确定”

-现在打开Sheet1的代码窗口(在项目窗口中双击Sheet1)。将下面的VBA代码粘贴到“代码”窗口中 表1:

-单击刚刚粘贴的代码中的任意位置,然后单击“F5”以运行代码。你应该得到一个“Hello World”消息框

这可能有助于:
using System;
using System.Collections.Generic;
using System.Text;

namespace DotNetLibrary
{
    public class DotNetClass
    {
        public string DotNetMethod(string input)
        {
            return "Hello " + input;
        }
    }
}
Private Sub TestDotNetCall() 
Dim testClass As New DotNetClass 
MsgBox testClass.DotNetMethod(“World”) 
End Sub