学习DLL封装及引用
时间:2011-08-07
来源:互联网
题外话 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)
看了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个单元格...钻研中,哪位大师知道的话,还请不吝赐教!
附件

2011-8-7 14:36, 下载次数: 1
作者: XZ19860527 发布时间: 2011-08-07
复制内容到剪贴板
Dim wb As Excel.Workbook, sh As Excel.Worksheet
Set wb = EApp.ThisWorkbook
Set sh = wb.ActiveSheet
Dim d, k
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To 10
d(sh.Cells(i, 1)) = ""
Next i
k = d.KEYS
sh.Cells(r, c) = "这是测试文本"
sh.Cells(r, c).Offset(0, 1).Resize(UBound(k), 1) = Application.Transpose(k)
'其他的代码
End Sub
VB中封装的代码 代码:
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
Dim d, k
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To 10
d(sh.Cells(i, 1)) = ""
Next i
k = d.KEYS
sh.Cells(r, c) = "这是测试文本"
sh.Cells(r, c).Offset(0, 1).Resize(UBound(k), 1) = Application.Transpose(k)
'其他的代码
End Sub
作者: XZ19860527 发布时间: 2011-08-07
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28