VB封装Excel_VBA成DLL技巧

合集下载

VBA封装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

VBA在Excel中的应用技巧与经验分享

VBA在Excel中的应用技巧与经验分享

VBA在Excel中的应用技巧与经验分享Excel是一款功能强大的电子表格软件,VBA(Visual Basic for Applications)是一种编程语言,可以在Excel中自动执行任务,提高工作效率。

本文将分享一些VBA在Excel中的应用技巧与经验,以帮助读者更好地理解和使用VBA。

1. 使用VBA自动化重复性任务在Excel中,经常会有一些需要重复执行的任务,如数据导入、格式化等。

通过使用VBA,可以编写脚本来自动执行这些任务,提高工作效率。

例如,可以编写一个VBA脚本来自动导入外部数据,并将其格式化为特定的样式。

通过使用VBA,可以减少手动操作的时间和错误。

2. 利用VBA实现自定义的功能和操作Excel提供了很多内置的功能和操作,但有时候我们需要根据具体的需求来定制一些特定的功能。

通过使用VBA,我们可以编写自定义的函数和子程序来实现这些功能。

例如,可以编写一个VBA函数来计算一列数据的平均值,并将结果显示在另一个单元格中。

这样,我们可以根据具体的需求自定义一些功能,提高工作效率。

3. 使用VBA实现数据处理和分析Excel中的数据处理和分析是我们经常需要进行的任务之一。

通过使用VBA,可以编写脚本来处理和分析大量的数据。

例如,可以编写一个VBA脚本来自动计算某个数据范围的总和、平均值和标准差,并将结果显示在另一个工作表中。

这样,我们可以快速地进行数据处理和分析,提高工作效率和准确性。

4. 使用VBA创建自定义的用户界面Excel中的用户界面对于数据的输入和操作非常重要。

通过使用VBA,可以编写脚本来创建自定义的用户界面,以便用户更方便地输入和操作数据。

例如,可以创建一个自定义的对话框,其中包含一些文本框和按钮,让用户输入数据并执行某些操作。

这样,我们可以根据具体的需求来创建用户友好的界面,提高工作效率。

5. 使用VBA进行数据的自动更新和刷新在Excel中,我们经常需要处理实时更新的数据,如股票行情、天气数据等。

VBA代码封装过程

VBA代码封装过程

VBA代码封装过程一、函数和子过程的封装过程二、封装后函数和子过程的调用三、窗体的封装和调用四、com加载项的制作五、利用com加载项制作功能区如果你写VBA代码只是给自己使用或者不介意和别人共享代码,那么就用不到封装。

我们一般用VB6.0作为VBA代码的封装工具,VBA代码的封装在我理解就是将VBA代码修改成VB6.0能运行的代码,然后利用VB6.0可以制作dll文件的特点将所有代码封装在dll文件中,最后我们可以通过安装加载项或者引用的方式在工作表界面或VBA界面调用其中的函数、子过程和窗体。

下面让我们具体看下VBA代码的封装过程(封装调用环境:xp系统,excel2007,VB6.0):一、函数和子过程的封装过程函数和子过程也就是function过程和sub过程。

封装的过程如下:1、在vba编写代码,此次实验的代码如下,包含一个函数过程和一个子过程:Function ceshi(a, b)ceshi = a + bEnd FunctionSub ceshi1()MsgBox End Sub2、打开VB6.0,新建工程,选择ActiveX dll,然后点打开。

3、点打开后在该工程中可以看到工程自带一个类模块,可以修改工程名字和类模块名字,也可以选择默认的工程名和类模块名,修改工程名和类模块名的过程如下,在VB6.0界面右边工程资源管理器窗口(如果没看见该窗口,可点击菜单栏中“视图”菜单的工程资源管理器命令调用)选择工程名(类模块名),然后在下面属性窗口“名称”一行修改成自己想要的名称,这里我们将工程名修改成fengzhuang,类模块名修改成cls14、右键点击类模块,在弹出的快捷菜单中选择查看代码,然后将VBA代码复制到类模块代码窗口中,部分代码要稍作修改,改成VB6.0能识别的代码。

如上面的子过程中出现了application对象,代表excel应用程序,但是在vb6.0直接这样写会出现错误,VB6.0并不能识别这就是一个excel应用程序对象,就像我们在VBA中直接写Dictionary(字典对象)和regexp(正则对象)一样,VBA并不能识别,要VBA能识别这两个对象,要么是创建新的对象(前期绑定和后期绑定),要么是获取已有的对象(前期绑定和后期绑定),因为我们在VBA中运行代码时,excel应用程序已经存在了,所以我们只需要获取已有对象即可。

VBA封装为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”。

VB操作Excel封装成DLL

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动态链接库的方法

将VBA代‎码编译封装‎成为DLL‎动态链接库‎的方法在OFFI‎C E中使用‎V BA虽然‎方便,并且功能强‎大,但是VBA‎在代码的保‎护上却存在‎着缺陷。

如果不对V‎B A工程设‎置密码保护‎,代码很容易‎被人浏览乃‎至窃取。

而且即使设‎置了密码保‎护,也很容易被‎人破解。

因此,要想真正保‎护VBA代‎码,要想让别人‎无法或难于‎破解您的V‎B A代码,那么,我们可以将‎V BA代码‎编译成为D‎L L动态链‎接库,也就是封装‎成为DLL‎的意思,下面是与此‎相关的方法‎,希望对您有‎所帮助。

