为Excel vba创build对象库
我有一个用C#写的GUI。 这是一个交互式button和文本的网格控制寄存器映射。 我想创build一个用于该GUI的API在Excel vba中使用。 我一直无法find任何如何创build这样的事情的例子或文件,但我曾经使用过其他公司的对象库。
我试图创造这个,我遇到了一些问题,即只能在我的电脑上运行 。 另外,如果我移动到我的电脑上的另一个文件夹,它也打破了。
Excel vba代码:
Sub Test() Dim impclass As New ZZVISIBLE_FROM_EXCEL_CLASS MsgBox impclass.DotNetMethod_SQR(5) End Sub
C#库类代码:
using System; using System.Collections.Generic; using System.Text; namespace ZZVISIBLE_FROM_EXCEL_LIBRARY { public class ZZVISIBLE_FROM_EXCEL_CLASS { public Double DotNetMethod_SQR(Double input) { return input * input; } } }
这个基础的例子使用C#库类来数字和Excel VBAselect数字5.这是我希望做的事情的基本框架,如:
grid.writecell(22,1001)
grid.getcell(22)
grid.resetall()
grid.loadfile("C:\griddata\config_default")
有些引用来制作这些对象库,甚至是它们被称为最有用的! 在Google上search“自定义excel vba引用”到目前为止没有任何用处,所以我决定在这里发帖寻求帮助。
另外,我很早就在项目中说“你做错了,做这个”types的答案也是受欢迎的!
首先,您需要知道您正在使用的dotnet版本,以便您使用:C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm.exe或c:\ Windows \ Microsoft.NET \ Framework \ v4 .0.30319 \ RegAsm.exe
其次,您需要知道是否要将dll注册为32位或64位,所以对于32位使用相同的前一个path,或者在64位的情况下只使用Framework64而不是Framework
一旦完成,你可以很容易地在你的vba脚本中添加对这个程序集的引用:
一旦添加,你可以实例化任何类中的任何类存在于DLL中
你有几个select:
1)创build一个程序集并使用regasm使其可见
看到关于CodeProject的文章
http://www.codeproject.com/Articles/555660/Extend-your-VBA-code-with-Csharp-VB-NET-or-Cpluspl
2)为了使Excel的C#程序集可见,你必须使其COM可见,并将ReferenceAssemblyFromVbaProject设置为true。
请参阅以下MSDN文章以获取更多信息:
http://msdn.microsoft.com/en-us/library/bb608604.aspx
谢谢,凯文
你可以将你的库包装在一个Excel-DNA加载项中。 ( Excel-DNA是我为了将.NET与Excel集成而开发的免费库)。 这可能会缓解COM的注册问题(允许您在不需要pipe理员权限的情况下部署COM对象模式)。
如果你想公开一些function作为用户定义的函数,你可以从Excel中的工作表中调用,添加一个function区或类似的东西。
为了使用Excel-DNA将对象模型暴露给VBA,我build议MikaelKatajamäki将这些post作为起点:
- http://mikejuniperhill.blogspot.com/2014/03/interfacing-c-and-vba-with-exceldna-no.html
- http://mikejuniperhill.blogspot.com/2014/03/interfacing-c-and-vba-with-exceldna_16.html
对于一般的Excel-DNA支持,我build议你使用Excel-DNA Google组 。