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初步

VB封装excel外接dll的编写思路
编写vba程序; 利用vb创建EXCEL外接程序; 创建加载项工具按钮(菜单); 复制VBA代码到相应位置,适当修改;
编译成DLL文件;
系统注册DLL文件;
VB封装excel外接dll的具体作法
建立vb外接程序项目; 外接软件设置;
在exapp上添加一个工具栏实例: 名称为”test tools”,位置在excel窗口上方
Set newtool = mandBars.Add(Name:="test tools", Position:=msoBarTop)
VB封装excel外接dll的具体作法
创建工具栏对象实例
用法:在vba中以函数形式调用; 优点:不仅仅可以使用在VBA中; 缺点:使用时还要再次书写调用办法,相对麻烦。
VBA封装dll的办法
方式二:以外接程序形式 用法:在excel中以外接程序形式执行; 优点:无需再次编写调用办法,直接执行;
缺点:只能在指定的程序中外接。 思考:如果多场合使用,应该用哪种方式封装 dll文件?
Set button1 = newtool.Controls.Add(Type:=msoControlButton)
在newtool工具栏上上添加一个集合实例: 类型为按钮
With button1 .Caption = "测试1" .Style = msoButtonIconAndCaption .ToolTipText = "测试提示字符1" .FaceId = 18 .OnAction = "test1" .Tag = "test1" End With
发布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了!这一句我们在上面将此设置为全局变量,方便下面的语句。
在vb中生成dll文件并且调用的方法.

在vb中生成dll文件并且调用的方法.一、DLL制作1.打开新建工程2.选择“Active DLL”,单击“打开”按钮。
3.单击打开按钮后,系统在工程中添加一类模块。
4.为方便对DLL的引用可以改一下名称,如将类模块的名称改为Fraction。
5.在本类模块中添加代码如下。
Option ExplicitPublic NumPublic DenPublic Sub Add(NUm2, Den2)Num = NUm2 + Den2End SubPublic Sub Sbt(NUm2, Den2)Num = NUm2 - Den2End SubPublic Sub Mul(NUm2, Den2)Num = NUm2 * Den2End SubPublic Sub Div(NUm2, Den2)Num = NUm2 / Den2End Sub6.为与其他工程相区别,可将本工程命名为“Math”。
7.生成DLL文件。
二、DLL引用1.建立一个普通窗体。
2.添加引用。
3.在程序中添加以下代码。
Option ExplicitPublic Frac As New Fraction Private Sub Command1_Click() Frac.Add Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command2_Click() Frac.Sbt Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command3_Click() Frac.Mul Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command4_Click() Frac.Div Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command5_Click()Text1 = ""Text2 = ""Text3 = ""End Sub 4.运行程序。
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”。
将VBA代码编译封装成为DLL动态链接库方法

