VSTO学习笔记一:用VISUAL BASIC 2010编写EXCEL自定义函数(加载项)by 哪一站
本文大部分代码来自于《VSTO开发指南》,只是VSTO开发指南中的开发环境为VS2005和OFFICE 2003,
本文的开发环境为VS2010和OFFICE 2010 32位版。操作系统为WIN7 64位
学习VSTO的主要目的,主要是除了VBA之外,多一种开发EXCEL自定义函数的手段,我在用VBA开发EXCEL的过程中,发现VBA的执行效率太低,因为VBA是宏,是解释执行的,我曾经在用VBA开发给用友U8导入发票时,导入几十张发票就花了二个小时的时间,后来利用F417的一个XLL加载项去开发,只用了几秒钟时间。对比强烈。这些是废话,现在开始:
visual basic pdf启动VS2010,默认设置环境为VISUAL BASIC,然后从菜单中选择:文件-新建项目,见下图:
在打开的窗口中点击VISUAL BASIC下的类库,见下图:
点击确定后,在解决方案资源管理器中右键单击CLASSLIBRARY1选择添加引用见下图:
在出现的窗口中点击COM页,然后点击“MICROSOFT EXCEL 14.0 OBJECT LIBRARY”,见下图:
在弹出的窗口中输入如下代码:
Imports System
Imports System.Runtime.InteropServices
Imports Microsoft.Win32
Imports Excel = Microsoft.Office.Interop.Excel
<ClassInterface(classinterfacetype.AutoDual),ComVisible(True)>Public Class Class1 Public Function MYFUNCTION(ByVal number1 As Double,ByVal number2 AsDouble) As Double Return number1 * number2
End Function
<ComRegisterFunctionAttribute()>Public Shared Sub RegisterFunction(ByVal type As Type) Registry.ClassesRoot.CreateSubKey(getsubkeyname(type))
End Sub
<ComUnregisterFunctionAttribute()>Public Shared Sub UnregisterFunction(ByVal type As Type)
Registry.ClassesRoot.DeleteSubKey(getsubkeyname(type))
End Sub
Private Shared Function GetSubKeyName(ByVal type As Type) As String
Dim s As New System.Text.StringBuilder()
s.Append("CLSID\{")
s.Append(type.GUID.ToString().ToUpper())
s.Append("}\Programmable")
Return s.ToString()
End Function
End Class
本文中自定义了一个用于EXCEL的函数MYFUNCTION,用于返回两个数的乘积,其余的SUB 和FUNCTION,都是COM开发的内容,这里只需照搬就行,实际开发中,只需把注意力集中在MYFUNCTION的实现即可。
然后在解决方案资源管理器中,右键单击CLASSLIBRARY1,选择属性,见下图:
在弹出的窗口中点击编译页面,勾起“为COM互操作注册”,见下图:
然后生成这个项目,在菜单中点击“生成”-“生成CLASSLIBRARY1”,见下图:
然后启动EXCEL 2010,点击开发工具下的加载项,见下图:
在弹出的窗口中点击自动化按钮,见下图:
然后在弹出的窗口中到我们开发的CLASSLIBRARY1,点击确定,见下图:
系统会问不到MSCORE.DLL,点击否即可。见下图:
然后点击确定,见下图:
在EXCEL中点击FX即插入函数,然后在类别中选择CLASSLIBRARY1.CLASS1,就可以看到MYFUNCTION这个函数了,见下图:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论