为了保护自己辛辛苦苦编写的Excel VBA代码不被盗用,我们需要对Excel VBA代码进行加密。通常的做法是利用给工程设置密码的方法实现加密,对于这类加密方法,由于存在安全度低、易破解等问题,因此往往起不到应有的效果。通过将Excel VBA代码封装成DLL动态链接库,可有效防止代码被非法查看。

在百度里搜索“封装EXCEL VBA”关键字,有很多封装VBA的教程,但99%是利用VB6(Microsoft Visual Basic 6.0)来封装,主要原因是VB6的操作界面及语法与Excel的VBA具有极高的相似度。2002年,随着VB.NET的引入,大部分人都放弃使用VB而选择VB.NET,VB6终将被淘汰,因此我们必须与时俱进,学习用Microsoft Visual Basic 2010封装VBA。我们可以在VS里建立com类项目,把NET类库的一些方法重新包装后暴露给VBA使用。

案例:在工作表的C1单元格得出A1单元格+B1单元格的值。

设计的VBA代码:

1 Sub Test()
2     On Error Resume Next
3     Range("C1").Value = Range("A1").Value + Range("B1").Value
4 End Sub

一、使用Microsoft Visual Basic 2010制作DLL文件

工具及原料:

1、Microsoft Office Excel 2003

2、Microsoft Visual Studio 2010

3、Windows XP 32位操作系统

操作步骤:

1、启动Microsoft Visual Studio 2010,在起始页界面点击“新建项目”,如图1所示。

图1

2、在弹出的“新建项目”对话框选择“类库”,修改名称为“VBADLL”,点击确定,如图2所示。

图2

3、在右侧的“解决方案资源管理器”视图里,找到系统默认建立的类库“Class1.vb”,右键删除该类库,如图3所示。

图3

4、在菜单栏上点击“项目”——“添加类”,在弹出的“添加新项”窗口里往下拉,选择“com类”,并修改名称为ComExcel.vb。然后点击“添加”。如图4所示。

图4

5、在菜单栏上点击“项目”——“VBADLL属性”,在“VBADLL”窗口里点击“引用”——“添加”,如图5所示。

图5

6、在弹出的“添加引用”窗口里点击“COM”,往下拉选择“Microsoft Excel 11.0 Object Library”,然后点击“确定”,如图6所示。

图6

注意,不同版本的EXCEL在“添加引用”——“COM”窗口里显示的版本号是不同的:

EXCEL2000(Microsoft Excel 9.0 Object Library)

EXCEL2002(Microsoft Excel 10.0 Object Library)

EXCEL2003(Microsoft Excel 11.0 Object Library)

EXCEL2007(Microsoft Excel 12.0 Object Library)

EXCEL2010(Microsoft Excel 14.0 Object Library)

EXCEL2013(Microsoft Excel 15.0 Object Library)

7、按图7所示把窗口滚动条往下拉,勾选“Microsoft Office Interop”。 

图7

8、在右侧的“解决方案资源管理器”视图里,找到第4步添加的类ComExcel.vb,右击弹出的菜单里点击“查看代码”,在ComExcel.vb代码窗口里添加如下代码。

 1 Public Sub Test()
 2
 3         On Error Resume Next
 4
 5         Dim VbApp As Excel.Application '定义Excel对象
 6
 7         Dim VbSht As Excel.Worksheet '定义工作表对象
 8
 9
10
11         VbApp = GetObject(, "Excel.Application")    '当前EXCEL对象赋值给VbApp
12
13         VbSht = VbApp.ActiveSheet     '使VbSht表示为EXCEL的当前工作表
14
15
16
17         '注意要在对象前加上VbSht变量以表示是EXCEL当前工作表的对象
18
19         VbSht.Range("C1").Value = VbSht.Range("A1").Value + VbSht.Range("B1").Value
20
21     End Sub

图8

9、如图9所示,在工具栏上点击“全部保存”按钮(像一叠磁盘),在弹出的“保存项目”窗口里选择保存的位置,如本例保存到E盘,文件夹名称为VBDLL,然后点击“保存”。

图9

10、菜单栏点击“生成”——“生成 VBADLL”,稍等片刻即可在E:\VBADLL\bin\Debug看到生成的DLL文件,同时还有一个TLB文件,如图10所示。

图10

二、注册及在VBE里调用DLL文件

11、如果你在图5所示窗口里点击“应用程序”,在图11所示窗口里点击“程序集信息”,弹出“程序集信息”里勾选“使用程序集COM可见”,然后点击“确定”。如此勾选后生成DLL文件的同时也就已经注册了DLL文件,如果你之前没有勾选,请勾选后重新生成DLL文件即可。

