VB封装Excel_VBA成DLL技巧
- 格式:doc
- 大小:24.50 KB
- 文档页数:4
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代码封装过程一、函数和子过程的封装过程二、封装后函数和子过程的调用三、窗体的封装和调用四、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的例子、方法与总结制作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【前言】:网上由于封装的例子和教程太零散,故系统地揭开封装神秘的面纱。
【步骤】: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动态链接库的方法在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文件(如果编译成功的话)。
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实例讲解(三)一、手动注册及引用(一)手动注册及引用方法(参看实例:手动引用.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文件实例。
VBA代码封装过程介绍VBA(Visual Basic for Applications)是一种基于Microsoft Visual Basic的宏编程语言,广泛地用于Microsoft Office套件中的应用程序,包括Excel、Word和PowerPoint等。
在进行VBA编程时,代码封装的概念非常重要。
代码封装可以提高代码的可读性、复用性和维护性,使得我们的代码更加模块化和灵活。
本文将介绍VBA代码封装过程的原则和步骤,并给出一些实例进行说明。
原则在进行VBA代码封装时,我们可以遵循以下原则:1.可读性:代码应该具备良好的可读性,使用有意义的变量名、函数名和模块名,适当添加注释来解释代码的作用和逻辑。
2.复用性:代码封装的目标之一是提高代码的复用性,即尽量将可复用的代码封装成函数或子过程,方便在多个地方调用。
3.模块化:将代码按照功能或逻辑划分成多个模块,每个模块专注于一个特定的任务或功能,便于管理和维护。
4.低耦合:代码封装的目的之一是减少代码之间的耦合性,模块之间应该尽量独立,避免过多的依赖关系。
5.高内聚:代码封装的模块应该具备高内聚性,即模块内部的代码功能相关,职责明确。
步骤下面将按照一般的步骤介绍VBA代码封装过程:1. 分析需求在进行代码封装之前,首先需要明确需求。
分析需求可以帮助我们确定代码封装的范围和目标。
2. 创建模块根据需求,创建一个新的模块或者在现有模块中创建一个新的子过程。
模块可以理解为一个代码容器,用于封装一组相关的函数和子过程。
3. 定义变量和常量在模块的顶部,定义所需的变量和常量。
变量和常量的名称应该具有描述性,以便于代码的可读性和维护性。
4. 编写函数和子过程根据需求,在模块中编写相应的函数和子过程。
函数和子过程应该具有良好的功能划分和职责明确。
5. 添加注释在代码中适当添加注释,解释代码的功能、逻辑和输入输出等信息。
注释可以提高代码的可读性,便于他人理解和维护代码。
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封装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论坛学习、借鉴,然后查阅一些资料编制而成,首先感谢本论坛中不吝赐教的各位版主、网友们,因水平有限,错误、不当之处难免,敬请各位朋友继续不吝指教。