2010-6-15 18:51
这2天学习了VBA的封装,不算完美,但已基本实现预期。人生是否也像这样,努力追逐自己的完满,但涉及到他人时却百啭千回?
在本机测试了N次,没有问题;发给几个朋友测试,却是问题多多。不是提示这里错误,就是提示那里错误。最好的情况就是————手工添加对dll的引用,然后程序方可顺利运行。自动添加引用————这也是百思不得其解的地方。google、百度,中外资料这么一搜,发现不外乎是以下我要说到的这些,但这些在我本机是没有问题的,按图索骥,一试就灵。换个机器,依然有问题。
先有必要声明2个概念:注册、引用
DLL注册
是指将DLL的相关信息,如:DLL唯一识标号(GUID),版本号(Version)及路径(Path)信息写入注册表中,以供系统对DLL进行识别调用。
我们通过VB编译生成DLL时,VB一般会自动完成对该DLL的注册,但如果要在其它电脑上运行程序时,我们就必须重新对该DLL进行注册。
DLL引用
是指将DLL类库对象集成到代码编辑环境中,以便编程时调用类库中的对象、属性及方法。
我们通过手动方式完成DLL的引用时,系统会自动完成对该DLL的注册,所以我们无需另行对DLL进行注册,但如果我们在其它电脑上运行程序时,还是会出现一些错误。
注册的方法有2种:手工注册与自动注册
手工注册就不详细说了。就是在VBE里点击菜单栏的工具-引用,然后找到你要添加的dll文件。
主要控诉下自动引用~
采用AddFromFile ,对VBA项目的访问要允许才行,否则会有错误提示:“不信任到Visual Basic Project的程序连接”。
Sub 添加引用() On Error Resume Next Shell "Regsvr32 /s " & Chr(34) & ThisWorkbook.Path & "\My2.dll" & Chr(34) '加载引用的Dll ThisWorkbook.VBProject.References.AddFromFile (ThisWorkbook.Path & "\My2.dll") MsgBox "引用已添加!" On Error GoTo 0 End Sub Sub 取消引用() On Error Resume Next Shell "Regsvr32 /u /s " & Chr(34) & ThisWorkbook.Path & "\My2.dll" & Chr(34) '卸载引用的Dll ThisWorkbook.VBProject.References. _ Remove ThisWorkbook.VBProject.References("My2") MsgBox "引用已取消!" On Error GoTo 0 End Sub
注册与引用一起写了,希望可以在对方打开工作簿时自动引用,省去手工添加到麻烦。但目前的事实是:这个自动添加引用,在引用对话框里确实有My2这个dll,他出现了!但是他不干活!我还是要手工去浏览下,找到他,再次添加。