图 11

12、打开EXCEL,再打开“Visual Basic 编辑器”,在菜单栏点击“工具”——“引用”,在弹出的“引用”窗口里往下拉动滚动条,勾选“VBDLL”,然后点击“确定”。我们可以可以看到该引用定位到E:\VBADLL\bin\Debug\VBADLL.tlb,是TLB文件而不是DLL文件。如图12所示。

图12

13、在Excel的V BE窗口中新建一个模块,并输入调用DLL文件Test过程的代码:

1 Sub DLLtest()
2     Dim DLL As New ComExcel '定义DLL为新类,即为DLL文件中的类模块ComExcel
3     DLL.Test  '调用DLL中提供的过程,来完成原来在VBA中的功能,起到隐藏代码的效果
4     Set DLL = Nothing  '释放类资源
5 End Sub

如图13所示,输代码时可以利用智能感知下拉列表框快速输入DLL文件里的对象,而没有必要一一记住再输入。

图13

14、在Excel工作表中新建3个按钮并为其指定宏,现在可以测试调用了。

图14

三、客户端注册及调用DLL的方法

工具及原料:

1、以上一、二步制作的Excel及DLL文件

2、注册DLL的Bat批处理文件(等下制作)

3、Microsoft Office Excel 2003及以上

4、Windows XP/7/8/10等32位操作系统

5、Microsoft .NET Framework 4.0

操作步骤:

1、制作Bat批处理文件供客户注册DLL。

将Excel及VBADLL .DLL文件放到同一文件夹内,在该文件夹内新建一个Txt记事本文件,打开记事本输入以下批处理命令:

@Echo offcd /d %~dp0xcopy /y zykc.dll %windir%\system32\C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /codebase %windir%\system32\VBADLL.dll /tlb:VBADLL.tlbif errorlevel 1 goto errEcho.Echo 注册类库成功!goto end:errEcho.Echo 注册类库失败!应以管理员身份运行!:endPause>nul

保存关闭记事本,重命名记事本包括后缀名.txt为“注册类库.bat”。

到此,即可将包含Excel、DLL、BAT文件的文件夹(如图15所示)发送给客户。

图15

2、客户端注册DLL。

保证客户端已安装Microsoft .NET Framework 4.0,双击“注册类库.bat”文件即可完成注册,当注册不成功时,在“注册类库.bat”文件上单击右键,选择以管理员身份运行即可完成注册。

Microsoft .NET Framework 4.0组件可以到微软官网下载:https://www.microsoft.com/zh-cn/download/details.aspx?id=17718

现在,客户端即可在Excel里调用DLL文件了。

笔者在Microsoft Office Excel 2010及Windows 10 32位操作系统的客户端测试成功。若客户端为Microsoft Office Excel 2003不能成功注册DLL时,需要打一个补丁(office2003-KB907417-FullFile-CHS.exe),可以到微软官网下载:https://www.microsoft.com/zh-cn/download/details.aspx?id=10624

若你希望用VB6封装VBA代码可参考163博客老木小屋的文章《VBA封装为DLL及调用》:http://ych4943.blog.163.com/blog/static/376967502012842360885/

为了保护自己辛辛苦苦编写的Excel VBA代码不被盗用,我们需要对Excel VBA代码进行加密。通常的做法是利用给工程设置密码的方法实现加密,对于这类加密方法,由于存在安全度低、易破解等问题,因此往往起不到应有的效果。通过将Excel VBA代码封装成DLL动态链接库,可有效防止代码被非法查看。

在百度里搜索“封装EXCEL VBA”关键字,有很多封装VBA的教程,但99%是利用VB6(Microsoft Visual Basic 6.0)来封装,主要原因是VB6的操作界面及语法与Excel的VBA具有极高的相似度。2002年,随着VB.NET的引入,大部分人都放弃使用VB而选择VB.NET,VB6终将被淘汰,因此我们必须与时俱进,学习用Microsoft Visual Basic 2010封装VBA。我们可以在VS里建立com类项目,把NET类库的一些方法重新包装后暴露给VBA使用。

转载于:https://www.cnblogs.com/zyjq/p/6658361.html