将VBA代码编译封装成为DLL动态链接库方法在OFFICE中使用VBA虽然方便,并且功能强大,但是VBA在代码的保护上却存在着缺陷。
如果不对VBA工程设置密码保护,代码很容易被人浏览乃至窃取。
而且即使设置了密码保护,也很容易被人破解。
因此,要想真正保护VBA代码,要想让别人无法或难于破解您的VBA代码,那么,我们可以将VBA代码编译成为DLL动态链接库,也就是封装成为DLL的意思,下面是与此相关的方法,希望对您有所帮助。
一、为什么要编译成为DLL我们知道,Visual C++、Visual Basic和C++ Builder以及Delphi等编译器所编译出来的程序不容易被人破解(相对来说),这是因为代码被编译成了可执行文件或者动态链接库文件。
那么,我们是否可以将VBA代码封装到动态链接库文件中,然后用Word调用呢?回答是肯定的。
而且这样做还有一个好处,即可以加快代码的运行速度。
二、将VBA代码封装成动态链接库假如我们已经写好了一个VBA工程,而且运行无误。
①建立VB工程及一般性操作首先,我们需要两种工具,其中当然包括Microsoft Word,另外一种是Microsoft Basic 6.0。
打开Microsoft Basic 6.0,在“新建工程”中选取“ActiveX DLL”,新建一个工程。
在属性窗口中将工程名改为VBAPrj,类模块名改为VBACls。
然后在“工程”菜单下打开“引用”,选取“Microsoft Office 11.0 Object Library”——这一步很是关键,切不可遗漏,然后保存工程。
下面我们所做的是向工程内添加代码。
将VBA工程中的一个名为Test过程的代码选定后复制,然后切换到VB编辑器,选中VB的工程管理器中的类模块VBACls,将代码粘贴至代码编辑窗口中,于是这段代码便成了类模块VBACls一个方法,然后将工程编译生成dll文件(如果编译成功的话)。
在Word中,我们就可以通过类模块VBACls建立的对象来调用此方法(具体怎么调用,我们将后面介绍)。
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封装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 库名步骤三:修改类名步骤四:在代码窗口输入如下代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
V B A封装为D L L及调用
使用程序:
1、MicrosoftOfficeExcel2003
2、
案例:在工作表的C1单元格得出A1单元格+B1单元格的值。
设计的VBA代码:
SubTest()
OnErrorResumeNext
Range("C1")=Cells(1,1)+Cells(1,2)
EndSub
第一部分、使用制作DLL文件
一、启动,新建一个ActiveXDLL工程:
二、引用:在VB中对Excel的引用
不同版本的EXCEL在“引用”窗口里显示的版本号也不同:
EXCEL2000()
EXCEL2002(),即ExcelXP
EXCEL2003()
EXCEL2007()
EXCEL2010()
EXCEL2013()
三、修改ActiveXDLL的工程名称和类模块名称
四、编写代码:
在代码窗口输入代码,过程名称为Test:
SubTest()
OnErrorResumeNext
DimVBt,YB'定义变量VBt
SetVBt=GetObject(,"")'使VBt表示为EXCEL对象
SetYB='使YB表示为EXCEL的当前工作表
'注意要在对象前加上YB变量以表示是EXCEL当前工作表的对象
("C1")=(1,1).Value+(1,2).Value
EndSub
五、设置工程属性(为使开发的程序更规范,可以对工程属性加以描述【非必要设置,可以省略】):
六、保存工程、测试、生成DLL文件:
1、保存工程:保存本工程以作为将来修改代码和升级程序的需要;
2、测试工程:执行快捷工具栏上的“启动”按钮,检查是否存在错误;
3、生成DLL文件:制作DLL文件。
第二部分、调用DLL文件
一、在VBE中调用DLL文件
调用DLL文件,要分两步走:先注册DLL,再引用DLL。
1、注册DLL(使之放在可引用的列表上):
注册DLL也可以使用代码来做,但那样比较复杂,也存在很多问题,建议一般使用手工来注册。
(这里应该先设计好DLL文件放在硬盘的位置,因为后面引用DLL文件的代码也应该是指向这个位置的。
)
先打开EXCEL,再打开“VisualBasic编辑器”
2、引用DLL(这样每次打开打开文件时,就不必再去那个引用列表里打个勾了)
①DLL文件放在与EXCEL文件同一个文件夹内
在ThisWorkbook中添加如下代码:
PrivateSubWorkbook_Open()'打开文件时加载要引用的DLL文件
shell"Regsvr32/s"&Chr(34)&&"\"&Chr(34)
EndSub
PrivateSubWorkbook_BeforeClose(CancelAsBoolean)'关闭文件之前卸载引用的DLL文件shell"Regsvr32/s/u"&Chr(34)&&"\"&Chr(34)
EndSub
'/s参数是防止出现确认窗口;/u参数为取消引用。
②DLL文件放在固定文件夹内,如果你有多个XLS文档需要使用到同一个DLL文件,但这些XLS文档又不可能都与DLL文件放在同一个文件夹,则需要将DLL文件放置到一个固定文件夹,这样,只需要将上面的代码&"\"换成一个固定位置即可。
注意:有时间可能出现某些错误,如提示“变量类型未定义”等,可能是引用后改变了文件的位置或改变了文件的名称,即使再重新再改回来也可能会出现这些问题,所以,在正确注册及引用以后,最好不要再去修改这个DLL文件。
如果出现问题,重新注册一次,保证注册的DLL文件的位置正确即可。
二、新建一个模块,输入调用DLL文件程序的过程:
SubDLLtest()
DimABCAsNewVBAtest'定义ABC为新类,即为DLL文件中的类模块VBAtest '调用DLL中提供的过程,来完成原来在VBA中的功能,起到隐藏代码的效果SetABC=Nothing'释放类资源
EndSub
三、在工作表中运行DLLtest宏即可实现调用:
综上所述,感觉封装DLL的主要步骤是:
①在VB中引用EXCEL;
②编辑代码(要在对象前面加上定义的EXCEL变量);
③在VBE中引用该DLL文件;
④在VBE的代码中调用DLL中的过程。