一、为什么要编‎译成为DL‎L我们知道,Visua‎l C++、Visua‎l Basic‎和C++ Build‎e r以及D‎e lphi‎等编译器所‎编译出来的‎程序不容易‎被人破解(相对来说),这是因为代‎码被编译成‎了可执行文‎件或者动态‎链接库文件‎。

那么,我们是否可‎以将VBA‎代码封装到‎动态链接库‎文件中,然后用Wo‎r d调用呢‎?回答是肯定‎的。

而且这样做‎还有一个好‎处,即可以加快‎代码的运行‎速度。

二、将VBA代‎码封装成动‎态链接库假如我们已‎经写好了一‎个VBA工‎程,而且运行无‎误。

①建立VB工‎程及一般性‎操作首先,我们需要两‎种工具,其中当然包‎括Micr‎o soft‎Word,另外一种是‎M icro‎s oft Basic‎6.0。

打开Mic‎r osof‎t Basic‎6.0,在“新建工程”中选取“Activ‎e X‎DLL”,新建一个工‎程。

在属性窗口‎中将工程名‎改为VBA‎P rj,类模块名改‎为VBAC‎l s。

然后在“工程”菜单下打开‎“引用”,选取“Micro‎s oft Offic‎e 11.0 Objec‎t Libra‎r y”——这一步很是‎关键,切不可遗漏‎,然后保存工‎程。

下面我们所‎做的是向工‎程内添加代‎码。

将VBA工‎程中的一个‎名为Tes‎t过程的代‎码选定后复‎制,然后切换到‎V B编辑器‎,选中VB的‎工程管理器‎中的类模块‎V BACl‎s,将代码粘贴‎至代码编辑‎窗口中,于是这段代‎码便成了类‎模块VBA‎C ls一个‎方法,然后将工程‎编译生成d‎l l文件(如果编译成‎功的话)。

VB封装Excel_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文件制作结束。

VB封装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文件实例。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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)”——选择所要引用的项目:如下图2
Excel 2000中:
Microsoft Excel 9.0 Object Library
Microsoft Office 9.0 Object LibraryExcel 2003中:Microsoft Excel 11.0 Object Library
Microsoft Office 11.0 Object Library三、编写代码:
1、将工程默认名称“工程1”,改为“zygtest”,将类模块默认名称“Class1”,
改为“zyg365”,
2、在类模块的代码编辑区写入代码:如下图3
模块名称为“hongtong”,代码如下在VB中编写代码时:要注意以下声名
Dim XLAPP As Object
Set XLAPP = GetObject(, "Excel.Application")
代码中引用对象,如SHEET,Cell等,前面要加“XLAPP.”
(或按照Sub hongtong() 中的格式编写。

)Sub hongtong()
Dim excelApp As New Excel.Application
Dim excelWorkBook As Excel.Workbook
Dim excelWorksheet As Excel.Worksheet
Set 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 '退出excel
End Sub四、工程属性设置:(可以不设置,本步骤可以省略) 为了使自己开发的程序更规范,可以对本工程的属性加以描述:如下图4
执行:“工程(P)”——“工程1属性(E)…”(当前工程中为:“zygtest属性(E)…”)五、保存工程、测试、打包生成Dll文件:
1、保存:单击保存,保存到一个文件夹中;
2、测试:执行工具栏上的“启动”(右向的三角图标)按钮,检查是否存在错误;
3、打包生成Dll文件:
执行:“文件(F)”——“生成工程1.dll(K)”(当前工程中为:“zygtest.dll”),
重命名为“zyg.dll”,至此,Dll文件制作结束。

六、在Excel_VBA 工程中引用、调用zyg.dll文件:如下图51、引用zyg.dll文件:
首先在Excel的VBE窗口中,执行“工具(T)”——“引用(R)”——在“引用”对话框中,
单击“浏览(B)…”按钮,找到“zyg.dll”文件——“确定”即可。

在工作簿事件中,编写代码:工作簿启动时,注册“zyg.dll”控件,工作簿关闭时,反注册
“zyg.dll”控件:在ThisWorkbook中:Private Sub Workbook_Open() '注册、引用zyg.dll
Shell "Regsvr32 /s " & VBA.Chr(34) & ThisWorkbook.Path & "\zyg.dll" & VBA.Chr(34), vbHide
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) '反注
册zyg.dll
Shell "Regsvr32 /u /s " & VBA.Chr(34) & ThisWorkbook.Path & "\zyg.dll" & VBA.Chr(34), vbHide
End Sub2、编写调用zyg.dll中代码的模块:
Sub test()
Dim kk As New zyg365 'zyg365为VB中类模块名称:输入完New后,敲空格键,
'直接出现选择列表框,从中选择“zyg365”
'kk可任意命名
kk.hongtong 'hongtong为VB中要执行的模块的名称:输入完kk.后,
'直接出现选择列表框,从中选择“zyg365”
'为你的VB中的过程名称,从列表中选的Set kk = Nothing '释放类资源
End Sub 以上技巧主要是从本论坛及ExcelHome论坛学习、借鉴,然后查阅一些资料编制而成,首先感谢本论坛中不吝赐教的各位版主、网友们,因水平有限,错误、不当之处难免,敬请各位朋友继续不吝指教。

相关文档
最新文档