天气

excel vba封装成dll的源码


'先用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文件 再注册一下 就正常了。

 

 

封装源码.rar

标签:
分类:Excel学习| 发布:admin| 查看: | 发表时间:2012/5/15
原创文章如转载,请注明:转载自个人资讯网 http://www.zhangxinran.com/
本文链接:http://www.zhangxinran.com/post/104.html

相关文章

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Design By zhangxinran.com | Login | Power By zhangxinran.com | 皖公网安备:34010402701072号