如何为VBA Excel编写C#UDF安装程序

时间:2016-07-14 13:16:06

标签: c# .net excel vba office-automation

基本上,我知道如何在C#中为VBA编写用户定义的函数(here) 我想编写一个安装程序,它将执行必要的操作,以便在任何Excel文档中自动激活和引用我的* .tlb。 有关注册表项或设置的任何信息都会有所帮助

修改 通过以下内容,我生成了一个MyPj.tbl和一个MyPj.dll(感谢msbuild)。

    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    [Guid("afb62cb2-dfa8-4f0f-980b-25f96ad93b92")]
    public interface IGreeting
    {
        string SayHelloWorld { get; }
    }

    [ClassInterface(ClassInterfaceType.AutoDual)]
    [Guid("8cd91f78-4e62-4a12-95e0-df82699d4d75")] 
    [ProgId("TestDll.Test")]
    public class Greeting : IGreeting
    {
        public string SayHelloWorld { get { return "Hello, World! "; } }
    }

通过在Excel中将生成的.tbl添加到我的项目(工具>参考...>浏览),我可以在Excel VBMacro中访问MyPj.Greeting

Sub Test()
    Dim greeter as New MyPj.Greeting
    MsgBox greeter.SayHelloWorld()
End Sub

重点是我不想通过“工具>参考...>浏览”。我需要制作一个安装程序,它将自动在Excel中提供“SayHelloWorld”

1 个答案:

答案 0 :(得分:1)

我不确定将类型库自动引用到任何Excel文档是什么意思。从未尝试过,也不认为自动引用自定义组件是个好主意。

您可以使用Visual Studio创建安装程序,但再次运行安装程序通常需要提升权限。

看看Excel-DNA,它是一个了不起的工具/框架,它允许你将所有的dll + tlbs包装在一个.XLL中,然后你可以在你的任何工作簿中使用那个XLL。

请参阅:http://ashuvba.blogspot.com/2015/07/developing-registration-free-com-server.html

打包XLL后,您可以通过File--> Options ---> Add-ins

在Excel中永久设置参考值