00剧场版机体:Excel DLL封装及引用

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 22:41:33

[分享] DLL封装及引用 [复制链接]

本帖最后由 XZ19860527 于 2011-8-14 21:17 编辑

题外话 http://club.excelhome.net/thread-749866-1-1.html
看了everee 兄为方便自己工作开发VBA工具是否属于公司的讨论深有感触,我们为了提高工作效率没日没夜的钻研办公技巧,虽然得到了领导的赞同和自身的提高,但世上没有永久的宴席,和公司总有分手的的时候,离别方知世情冷暖,面对自己的心血被公司免费占用,岂不痛心疾首?
回首EHOME学习两年,虽然算不上多大进步,至少简单的工具还是做了不少,为了保护自己权益,于是觉得有必要开始学习封装技术,或许不需要多精通,只要能把主要,核心的代码隐藏起来就可以了!,或许加上试用时间限制或者注册码就更完美.

从今天开始学DLL封装,与家人同勉! 以下教程转自http://blog.sina.com.cn/s/blog_55ee0b090100hcx6.html

在vb中,修改“工程”名称和“类模块”名称为需要的名称。本例中,工程修改为TestDLL,类模块修改为Test。
引用Microsoft Office 11.0 Object Library和Microsoft Excel 11.0 Object Library。
Sub mySub(EApp As Excel.Application, r As Long, c As Integer)
    Dim wb As Excel.Workbook, sh As Excel.Worksheet
    Set wb = EApp.ThisWorkbook
    Set sh = wb.ActiveSheet
  sh.Cells(r,c)="这是测试文本"
  '其他的代码
End Sub

在Excel中,在VBA中要引用刚才生成的TestDll.dll。
新建一个模块,在其中定义一个类变量T:
Public T As New TestDll.Test

Sub AAA()
   On Error Resume Next
   T.mySub Application, 3, 7
End Sub

至此,可以在Excel中执行宏AAA,并会在(3,7)单元格得到字符串"这是测试文本"。

'====加载与卸载引用的语句========================================================
shell "Regsvr32 /u /s " & Chr(34) & ThisWorkBook.path & "\test.dll"& Chr(34) '卸载引用的Dll
shell "Regsvr32 /s " & Chr(34) & ThisWorkBook.path & "\test.dll"& Chr(34) '加载引用的Dll
/s 表示不出现对话框

'=========================================================
怎样去掉"工程-引用"中曾经引用的自制的DLL历史记录?

在注册表的 HKEY_CLASSES_ROOT\TypeLib\ 分支中查找“数据”等于“Test”(需要删掉的历史记录),然后会找到一个键值,该键值的数据等于“Test”,看看这个分支下面的数据,是否包含你 DLL的位置等信息,如果确定。则删除这个键值所在HKEY_CLASSES_ROOT\TypeLib\下的{xxxxxxxx-xxxx-xxxx- xxxx-xxxxxxxxxxxx}分支。(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx根据你的实际情况是不同的16 进制)

必要条件: 1 首先要安装VB6.0(精简版也可以,只有6M)
                2 VB引用EXCEL,EXCEL引用DLL
                3 恒心,反复调试
相信大家会收获良多!附件中DLL引用的是EXCEL2007(EXCEL12.0),如2003版出错请自己编译!
附件尚未完全成功,!提取10个单元格不重复值,结果代码只执行到9个单元格...字典未计算上限加一的原因

桌面.rar

13.56 KB, 下载次数: 130