用VB.NET(Visual Basic 2010)封装EXCEL VBA为DLL_COM组件(一)相关推荐

  1. 用VB.NET(Visual Basic 2010)封装EXCEL VBA为DLL_COM组件(一)

    vb.net教程https://www.xin3721.com/eschool/vbnetxin3721/ 为了保护自己辛辛苦苦编写的Excel VBA代码不被盗用,我们需要对Excel VBA代码进 ...

  2. 用VB.NET(Visual Basic 2010)封装EXCEL VBA为DLL_COM组件(二)

    --将EXCEL VBA代码移植到VB.NET .NET是微软公司在2002年推出的全新编程框架,支持多种语言应用程序开发.使用Visual Basic在Microsoft .NET Framewor ...

  3. Visual Basic .NET处理Excel表格全接触

    Visual Basic .Net处理Excel表格机理和处理Word文档一样,也是通过互操作,引入COM组件来实现的,所以前提条件是运行本文中介绍的程序的计算机必须安装Office 2000中的Ex ...

  4. 计算机中丢失vba,打开Excel的时候提示visual basic项目错误导致VBA模块代码丢失

    有的时候,每当我们打开有VBA代码的Excel文件时,会看到提示,大概意思就是说"丢失了visual basic项目错误"的提示.结果,只能有只读的方式打开Excel.最后,Exc ...

  5. VB.NET Visual Basic

    当看到VB.NET者这本书籍的时候,翻开目录唯一的感受就是:这不和VB一样吗?到底有什么区别呢? 1)版本: 重新回顾VB,可以发现其实他是Microsoft退出的基于Windows操作系统环境下的软 ...

  6. vb.net2019- 对象 (Visual Basic)

    Collection 提供了一种便捷方式,将相关的一组项视为一个对象. Err 包含运行时错误的相关信息. My.Application 对象由以下类组成: ApplicationBase 提供了所有 ...

  7. Visual Basic了解

    Visual Basic是一种由微软公司开发的结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语言.这是一种可用于微软自家产品开发的语言.它源自于Basic编程语言.V ...

  8. Visual Basic .NET处理Excle表格全接触

    Visual Basic .Net处理Excel表格机理和处理Word文档一样,也是通过互操作,引入COM组件来实现的,所以前提条件是运行本文中介绍的程序的计算机必须安装Office 2000中的Ex ...

  9. 本人新书 Visual C#2010开发权威指南出版-感谢大家一如既往的支持-感谢CSDN总裁蒋涛以及他率领的CSDN团队提供的支持!

    http://book.360buy.com/11111014.html <visual c#2010开发权威指南>  第1章.net 4.0 框架和visual studio 2010开 ...

最新文章

  1. 《算法竞赛中的初等数论》(三)正文 0x30 积性函数(ACM / OI / MO)(十五万字符数论书)
  2. 深入RESTful无状态原则
  3. 刚发现的2011年最给力的春联
  4. mysql 的数据库实例理解_理解数据库和实例
  5. win7如何看计算机用户名和密码怎么办,win7系统电脑查看共享文件夹时不显示用户名和密码输入窗口的解决方法...
  6. STM32之独立看门狗例程
  7. ADN中国团队參加微软的Kinect全国大赛获得三等奖
  8. Google认证的SketchUp模型网站
  9. python3入门经典100例-Python3经典100例(Python3入门习题) 含答案 doc版
  10. [ActionScript 3.0] 通过as3操作web内容
  11. Struts框架介绍(重点)
  12. 汽车空调管路气密性检测
  13. linux软件安装文档总结
  14. android pdf修改字体大小,如何编辑pdf文字(安卓上最好的pdf笔记app)
  15. C语言snprintf函数
  16. Java程序设计 北京大学 Week8测试
  17. PHP友情链接检测,www.jsphp.net友情链接查询结果 - 站长工具
  18. 创业故事:记YouTube创始人陈士骏,选择满意工作,让自己人生无悔
  19. 富斯i6航模遥控器配apm(pix)飞控mission planner疑难杂症解决策略(上)
  20. 杰理的蓝牙芯片的key是什么?以及该如何添加key?杰理key文件原理

热门文章

  1. FFmpeg命令(三)、 从视频中提取图片
  2. [CC]Mesh文件保存
  3. 经典教程翻译系列: Mach-II新手指南(下)
  4. 拍立淘创始人潘攀博士为你揭开“以图搜图”的神秘面纱!
  5. 复习《劝学》有感(一)
  6. python计算期望值_Python 计算期望值
  7. 推荐一个U盘修复工具
  8. arcgis sde mysql_ArcGis中地理数据库(sde)中概念及常见函数
  9. 《软件工程(第4版?修订版)》目录—导读
  10. 视频质量分析系统VC