'先用vba写几个函数
'写2个事件
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
MsgBox Sh.Name & " Activate"
End Sub
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
MsgBox "Row:Column " & Target.Row & ":" & Target.Column
End Sub
'写2个函数
Sub myfun1()
MsgBox "你运行了myadd程序"
End Sub
Sub myfun2()
MsgBox [a1]
End Sub
''''''=======================
打开vb 创建
把类名称改为 "class1",工程名称改为 "我的封装工程"
vb中的写法
Private WithEvents myApp As Excel.Application
Private myExcel As Excel.Application
Public Sub init(app As Application)
'建立excel与vb的联系
Set myApp = app
app.Caption = "VBA封装成功"
End Sub
'''把vba里面的Workbook_SheetActivate 替换为myApp_SheetActivate 以此类推
Private Sub myApp_SheetActivate(ByVal Sh As Object)
MsgBox Sh.Name & " Activate"
End Sub
Private Sub myApp_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
MsgBox "Row:Column " & Target.Row & ":" & Target.Column
End Sub
Sub myfun1()
MsgBox "你运行了myadd程序"
End Sub
'引用单元格的写法
Sub myfun2()
MsgBox myApp.ActiveSheet.[a1] '写法 就是在对象前面 加 myapp..... 后面的写法相信熟悉vba'的你不会陌生了
End Sub
======================================================================
然后在 需要引用dll的excel里面 点thisworkbooks 这样写
Public MyClass As Object '定义一个公共的对象
'关键函数 打开工作簿的时候 定义对象的属性
Private Sub Workbook_Open()
Set MyClass = CreateObject("我的封装工程.Class1")
MyClass.init Application
End Sub
'关闭工作簿的时候注销对象
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set MyClass = Nothing
End Sub
'对比一下 这个函数在vba里面的写法
Sub myfun1()
MyClass.myfun1
End Sub
'对比一下 这个函数在vba里面的写法
Sub myfun2()
MyClass.myfun2
End Sub
==============================
大功告成
附件有个注册程序,把dll发放给 别人使用时候,运行一下 "注册dll.bat" 就可以正常使用.
可以把dll放在一个固定的文件夹 如c:盘程序文件夹. 引用dll的excel文件 就可以随意移动了。 更新dll文件版本的时候 替换掉原有dll文件 再注册一下 就正常了。
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。