|
自己按照MSDN的方法做了一个
但是很麻烦,不能直接生成加载宏
还是将过程拿出来分享:- '利用VSTO生成Excel自定义函数
- '=========================VSTO部分=====================================================================
- '创建一个启动宏的Excel工作簿
- 'VSTO新建项目--OFFICE--2007--Excel2007工作簿 (或者其他版本)
- '复制现有文档--找到你创建的文件
- 'VBTO不会修改你创建的文件,而是bin\Debug内用它的副本修改
- '自定义函数只在这个文件中能用,就是你指定的这个Excel工作簿。
- '生成的加载项,可以在其他Excel工作簿内使用。
- 'ThisWorkbook.vb属性:
- ' EnableVbaCallers=true (出现提示:确认,这个是指VBA可以使用VSTO的代码)
- ' ReferenceAssemblyFromVbaProject=true(自动变化的)
- '代码区内添加函数,例如:
- ' Public Function AddNumbers(ByVal X As Integer, ByVal Y As Integer) As Integer
- ' Return x + y
- ' End Function
- '运行:会打开你创建的Excel
- '=========================Excel部分=====================================================================
- 'ThisWorkbook 的代码中会自动出现:
- '//定义一个函数,从VSTO项目ExcelWorkbook1的ThisWorkbook.vb中集成而来)
- 'Property Get CallVSTOAssembly() As ExcelWorkbook1.ThisWorkbook
- ' Set CallVSTOAssembly = GetManagedClass(Me)
- 'End Property
- '可以将其移植到模块中,写法是将:Me 换成:ThisWorkbook
- Property Get CallVSTOAssembly() As ExcelWorkbook1.ThisWorkbook
- Set CallVSTOAssembly = GetManagedClass(ThisWorkbook)
- End Property
- '定义一个函数,此函数指向,或者部分利用VSTO的自定义函数
- Public Function NUMADD(X, Y)
- NUMADD = CallVSTOAssembly.AddNumbers(X, Y) + 1
- End Function
- '验证一下,这个自定义函数是否能成功调用
- 'Sub OPIONA()
- ' MsgBox NUMADD(3, 5)
- 'End Sub
- '其余的和Excel自定义函数就一样了:
- '保存为:加载宏
- '加载宏和VSTO生成的其他文件要在一个文件夹内
- '=========================使用方法=====================================================================
- '打开Excel,挂上这个加载宏,就可以在工作表中,或VBA中使用这个自定函数了
- ''优点:
- '保护代码有一些优势,
- '可以实现VBA中无法实现的功能
- ''缺点:
- '过程有点麻烦,多此一举,
- '需要.net的支持,需要文件多
复制代码 |
|