用VBA封装DLL
VB封装Excel_VBA成DLL技巧
VB封装Excel_VBA成DLL技巧VB封装Excel_VBA成DLL技巧使用VB6.0在WinXP_sp2、Excel 2000环境下制作、测试通过。
一、启动VB6.0:执行:“文件夹(F)”——“新建(N)”——选择“ActiveX DLL”,如下图1:二、引用:VB 中对Excel的引用执行:“工程(P)”——“引用(N)”——选择所要引用的项目:如下图2Excel 2000中:Microsoft Excel 9.0 Object LibraryMicrosoft Office 9.0 Object LibraryExcel 2003中:Microsoft Excel 11.0 Object LibraryMicrosoft Office 11.0 Object Library三、编写代码:1、将工程默认名称“工程1”,改为“zygtest”,将类模块默认名称“Class1”,改为“zyg365”,2、在类模块的代码编辑区写入代码:如下图3模块名称为“hongtong”,代码如下在VB中编写代码时:要注意以下声名Dim XLAPP As ObjectSet XLAPP = GetObject(, "Excel.Application")代码中引用对象,如SHEET,Cell等,前面要加“XLAPP.”(或按照Sub hongtong() 中的格式编写。
)Sub hongtong()Dim excelApp As New Excel.ApplicationDim excelWorkBook As Excel.WorkbookDim excelWorksheet As Excel.WorksheetSet excelWorkBook = excelApp.Workbooks.Add '创建新工作簿Set excelWorksheet = excelWorkBook.Sheets(1) excelWorksheet.Cells(2, 3) = "宏通" '写入数据excelWorksheet.Cells(3, 4) = "zyg365" '写入数据excelApp.Visible = True '显示excel界面,用于调试excelWorkBook.PrintPreview '打印预览excelWorkBook.PrintOut '打印输出excelWorkBook.Saved = True'excelWorkBook.Close '关闭工作薄'excelApp.Quit '退出excelEnd Sub四、工程属性设置:(可以不设置,本步骤可以省略) 为了使自己开发的程序更规范,可以对本工程的属性加以描述:如下图4执行:“工程(P)”——“工程1属性(E)…”(当前工程中为:“zygtest属性(E)…”)五、保存工程、测试、打包生成Dll文件:1、保存:单击保存,保存到一个文件夹中;2、测试:执行工具栏上的“启动”(右向的三角图标)按钮,检查是否存在错误;3、打包生成Dll文件:执行:“文件(F)”——“生成工程1.dll(K)”(当前工程中为:“zygtest.dll”),重命名为“zyg.dll”,至此,Dll文件制作结束。
VBA封装为DLL及调用
VBA封装为DLL及调⽤使⽤程序:1、Microsoft Office Excel 20032、Microsoft Visual Basic 6.0案例:在⼯作表的C1单元格得出A1单元格+B1单元格的值。
设计的VBA代码:Sub Test()On Error Resume NextRange("C1") = Cells(1, 1) + Cells(1, 2)End Sub第⼀部分、使⽤VB6.0制作DLL⽂件⼀、启动VB6.0,新建⼀个ActiveX DLL⼯程:⼆、引⽤:在VB中对Excel的引⽤不同版本的EXCEL在“引⽤”窗⼝⾥显⽰的版本号也不同:EXCEL2000(Microsoft Office 9.0)EXCEL2002(Microsoft Office 10.0),即ExcelXPEXCEL2003(Microsoft Office 11.0)EXCEL2007(Microsoft Office 12.0)EXCEL2010(Microsoft Office 14.0)EXCEL2013(Microsoft Office 15.0)三、修改ActiveX DLL的⼯程名称和类模块名称四、编写代码:在代码窗⼝输⼊代码,过程名称为Test:Sub Test()On Error Resume NextDim VBt, YB '定义变量VBtSet VBt = GetObject(, "Excel.Application") '使VBt表⽰为EXCEL对象Set YB = VBt.ActiveSheet '使YB表⽰为EXCEL的当前⼯作表'注意要在对象前加上YB变量以表⽰是EXCEL当前⼯作表的对象YB. Range("C1") = YB.Cells(1, 1).Value + YB.Cells(1, 2).ValueEnd Sub五、设置⼯程属性 (为使开发的程序更规范,可以对⼯程属性加以描述【⾮必要设置,可以省略】):六、保存⼯程、测试、⽣成DLL⽂件:1、保存⼯程:保存本⼯程以作为将来修改代码和升级程序的需要;2、测试⼯程:执⾏快捷⼯具栏上的“启动”按钮,检查是否存在错误;3、⽣成DLL⽂件:制作DLL⽂件。
VBA安全中的封装技术
VBA安全中的封装技术[摘要]提出了基于VBA应用中的源代码保密技术。
将VBA代码封装成动态链接库文件以及在word中引用动态链接库,保证VBA源代码的数据安全,且提高其执行速度。
[关键词]VBA、DLL1引言VBA(Visual Basic for Applications)是新一代标准宏语言,是基于Visual Basicfor windows发展而来的。
VBA提供了面向对象的程序设计方法,是对office 进行二次开发的有效途径。
相对于标准VB程序。
VBA易于学习掌握,用户可以利用它将繁琐、机械的工作转换为VBA程序代码,使工作自动化。
VBA提供了一个公共开放的开发平台,通过Visual Basic编辑器可以实现源程序的共享。
但是VBA在代码的保护上却存在着缺陷。
如果不对VBA工程设置密码保护,代码很容易被人浏览乃至窃取。
而且即使利用其自身提供的密码保护机制设置了密码保护,也很容易被破解,互联网上有很多针对于Word,Excel的密码破解器都可以很容易地对密码进行破解。
而visual c++、visualBasic、c++Builder和Delphi等编译器所编译出来的程序安全性相对较高,这是因为其代码可编译成可执行文件或者动态链接库文件。
动态链接库(Dynamic-Link Library),是基于Windows程序设计的一个非常重要的组成部分。
将程序制作成动态链接库,不仅能节省内存开销,减少开发的工作量,提高访问速度。
更重要的是能将程序源代码进行封装,提供程序的安全性。
利用这一特点,可以将VBA代码封装到动态链接库文件中,然后在Office文件中进行调用,从而提高安全性。
本文以VBA环境为基础,通过将VBA代码封装成DLL文件,并在Word 中引用DLL的方法,保证VBA源代码的数据安全,提供了一种针对于开放式平台下软件开发的安全处理措施。
2将VBA源代码封装为DLL的实现以下操作的前提是已经建好一个VBA工程。
发布DLL封装过程教程
在代码封装前,首先要完全确认,VBA代码的完全可行性。
1.1.打开EXCEL后,跳转到【VBA编辑器】界面。
操作:【工具】-【引用】查看,在VBA里面引用了那些工具和控件。
1.2.然后打开VB6.0,创建DLL。
操作:【工程】-【引用】将VBA里面的引用的工程都在VB里面引用。
说明:这一步是很重要的,也是基础。
很多时候就是在VB里面没有引用,造成封装后不能创建对象等等故障。
打开VB6.0的新建DLL!在CLASS(CODE)里面我们把在VBA里面的类模块复制过来!二、EXCEL VBA里面建立窗体!这个是我们在VBA里面建立的窗体!这个是我们建立的VBA窗体的代码!要求:在窗体的TETXBO1里面输入后按按钮后,将此保存在表"WO"的(1,1)单元格里面!所以我们建立了如下的代码:Private Sub CommandButton1_Click()Sheets("wo").Cells(1, 1) = TextBox1.TextEnd Sub接下来我们在VBA里面建立模块!输入如下代码Sub 窗体1()测试.ShowEnd Sub要求打开测试窗体!这样我们的VBA就建立完成了!三、DLL的制作!艾昨天讲到如何建立VBA!下面是昨天讲到的VBA建立的窗体!在TEXE里面输入内容按按钮后赋值到A1单元格[attach]202296[/attach]忙自己的软件了!接下来我们转到要加载DLL的EXCEL文件,进入VBA编辑,在thisworkbook里面建立加载DLL和卸载DLL的命令。
接下来我们新建一个类模块,主要用来调用窗体和DLL里面命令的。
DIM Fun As New 测试(在加载DLL后,输入“AS” 自动可以索引“NEW” 自动索引“测试”)DLL测试--是我们建立的DLL文件名称。
测试--是我们在DLL里面的模块,在这里要AS NEW (模块) 不是DLL了!这一句我们在上面将此设置为全局变量,方便下面的语句。
VBA封装为Dll的例子、方法与总结
VBA封装为Dll的例子、方法与总结制作DLL时,ThisWorkBook中的代码封装方法如下:1、打开VB6,新建Act iveX DLL。
修改“工程”名称和“类模块”名称为需要的名称。
本例中,工程修改为Test DLL,类模块修改为Test。
2、建立引用。
一般需要引用Microsoft Office 11.0 Object Library和Microsoft Excel 11.0 Object Library。
如果VBA代码中还有其他引用,在VB中也要对他们引用。
3、这一步就是具体封装代码了。
在刚才建立好的Test DLL中,将代码放入Test类模块中。
如封装ThisWorkBook中的Open事件:Sub wbk_open(EApp As Excel.Applicat ion, wb As Excel.Workbook, sh As Excel.Worksheet)'--VBA中需要封装的主体代码End Sub其中VBA中的代码为事先做好的要封装的代码,如下面这个例子:'打开工作薄后在当前的工作表A1中输入TestPrivat e Sub workbook_open()Cells(1, 1) = "Test"End Sub封装为DLL的代码为:Sub wbk_open(EApp As Excel.Applicat ion, wb As Excel.Workbook, sh As Excel.Worksheet)Cells(1, 1) = "Test"End sub现在在VB6中生成Dll,到此就完成封装了。
4、在VBA中使用封装的代码首先,在VBA中要引用刚才生成的Test Dll.dll。
然后新建一个模块,在其中定义这样一个变量T:Public T As New Test Dll.Test然后在ThisWorkBook的Open中引用Test Dll中的Test,代码如下:Privat e Sub workbook_open()On Error Resume NextT.wbk_open Applicat ion, ThisWorkbook, Act iveSheetEnd Sub这样每次打开Excel后,就在Sheet1的Cells(1,1)中输入“Test”。
2016新编DLL文件制作与在VBA调用初级进阶
DLL文件制作与在VBA调用初级进阶■作者:ldhyob 日期:2004.02本文用一简例来演示如何将一正常在VBA中运行的代码移植到VB制作的DLL中去,并介绍如何在VBA 中进行调用。
这仅仅是最初级的介绍,希望能对此内容想了解的版友们一些帮助,而已掌握该技术的FANS 们完全可以跳过本文。
先来了解一下什么是DLL:DLL是Dynamic Link Library的缩写,意为动态链接库。
在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。
当我们执行某一个程序时,相应的DLL文件就会被调用。
一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。
DLL文件一般被存放在C:\Windows\System目录下。
因此,DLL文件可以看作是一个程序扩展函数库,成为应用软件程序的外挂接口。
就象我们常在程序中用的WINDOWS API,就是如此,它是微软提供给程序员的函数宝库,用户只需了解函数功能与调用规则就可以拿来使用,而不用知道也不需要知道具体源码。
也正因为此,现在许多VBA开发者在保护其代码时也多采用此法来维护其合法权益。
现在开始。
假如我们要编这么一段代码:将工作表Sheet1的A1单元格的数值与B1单元格的数值相加填写到C1单元格去(嘿嘿,这是极简单的了,只是用来说明问题),在VBA模块我们可以编写这样的代码:Sub test()On Error Resume NextDim i, j As IntegerWith Worksheets("Sheet1")i = .Cells(1, 1).Valuej = .Cells(1, 2).Value.Cells(1, 3) = i + jEnd WithEnd Sub执行上面的宏,会发现C1单元格自动会出现A1+B1的结果了。
VB操作Excel封装成DLL
VB操作Excel封装成DLL【前言】:网上由于封装的例子和教程太零散,故系统地揭开封装神秘的面纱。
【步骤】:1、启动VB6.0程序,新建“ActiveX DLL”。
2、勾选VB对Excel的引用:(1) Microsoft Excel x.0 Object Library ;(2) Microsoft Office x.0 Object Library 。
3、在VB中编写需封装的功能代码。
(1)将工程名“工程1”改为“符合功能的名字”——如“海纳百川测试”,将类模块名“Class1”也改为另一个“符合功能的名字”——如“删除重复项”。
(说明:符合命名规则任意改为某某名,改名主要是为了区别和方便调用)(2)编写功能代码。
Sub 删重()Dim dic As ObjectDim xlApp As Excel.Application '针对GetObject获取已打开的Excel对象'Dim xlApp As New Excel.Application '针对CreateObject创建新的Excel对象Dim exWb As Excel.WorkbookDim exSh As Excel.WorksheetDim r As LongSet xlApp = GetObject(,"excel.application") '获取已打开的Excel对象'Set xlApp = CreateObject("excel.application") '创建新的Excel对象Set exWb = xlApp.ActiveWorkbook '获取当前活动工作簿'Set exWb = xlApp.Workbooks.Add '创建新的工作簿Set exSh = exWb.ActiveSheet '获取当前活动工作表'Set exSh = exWb.WorkSheets(1) '设置第一个工作表Set dic = CreateObject("scripting.dictionary")Dor = r + 1dic(exSh.Cells(r, 1).Value) = ""Loop Until exSh.Cells(r, 1) = ""exSh.Cells(1, 3).Resize(dic.Count) =Application.Transpose(dic.keys)Set dic = NothingSet xlApp=NothingSet exWb=NothingSet exSh=NothingEnd Sub4、点击——“文件”——“生成海纳百川测试.dll”——保存到指定位置。
将VBA代码编译封装成为DLL动态链接库的方法
将VBA代码编译封装成为DLL动态链接库的方法在OFFIC E中使用V BA虽然方便,并且功能强大,但是VBA在代码的保护上却存在着缺陷。
如果不对VB A工程设置密码保护,代码很容易被人浏览乃至窃取。
而且即使设置了密码保护,也很容易被人破解。
因此,要想真正保护VBA代码,要想让别人无法或难于破解您的VB A代码,那么,我们可以将V BA代码编译成为DL L动态链接库,也就是封装成为DLL的意思,下面是与此相关的方法,希望对您有所帮助。
一、为什么要编译成为DLL我们知道,Visual C++、Visual Basic和C++ Builde r以及De lphi等编译器所编译出来的程序不容易被人破解(相对来说),这是因为代码被编译成了可执行文件或者动态链接库文件。
那么,我们是否可以将VBA代码封装到动态链接库文件中,然后用Wor d调用呢?回答是肯定的。
而且这样做还有一个好处,即可以加快代码的运行速度。
二、将VBA代码封装成动态链接库假如我们已经写好了一个VBA工程,而且运行无误。
①建立VB工程及一般性操作首先,我们需要两种工具,其中当然包括Micro softWord,另外一种是M icros oft Basic6.0。
打开Micr osoft Basic6.0,在“新建工程”中选取“Active XDLL”,新建一个工程。
在属性窗口中将工程名改为VBAP rj,类模块名改为VBACl s。
然后在“工程”菜单下打开“引用”,选取“Micros oft Office 11.0 Object Librar y”——这一步很是关键,切不可遗漏,然后保存工程。
下面我们所做的是向工程内添加代码。
将VBA工程中的一个名为Test过程的代码选定后复制,然后切换到V B编辑器,选中VB的工程管理器中的类模块V BACls,将代码粘贴至代码编辑窗口中,于是这段代码便成了类模块VBAC ls一个方法,然后将工程编译生成dl l文件(如果编译成功的话)。
VBA调用外部动态链接库的方法与示例
VBA调用外部动态链接库的方法与示例VBA(Visual Basic for Applications)是微软的一种编程语言,广泛应用于Office套件中的各种应用程序,如Excel、Word和Access。
VBA允许用户通过编写宏来自动化任务、增强功能和定制用户界面。
有时候,我们可能需要调用外部的动态链接库(DLL)中的函数来扩展VBA 的功能。
本文将介绍VBA调用外部动态链接库的方法,并提供一些示例帮助读者更好地理解。
一、什么是动态链接库(DLL)?动态链接库(Dynamic Link Library,DLL)是一种微软Windows操作系统中的可执行文件。
DLL中包含可供其他程序调用的函数、数据和资源。
通过使用DLL,我们可以实现代码的共享和重复使用,提高程序的模块化程度和执行效率。
二、VBA中调用DLL的方法VBA提供了一组用于调用DLL函数的关键字和函数。
具体步骤如下:1. 声明DLL函数在VBA代码中,首先需要声明将要调用的DLL函数。
声明的语法如下:```Declare Function 函数名 Lib "动态链接库文件名" (参数列表) As 返回值类型```其中,函数名是DLL中的函数名,动态链接库文件名是DLL所在的路径和文件名,参数列表是函数的输入参数,返回值类型是函数的返回值类型。
2. 在VBA中调用DLL函数声明完DLL函数后,我们就可以在VBA代码中调用这些函数了。
调用的语法如下:```变量名 = 函数名(参数列表)```其中,变量名是接收函数返回值的变量,函数名是所声明的DLL函数的函数名,参数列表是函数的输入参数。
3. 注册和取消注册DLL在调用DLL函数之前,我们需要先将DLL注册到Windows系统中。
注册DLL可以使用Windows系统提供的regsvr32工具。
具体操作步骤如下:a. 打开命令提示符窗口。
b. 输入regsvr32命令,后面是DLL的完整路径和文件名。
VB封装Excel_VBA代码为Dll
VB封装Excel_VBA代码为Dll三、编写代码:1、将⼯程默认名称“⼯程1”,改为“zygtest”,将类模块默认名称“Class1”,改为“zyg365”,2、在类模块的代码编辑区写⼊代码:如下图3模块名称为“hongtong”,代码如下在VB中编写代码时:要注意以下声名Dim XLAPP As ObjectSet XLAPP = GetObject(,"Excel.Application")代码中引⽤对象,如SHEET,Cell等,前⾯要加“XLAPP.”特别注意(曾经困扰有段时间):不可再进⾏Dim rng AsxlApp.range,再对rng=5,会产⽣⽤户定义类型错误,直接引⽤range即可。
如:xlapp.range=5。
(或按照 Sub hongtong()中的格式编写。
)Sub hongtong()Dim excelAppAs New Excel.ApplicationDimexcelWorkBook As Excel.WorkbookDimexcelWorksheet As Excel.WorksheetSetexcelWorkBook = excelApp.Workbooks.Add '创建新⼯作簿SetexcelWorksheet = excelWorkBook.Sheets(1)excelWorksheet.Cells(2, 3) = "宏通" '写⼊数据excelWorksheet.Cells(3, 4) = "zyg365" '写⼊数据excelApp.Visible = True '显⽰excel界⾯,⽤于调试excelWorkBook.PrintPreview '打印预览excelWorkBook.PrintOut '打印输出excelWorkBook.Saved = True'excelWorkBook.Close '关闭⼯作薄'excelApp.Quit '退出excelEnd Sub四、⼯程属性设置:(可以不设置,本步骤可以省略)为了使⾃⼰开发的程序更规范,可以对本⼯程的属性加以描述:如下图4执⾏:“⼯程(P)”——“⼯程1属性(E)…”(当前⼯程中为:“zygtest属性(E)…”)五、保存⼯程、测试、打包⽣成Dll⽂件:1、保存:单击保存,保存到⼀个⽂件夹中;2、测试:执⾏⼯具栏上的“启动”(右向的三⾓图标)按钮,检查是否存在错误;3、打包⽣成Dll⽂件:执⾏:“⽂件(F)”——“⽣成⼯程1.dll(K)”(当前⼯程中为:“zygtest.dll”),重命名为“zyg.dll”,⾄此,Dll⽂件制作结束。
VB封装DLL实例讲解(一)
e an dAl l t h VB 封装DLL 实例讲解(一)一、DLL 基本概念(一)概念DLL 即动态链接库(Dynamic Link Library ),是由可被其它程序调用的函数集合组成的可执行文件模块。
DLL 不是应用程序的组成部分,而是运行时链接到应用程序中。
(二)主要优点:1、多个应用程序可以共享一个DLL ,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;3、从ACCESS 角度而言,还可以更好的确保核心代码的安全。
二、用VB 封装VBA 代码,构建自定义的DLL 动态链接库(一)ACCESS 中实例代码下面是一个“快速提取字符串中数字.mdb ”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
我将就这个实例演示如何将该实例VBA 代码封装成为DLL 。
按钮单击事件代码如下:Private Sub CmdFindnumber_Click()Dim strM As String '初始字符串Dim strOut As String '输出字符串变量 Dim IstrM = Me.Text1'从第一个字符向最后一个字符循环,以提取每个字符 For I = 1 To Len(strM)'判断是否为0到9字符,是则赋值输出 If Mid(strM, I, 1) Like "[0-9]" Then strOut = strOut & Mid(strM, I, 1) End If Next I'用MsgBox 函数进行输出测试End Sub以上代码还不能直接用于封装,须将其修改成为公用函数(过程)(二)VB 封装实例中VBA 代码步骤一:在VB 编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口步骤二:修改工程名,这即生成的DLL 库名步骤三:修改类名步骤四:在代码窗口输入如下代码。
VBA调用外部DLL文件的高级技巧与应用
VBA调用外部DLL文件的高级技巧与应用VBA(Visual Basic for Applications)是一种流行的编程语言,广泛用于Microsoft Office套件中的应用程序如Excel、Word和Access。
VBA内置了许多功能,但有时候我们可能需要更高级的功能来实现我们的需求,这时候就可以借助外部DLL文件来扩展VBA的功能。
DLL(动态链接库)文件是包含可供多个程序共享和使用的代码和数据的文件。
VBA可以通过使用Declare语句来引用DLL文件中的函数和过程,从而实现对其功能的调用。
在本文中,我们将探讨一些VBA调用外部DLL文件的高级技巧和应用。
1. 理解DLL文件的结构与导出函数DLL文件包含了一组导出函数,通过这些函数可以实现对DLL提供的功能的调用。
在VBA中,我们需要了解DLL文件的结构以及导出函数的名称、参数和返回值类型。
2. 声明DLL函数在VBA中,通过使用Declare语句可以声明外部DLL函数的名称、参数和返回值类型。
声明外部函数的正确性对于调用DLL文件非常重要。
例如,下面是一个声明ShellExecute函数的示例:Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA"_(ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFileAs String, ByVal lpParameters As String, _ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long在这个示例中,我们声明了一个名为ShellExecute的函数,它位于shell32.dll文件中。
该函数用于执行操作系统的某些功能,例如打开文件或运行程序。
VB封装DLL实例讲解(三)
VB封装DLL实例讲解(三)一、手动注册及引用(一)手动注册及引用方法(参看实例:手动引用.mdb)进入VBA编辑窗口,点菜单【工具】—【引用】,打开【引用】对话框,点【浏览】按钮,打开【添加引用】对话框,点选要引用的DLL(测试实例为:ClsFindString.dll),点【打开】—点【确定】,我们完成动态链接库的手动注册及引用。
4点确定按钮1点浏览按钮2点选DLL3点打开按钮(二)手动注册及引用方法不足及问题手动注册引用优点是不言而喻的,方便简捷,易于操作。
但在实际运用中,当我们在其他电脑上发布应用程序,或运行我们测试好的应用程序时,却会出现错误提示,程序无法正常运行。
错误(一):找不到工程或库(见下图)错误的主要原因:DLL在当前运行的电脑系统中没有注册信息,而且引用不正确。
错误(二):引用的动态链接库(DLL)丢失(见下图)进入到VBA编辑窗口,点菜单【工具】—【引用】,打开【引用】对话框,我们会看到之前引用的DLL动态链接库丢失。
错误的主要原因:系统无法找到原路径引用DLL。
错误(三):自动化错误(见下图)错误的主要原因:我们在发布应用程序的电脑或系统中,虽然重新完成DLL手动注册和引用,但如果DLL路径再次改变,运行程序时就会出现“自动化错误”提示。
错误(四):ActiveX部件不能创建对象(见下图)错误的主要原因:应用程序已正常引用DLL动态链接库,但其册注信息丢失或者没有正常注册,就会出现以下问题。
(三)解决上述错误方法1、解决错误方法,当然是重新进行DLL的手动注册及引用,具体步骤参下图。
但这只是治标不治本的办法,不利于对外发布我们的应用程序,最好的办法还是通过VBA自动完成DLL的注册及引用。
1去除丢失DLL钩选5点确定按钮2点浏览按钮3点选DLL4点打开按钮我们可以将注册语句放在窗体的加载事件,自动完成DLL的注册,具体可以参看实例。
但如果我们有多个DLL需要批量注册时,可以考虑通过软件打包发布工具来完成DLL的注册工作;也可以事先编写BAT文件,让打包发布时将该BAT文件一并打包发布,安装时运行该BAT文件,来完成N个DLL的批量注册,在些就不多着笔墨,大家可以参看实例包中的BAT文件实例。
Excel?VBA的封装,加密
Excel?VBA的封装,加密对想发布自己的Excel VBA的开发者来说,Excel VBA本身不提供VBA代码的加密,封装。
目前比较最可靠的Excel VBA代码加密的方法,就是把VBA代码编译成DLL(动态链接库文件),在VBA中调用,从而实现VBA代码的加密,封装,方便和Excel文件整合发布出去。
DLL文件基本没法被破解,除此之外其他的VBA加密方法,都可以被轻易破解。
用户只需要你的Excel文件,和这个dll文件就够了,不必安装其他任何程序。
编译成DLL文件其实很简单。
机子上安装Visual Basic 6.0就可以编译成dll文件了,Visual Basic .Net反倒有点麻烦。
Visual Basic通过OLE(对象链接引擎)技术调用Excel以及其中的对象。
总的来说,VBA代码只要做一些简单修改就可以了。
主要是对Excel对象的引用,不然VB不能识别vba代码中的对象。
比如如下的VBA代码windows(workbook1).activaterange("L50")=1直接放进VB中编译成Dll就会有问题,因为VB不能直接识别range对象。
需要添加几行简单的代码来告诉vb怎么引用excel中的这些对象:dim xlapp as excel.applicatiiondim xlbook as excel.workbookdim xlsheet as excel.worksheetset xlapp=getobject(,"excel.application)set xlbook=getobject(xxx)set xlsheet=xlbook.worksheets(1)然后就照搬你原有的vba代码,但是前面加上对象引用:xlsheet.range("L50")=1对VBA代码做这样修改,在VB中调试通过,就可以成功的把多个sub子程序全部编译封装在一个单独的DLL文件了。
使用VB将CAD中使用VBA编写的DVB文件封装成DLL
使用VB将CAD中使用VBA编写的DVB文件封装成DLL (2008-07-16 15:09:24)转载▼标签:it分类:工作/开发方面目的:使用VB将CAD中使用VBA编写的DVB文件封装成DLL,保护自己的核心代码步骤:1、在VB中创建ActiveX DLL,并引用“AutoCAD 库(AutoCAD 2006 Type Library)”2、将DVB中的代码(需要保护的)拷贝到VB代码区中,并将所有ThisDrawing全部替换为acadDoc3、在VB代码区输入如下代码:Dim acadApp As ObjectDim acadDoc As ObjectPublic Sub ChangeColor()Set acadApp = GetObject(, "AutoCAD.Application")Set acadDoc = acadApp.ActiveDocumentacadApp.WindowState = acMaxCall PinkTxtLwP 'PinkTxtLwp就是DVB中的过程(函数)End Sub4、在VB中,文件——生成**.dll文件5、返回VBA界面,引用刚才生成的DLL文件6、在VBA代码区中输入如下代码'ChangeColor为VB中新创建ActiveX Dll文件后类的名称'默认为Class1Dim ChgCor As New ChangeColorPublic Sub TestChangeColor_Dll()ChgCor.ChangeColorEnd Sub7、OK,运行TestChangeColor_Dll即可,这样就保护了自己的核心代码。
VBA封装dll初步
按钮实例属性的设置
VB封装excel外接dll的具体作法
加载按钮类的事件
Dim WithEvents button1 As CommandBarButton 作用:加载给一个实例对应类的事件;
VB封装excel外接dll的具体作法
复制VBA代码,适当修改
为什么要修改? 怎么修改? Vb只能识别顶层对象; 从顶层开始,完整引用对象;
VB封装excel外接dll的具体作法
调试,编译成DLL文件
调试技巧: 多用MSGBOX输出过程的值;
设置断点,分步调试;
DLL文件编译输出
VB封装excel外接dll的具体作法
DLL文件注册
利用RegSvr32命令来注册dll文件; RegSvr32 /s /u dll文件 卸载
相对路径或绝对路径
安静模式,不跳出对话框
谢谢大家!
用法:在vba中以函数形式调用; 优点:不仅仅可以使用在VBA中; 缺点:使用时还要再次书写调用办法,相对麻烦。
VBA封装dll的办法
方式二:以外接程序形式 用法:在excel中以外接程序形式执行; 优点:无需再次编写调用办法,直接执行;
缺点:只能在指定的程序中外接。 思考:如果多场合使用,应该用哪种方式封装 dll文件?
启动时加载
VB封装excel外接dll的具体作法
建立vb模块简介;
标准模块:放置公用函数、过程 和全局变量,便于其它模块调用; 类模块:面向对象的核心,可以 自定义对象,也可继承已经有的 对象(含事件、属性和方法等)
VB封装excel外接dll的具体作法
自定义工具栏、按钮编写:
强制变量声明,便于错误调试
VBA封装dll初步
用VB.NET(Visual
⽤(Visual Basic 2010)封装EXCEL VBA为DLL_COM。
为了保护⾃⼰⾟⾟苦苦编写的Excel VBA代码不被盗⽤,我们需要对Excel VBA代码进⾏加密。
通常的做法是利⽤给⼯程设置密码的⽅法实现加密,对于这类加密⽅法,由于存在安全度低、易破解等问题,因此往往起不到应有的效果。
通过将Excel VBA代码封装成DLL动态链接库,可有效防⽌代码被⾮法查看。
在百度⾥搜索“封装EXCEL VBA”关键字,有很多封装VBA的教程,但99%是利⽤VB6(Microsoft Visual Basic 6.0)来封装,主要原因是VB6的操作界⾯及语法与Excel的VBA具有极⾼的相似度。
2002年,随着的引⼊,⼤部分⼈都放弃使⽤VB⽽选择,VB6终将被淘汰,因此我们必须与时俱进,学习⽤Microsoft Visual Basic 2010封装VBA。
我们可以在VS⾥建⽴com类项⽬,把NET类库的⼀些⽅法重新包装后暴露给VBA使⽤。
案例:在⼯作表的C1单元格得出A1单元格+B1单元格的值。
设计的VBA代码:1Sub Test()2On Error Resume Next3 Range("C1").Value = Range("A1").Value + Range("B1").Value4End Sub⼀、使⽤Microsoft Visual Basic 2010制作DLL⽂件⼯具及原料:1、Microsoft Office Excel 20032、Microsoft Visual Studio 20103、Windows XP 32位操作系统操作步骤:1、启动Microsoft Visual Studio 2010,在起始页界⾯点击“新建项⽬”,如图1所⽰。
图12、在弹出的“新建项⽬”对话框选择“类库”,修改名称为“VBADLL”,点击确定,如图2所⽰。
VB封装DLL实例讲解(二)
VB 封装DLL 实例讲解(二)上文中我们已经就DLL 的基本概念,以及如何将VBA 代码封装为DLL ,如何引用该生成的DLL 动态链接库,进行了初步的讲解,我想大家对于VB 封装DLL 应该有了一个初步的了解。
下面主要就DLL 如何实现对ACCESS 对象进行封装方法进行探讨。
一、如何在VB 中实现对ACCESS 对象编程(一)在VB 中引用ACCESS 对象类库我们要通过编译DLL 来实现对ACCESS 对象的封装,首先必须在VB 中引用ACCESS 对象类库,这样我们就可以在VB 中,实现对ACCESS 应用程序中的对象进行编程。
打开VB 编辑窗口,点菜单【工程】-【引用】,打开【引用对话框】,点选“Microsoft Access 11.0 Object Library ”完成对当前版本ACCESS 应用程序对象的引用。
(实例演示版本为ACCESS 2003)对ACCESS 对象库的引用很关键,否则我们无法实现对ACCESS 对象的编程(二)了解ACCESS 对象模型在VB 中要对ACCESS 对象进行编程,还必需对ACCESS 所提供的各项对象有一定了解,因为VB 就是通过ACCESS 对象的方法与属性,来完成各项操作与设置,下图为ACCESS 2003 的对象部分模型图例。
上图为ACCESS 2003对象模型,因为篇幅的问题,文中只显示模型中部分对象,要了解全部对象模型,请大家参阅帮助。
(三)VB编程中ACCESS VBA与VB对象表述区别1、ACCESS VBA与VB的顶层对象都为Application,但在编程中ACCESS VBA顶层对象表述为:Application,而在VB编程中顶层对象用简写:App表述(到又改回了Application)。
✍例程:在VB编程中获得VB及ACCESS VBA获取当前路径实例:'在VB中获得当前路径:App.Path'在VB中获得ACCESS的当前路径:Application.CurrentProject.Path在office各应用程序之间调用各组件时,通常在对象前加上库名,如:Access.Application 来表述,但因为VB与ACCESS顶层对象原本表述就存在区别,在VB中可以直接用Application表述ACCESS 应用程序对象,并不会产生冲突的问题。
在-Windows-7-环境下封装-Excel-VBA-代码
在Windows 7 环境下封装Excel VBA 代码一、安装Visual Basic 6.0在Windows 7 下安装Visual Basic 6.0安装会遇到一些兼容性问题,而Windows XP 则很顺利。
当某些程序必须要在Windows 7 下调试的时候,就一定要面对Windows 7 了。
(一)进入安装文件夹,点击“Setup.exe”运行Visual Basic 6.0安装程序。
(二)出现兼容性问题提示,单击“运行程序”。
(三)进入Visual Basic 6.0安装向导,单击“下一步”。
(四)出现“最终用户许可协议”对话框,选择“接受协议”,单击“下一步”。
(五)进入“产品和用户ID”对话框,在“请输入产品的ID号”处输入ID号,全部输入0至9中的任意一个,然后单击“下一步”。
(六)保持默认选择“安装Visual Basic 6.0中文企业版”,单击“下一步”。
(七)选择公用安装文件夹,采取默认或自定义均可。
然后单击“下一步”(八)再次出现兼容性问题提示,直接单击“运行程序”。
(九)进入Visual Basic 6.0 安装程序,单击“继续”后,单击“确定”。
(十)出现“发现了旧版本的Visual SourceSafe”提示,选择“是”(十一)在选择安装类型对话框中,封装Excel VBA 代码选择“典型安装”即可。
(十二)出现“使用新的Visual SourceSafe数据库格式”提示,选择“是”(十三)开始Visual Basic 6.0安装。
(十四)安装完毕,单击“重新启动Windows”。
重新启动Windows后,自动弹出下面的对话框。
如果需要帮助文档,可单击“下一步”继续安装MSDN,对于Visual Basic 6.0的初学者,建议安装。
在安装MSDN 过程中,插入MSDN安装盘按照提示进行安装。
如果不需要帮助文档,单击“退出”,Visual Basic 6.0安装完成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VBA封装为DLL及调用2012-09-04 02:36:00| 分类:VB / VBA / EXCEL | 标签:|举报|字号大中小订阅使用程序:1、Microsoft Office Excel 20032、Microsoft Visual Basic 6.0案例:在工作表的C1单元格得出A1单元格+B1单元格的值。
设计的VBA代码:Sub Test()On Error Resume NextRange("C1") = Cells(1, 1) + Cells(1, 2)End Sub第一部分、使用VB6.0制作DLL文件一、启动VB6.0,新建一个ActiveX DLL工程:二、引用:在VB中对Excel的引用不同版本的EXCEL在“引用”窗口里显示的版本号也不同:EXCEL2000(Microsoft Office 9.0)EXCEL2002(Microsoft Office 10.0),即ExcelXP EXCEL2003(Microsoft Office 11.0)EXCEL2007(Microsoft Office 12.0)EXCEL2010(Microsoft Office 14.0)EXCEL2013(Microsoft Office 15.0)三、修改ActiveX DLL的工程名称和类模块名称四、编写代码:在代码窗口输入代码,过程名称为Test:Sub Test()On Error Resume NextDim VBt, YB '定义变量VBtSet VBt = GetObject(, "Excel.Application") '使VBt表示为EXCEL对象Set YB = VBt.ActiveSheet '使YB表示为EXCEL的当前工作表'注意要在对象前加上YB变量以表示是EXCEL当前工作表的对象YB. Range("C1") = YB.Cells(1, 1).Value + YB.Cells(1, 2).ValueEnd Sub五、设置工程属性(为使开发的程序更规范,可以对工程属性加以描述【非必要设置,可以省略】):六、保存工程、测试、生成DLL文件:1、保存工程:保存本工程以作为将来修改代码和升级程序的需要;2、测试工程:执行快捷工具栏上的“启动”按钮,检查是否存在错误;3、生成DLL文件:制作DLL文件。
第二部分、调用DLL文件一、在VBE中调用DLL文件调用DLL文件,要分两步走:先注册DLL,再引用DLL。
1、注册DLL(使之放在可引用的列表上):注册DLL也可以使用代码来做,但那样比较复杂,也存在很多问题,建议一般使用手工来注册。
(这里应该先设计好DLL文件放在硬盘的位置,因为后面引用DLL文件的代码也应该是指向这个位置的。
)先打开EXCEL,再打开“Visual Basic 编辑器”2、引用DLL(这样每次打开打开文件时,就不必再去那个引用列表里打个勾了)①DLL文件放在与EXCEL文件同一个文件夹内在ThisWorkbook中添加如下代码:Private Sub Workbook_Open() '打开文件时加载要引用的DLL文件shell "Regsvr32 /s " & Chr(34) & ThisWorkBook.path & "\VBADLL.dll"& Chr(34)End SubPrivate Sub Workbook_BeforeClose(Cancel As Boolean) '关闭文件之前卸载引用的DLL文件shell "Regsvr32 /s /u " & Chr(34) & ThisWorkBook.path & "\VBADLL.dll"& Chr(34)End Sub'/s参数是防止出现确认窗口;/u参数为取消引用。
②DLL文件放在固定文件夹内,如果你有多个XLS文档需要使用到同一个DLL文件,但这些XLS文档又不可能都与DLL文件放在同一个文件夹,则需要将DLL文件放置到一个固定文件夹,这样,只需要将上面的代码ThisWorkBook.path & "\VBADLL.dll" 换成一个固定位置即可。
注意:有时间可能出现某些错误,如提示“变量类型未定义”等,可能是引用后改变了文件的位置或改变了文件的名称,即使再重新再改回来也可能会出现这些问题,所以,在正确注册及引用以后,最好不要再去修改这个DLL文件。
如果出现问题,重新注册一次,保证注册的DLL文件的位置正确即可。
二、新建一个模块,输入调用DLL文件程序的过程:Sub DLLtest()Dim ABC As New VBAtest '定义ABC为新类,即为DLL文件中的类模块VBAtest ABC.Test '调用DLL中提供的过程,来完成原来在VBA中的功能,起到隐藏代码的效果Set ABC = Nothing '释放类资源End Sub三、在工作表中运行DLLtest宏即可实现调用:综上所述,感觉封装DLL的主要步骤是:①在VB中引用EXCEL;②编辑代码(要在对象前面加上定义的EXCEL变量);③在VBE中引用该DLL文件;④在VBE的代码中调用DLL中的过程。
简述封装VBA自定义函数dll以及在VBA和工作表中的引用[复制链接]本帖已被收录到知识树中,索引项:封装本帖最后由时光鸟于2013-1-10 10:50 编辑说实话,EXCELHOME里高手如云,我写这个东西真有点班门弄斧的味道,高手们请忽略此贴!之所以决定写,一方面是自己学习总结的一点心得体会;另一方面与想学习这方面东西的筒子们一起分享交流。
还有一个更重要的原因就是,我能找到的现有的文章中,关于封装、在VBA中引用及在工作表中引用这三个方面都谈到了的比较系统的介绍比较少,甚至没有。
闲话不说了,开始正题:一、用VB6.0封装自定义函数1.VB6.0封装是最方便受限制最少的方法,当然用的C#也可以做来(这里不作介绍),但需要.net库及对应的版本支持大家都知道win7是VB6.0所能支持的最后一个系统,win8已经不再支持官方安装版的VB6.0了,要想在win8中用VB6.0也是可以的,那就是用精简版的VB6.0(只有6M左右),封装VBA足够用了。
2.以管理员身份运行VB6.0(一定要以管理员身份运行),在弹出新建工程中选择ActiveX dll3.在工程管理器分别修改工程名称及类名称(改名是为了方便,如果仅测试不改名也行)4.工程名称及类名称改完后,把写好的VBA自定义函数复制到刚新建的工程的类模块中(本例是myClass),复制过来的函数一定不能是private的,要么是public的,要么前面空出来,原因不言自明。
5.如果你复制过来的函数是经过测试没有问题的话,选择左上角“文件”--生成XXXX(本例是生成TransNumber.dll),在弹出的对话框中选择该.dll封装文件的存放位置即可(随便什么位置),如果没有错误提示的话,那么封装就算是完成了!!(如果不是管理员身份运行VB6.0时,此处会提示不能访问注册表的错误提示)特别说明:如果你的VBA里不包含excel对象的话,可以按上述步骤封闭,如果包含excel对象的话,那么对应的工作就要麻烦一点了,在VB6.0中封装成dll前(也就是在进行上述第5步前),要先在vb6.0中添加引用Microsoft Office 15.0 Object Library和MicrosoftExcel 15.0 Object Library (不同的office版本,相应的版本号会不同,我这里是office2013,所以版本号是15.0)在所有的过程前加上这两句:自定义一个Excel.Application对象xlapp(起别的名字也行,随便)Dim xlapp As ObjectSet xlapp = GetObject(, "Excel.Application")然后在所有excel对象前面加上xlapp。
比如,sheet,cells,range,workbook等都是excel的对象,都要改成xlapp.sheet,xlapp.cells,xlapp.range,xlapp.workbook的形式。
当然这些改动最好在VBA工程里面测试无误后再复制到vb6.0里封装。
(鉴于很多朋友看东西速度快得惊人,以至于将这部分完全忽略,没办法,只好加红,如果还是忽略,我也没招了)二、在工作表中引用已封装的自定义函数。
6.在标题栏点击“开发工具”(如果没有的话,在选项中自定义设置中自己调出来,如下图),选择COM加载项,在弹出窗口中选择添加,找到刚才生成的.dll(本例是TransNumber.dll)文件,然后再点确定。
7.接下来在标题栏点击“开发工具”选择“加载项”(注意:这里不是“COM加载项”,而是紧靠COM加载项的“加载项”),在弹出对话框中选择自动化,然后再在弹出的自动化服务器中选择我们刚才生成的函数(本例是transNumber.myClass),找到后选择并确定,然后在刚才弹出的加载宏对话框中就多了我们添加的函数了,再点确定后就完成了所有设置,接下来就可以在工作表中像使用内置函数那样使用我们的自定义函数了。
(如下图)三、在VBA工程中引用已封装的自定义函数。
8.打开VBA工程,选择“工具”--“引用”,在弹出的引用对话框中点“浏览”,找到我们生成的.dll(本例是TransNumber.dll),点确定后回到刚才引用对话框里就多了我们的自定义函数transNumber,确定后完成设置。
2012-12-31 19:58 上传下载附件(42.3 KB)9.在VBA中就可以用"工程名.类名称.函数名()"的方式引用我们的自定义函数了,为简化代码,你也可以按下图方式操作。
至此,自定义函数的封装、在工作表的中引用及在VBA工程中的引用都介绍完毕了。
有不对的地方,恳请指定,谢谢。