VBA对象引用的前期绑定与后期绑定
- 格式:doc
- 大小:57.00 KB
- 文档页数:9
cad批量打印总结VBAcad vb及批量打印cad二次开发中VB或VBA的应用问题1、如何在 VB 中连接 AutoCAD。
启动VB ,引用 AutoCAD 类型库。
操作步骤:从“工程”菜单中选择“引用”选项,启动“引用”对话框。
在“引用”对话框中,选择 AutoCAD 类型库,然后单击“确定”。
2、定义模块级变量 AutoCAD 应用程序 (acadApp) 和当前的文档(acadDoc)。
如果 AutoCAD 正在运行,使用 GetObject 函数将检索 AutoCAD Application 对象。
如果 AutoCAD 没有运行,使用 CreateObject 函数试图创建一个 AutoCAD Application 对象。
如果创建成功,会启动 AutoCAD;如果失败,则会发生错误。
同时运行多个 AutoCAD 任务时,GetObject 函数会返回 Windows 运行对象表中的第一个 AutoCAD 实例。
要显示 AutoCAD 图形窗口,需要将AutoCAD 应用程序的 Visible 特性设置为 TRUE。
使用 acadDoc 变量引用当前的AutoCAD 图形。
示例: Dim acadApp As AcadApplicationDim acadDoc as AcadDocument Sub ConnectToAcad()OnError Resume NextSet acadApp = GetObject(, "AutoCAD.Application")If ErrThenErr.ClearSet acadApp = CreateObject("AutoCAD.Application")If Err Then EndEndIfacadApp.Visible = TrueSet acadDoc = acadApp.ActiveDocumentEndSub2、如何使 VB 开发的程序不依赖于 AutoCAD 的版本。
vba中正则表达式1.正则表达式测试⼯具2.如何引⼊正则表达式前期绑定:⼯具---引⽤---microsoft vbscript regular expressions 5.5dim regex as new regexp后期绑定:set regex=createobject("vbscript.regexp")3.regex.global=trueglobal的属性是查找范围。
true是代表全部查找,false代表只查第⼀个。
默认是false。
但⼀般都要设置为true。
4.regex.pattern="表达式内容"在引号⾥要书写正则表达式的内容。
默认为""5.set k=regex.execute(要去正则的字符串)将返回匹配成功的结果赋值给k。
k是⼀个对象6.n=regex.replace(要去替换的字符串,要替换成的字符串)将匹配成功的结果做替换7.regex作为⼀个对象,可以⽤with end with 来简化代码with regex .global=true .pattern="正则表达式" .repalce("","") .execute(要去正则的字符串)end with8.正则表达式的元字符\.就只代表。
本⾝⾃⼰9.⽤括号()代表分组表⽰对⼀组字符串正则表达式10.|代表or11.忽略⼤⼩写的属性ignorecaseregex.ignorecase=true表⽰不区分⼤⼩写;regex.ignorecase=false表⽰区分⼤⼩写。
默认是false。
12.如果有括号()分组时,可以⽤\1或者\n代表引⽤第⼀个括号内的内容或第n个括号内的内容。
这是⼀种后向引⽤13.正则的test⽅法if regex.test(要匹配的字符串) then 。
end if 表⽰如果字符串能够匹配,则运⾏。
Excel VBA编程优化对象引用使用Excel VBA编写的程序,其中有很多语句都在反复操作各种不同的对象。
而使用对象的语句,执行速度很慢,因此,合理对对象进行优化可使程序效率更高。
在程序中合理使用对象,应注意以下问题。
1.使用对象变量如果一个对象引用被多次使用,则可以通过定义一个局部变量,将此对象用Set 设置为对象变量,以减少对对象的访问。
如:ActiveSheet.Range("A1").Value = 100ActiveSheet.Range("A2").Value = 200则以下代码要比上面的要快:Dim objSheet As ObjectSet objSheet = ActiveSheetobjSheet.Range("A1").Value = 100objSheet.Range("A2").Value = 2002.使用With … End With语句对某个对象的多个属性进行设置时,可使用With … End With语句来引用这个对象。
使用该语句只需要一次引用就可以对多个属性进行设置,对一个属性或多个属性的设置所使用的时间几乎是相同的,因而,省去了引用对象所使用的时间。
例如以下语句,可以通过替换为With 语句,提高运行效率:ActiveSheet.Range("A1:A1000") = "Arial"ActiveSheet.Range("A1:A1000").Font.FontStyle = "Bold"对应的With 语句:With ActiveSheet.Range("A1:A1000").Font.Name = "Arial".FontStyle = "Bold"End With3.使用早期绑定绑定是将程序员编写的函数调用与实现该函数的实际代码(内部或外部代码)进行匹配的过程。
VBA之正则表达式(1)--基础篇正则表达式(Regular Expression),常被用来检验、替换符合某个模式(规则)的字符串,在代码中常缩写为regexp。
VBA中并没有直接提供正文表达式对象,需要借助VBScript的正则对象。
如果使用前期绑定,那么就需要在VBE中引用如下扩展库:也可以使用后期绑定的方式创建正则对象,代码如下。
Set objRegEx = CreateObject('vbscript.regexp')正则对象有四个属性和三个方法。
假设待处理的文本如下,现需要提取其中的姓名汉字和电话数字。
Name:张三丰,Phone:138****0000示例代码如下。
Sub RegExpDemoSyntax()Dim objRegEx As ObjectSet objRegEx = CreateObject('vbscript.regexp')objRegEx.Pattern = 'Name:(.*?),Phone:(\d+)'objRegEx.Global = TruemyString = 'Name:张三丰,Phone:138****0000'Set objMH = objRegEx.Execute(myString)If objMH.Count > 0 ThenWith objMH(j)Debug.Print .submatches(0), .submatches(1)End WithEnd IfSet objRegEx = NothingEnd Sub代码在立即窗口输出结果如下:张三丰138****0000由示例可以看到正则对象的属性和方法并不复杂,也可以说too simple。
但是想用好正则就不是那么简单的事情,其核心在于如何编写正确高效的正则匹配模式,即设置Pattern参数。
在接下来的几篇推文中将介绍一些Excel中正则应用实例当当、天猫、京东各大商城均有出售。
Excel:字典(Dictionary)字典不是VBA内置的类型,它是Windows脚本语⾔的类型。
所以声明字典的⽅法就和VBA内置对象不同,它有两种⽅法声明,⼀种是前期绑定声明,⼀种是后期绑定声明。
a.前期绑定前期绑定是需要在⼯具菜单的引⽤对话框下⾸先引⽤对象库,在编译期完成绑定,这样的优点是在编码过程中可以直接看到字典对象引⽤的⽅法和属性的提⽰,缺点就是移植性差,如果换⼀个计算机运⾏VBA代码,也必须在新计算机上引⽤对象库。
⽅法如下:在VBE菜单中,选择“⼯具-引⽤”,在弹出的对话框中选择中边的“浏览”,此时会打开Windows系统的驱动⽬录(32位系统请打开C:\Windows\System32)或者(64位系统请打开C:\Windows\SysWOW64),然后找到scrrun.dll,确定即可。
确定后可以检查⼀下“Microsoft Scripting Runtime”是否已经勾选添加引⽤后,就可以像定义其它变量⼀样声明字典了。
这样的优点就是对初学者来说,在输⼊变量和“.”之后,可以看到属性和⽅法的提⽰b.后期绑定后期绑定是指在运⾏代码的过程中创建对象,指定对象类型,不需要先声明。
对于后期绑定来说,优点是移植性好,换个计算机运⾏VBA程序不需要设置引⽤对象库,缺点是编码时不会有提⽰。
⽅法如下:⼩结⼀下数组,集合和字典的声明⽅法:①数组和集合都是VBA的内置对象,都可以直接使⽤Dim声明,⽽字典不是VBA的内置对象,必须引⽤对象库后才能⽤Dim声明,或者在代码中⽤后期绑定声明。
②数组、集合和字典都必须分配了内存空间才能使⽤属性和⽅法,数组分配内存空间就是确定数组的长度,集合分配内存空间就是New⼀个Collection,字典分配内存空间就是New⼀个Dictionary或CreateObject。
1. 创建和使⽤Dictionary对象Dim objMyDataSet objMyData = Server.CreateObject(“Scripting.Dictionary”)2.Dictionary对象的成员概要属性说明CompareMode (仅⽤于VBScript)设定或返回键的字符串⽐较模式Count 只读。
VBA中的FileSystemObject对象(FSO)和⽂本流对FileSystemObject⼀直略有⽿闻,VBA爱好者常常简称为FSO对象。
在Scripting类库中有三个可以直接使⽤NEW关键字实例化的类,第⼀个就是常⽤的字典,第三个是FSO。
⼀、FSO对象引⽤的⽅法:前期绑定:先要引⽤类库⽂件scrrun.dll,写代码的时候有智能提⽰。
如果程序发给别⼈⽤,就要⽤后期绑定⽅式。
Dim fso As New Scripting.FileSystemObject后期绑定:不需要引⽤类库⽂件,但没有智能提⽰。
Set fso = CreateObject("Scripting.FileSystemObject")⼆、使⽤FSO对象的CreatTextFile⽅法可以使⽤该⽅法创建⼀个⽂本⽂件。
第5⾏执⾏后,⽂本⽂件已经创建在硬盘中。
1Sub CreateAndWrite()23Dim fso As New Scripting.FileSystemObject4Dim wfsm As Scripting.TextStream5Set wfsm = fso.CreateTextFile("d:\test.txt", True)6 wfsm.WriteLine (Now)78 wfsm.Close910End Sub1、CreatTextFile语法:object.CreateTextFile(filename[, overwrite[, unicode]])。
参数1:要创建的⽂件的全路径,字符串。
参数2:Bool值,如果相同路径存在同名⽂件,是否覆盖。
参数3:Bool值,⽤什么编码写⼊⽂件,默认是ASCII(true),也可以是unicode返回值是TextStream类型对象,也就是本⽂的另⼀个重点,⽂本流。
2、为⽅便使⽤⽂本流对象,我在第4⾏做了显式的类型声明wfsm。
文件和文件夹操作我们在使用Excel VBA进行处理数据时,或多或少会涉及到如何操作文件和文件夹。
本节将重点讲述如何新建、打开、删除、复制、移动和重命名文件和文件夹操作等。
对于文件和文件夹操作,我们一般通过下面方法:VB命令EXCEL对象引用其他动态库对象API函数在这里,我们尽可能通过不同的方法来展示如何操作文件和文件夹。
注意,这里所涉及的文件一般以Excel为主。
对于如何运用文件之间的处理,如,文本文件、WORD、ACCESS和PPT与EXCEL 之间的互访与查询,我们将在下节中讲解。
在本节开始之前,我们需要预备的知识点:1、如何引用动态工程库。
打开VBE-工具-引用选择Microsoft Scripting Runtime动态库下面我们将会频繁用到Scripting.FileSystemObject对象来操作文件和文件夹。
另,此scrrun.dll动态库还包含了Scripting.Dictionary字典对象。
2、前期绑定和后期绑定我们知道,VB是面向对象化编程,MS提供很多的DLL动态链接库,通过这些对象,我们可以轻松地完成任务。
我们可以通过前期绑定或后期绑定来引用DLL库。
1)前期绑定。
如同我们在上面用手动引用动态工程库方式,在编译代码前,我们就完成了的绑定。
绑定之后,写入下面代码,创建和引用对象:Sub BandObject()Dim fso As Scripting.FileSystemObjectSet fso = New Scripting.FileSystemObjectDIM FSO NEW Scripting.FileSystemObjectEnd Sub2)后期绑定。
使用CreateObject函数,绑定某一个对象。
此时,我们只有在程序运行时,绑定才有效,如,Sub CrtObject()Dim ObjFso As ObjectSet ObjFso = CreateObject("Scripting.FileSystemObject")End Sub3、小结:1)、前期和后期绑定区别在于定义方式和创建方式不同。
Excel VBA 操作 Word(入门篇)本文的对象是:有一定Excel VBA基础,对Word VBA还没有什么认识,通过VBA操作Word还有困难的人。
一、新建Word引用需要首先创建一个对 Word Application 对象的引用。
在VBA中,工具-引用,选取“MicroSoft Word 11.0 Object Library”。
方法一、New Word.ApplicationDim Wordapp As Word.ApplicationSet Wordapp = New Word.ApplicationWordapp.Visible = True '可见'Wordapp.ScreenUpdating = False '屏幕刷新Dim WordD As Word.Document '定义word类Set WordD = Wordapp.Documents.Add '新建文档‘Set WordD = Wordapp.Documents.open(filename) '打开文档……WordD.Close '关闭文档Set WordD = NothingWordApp.Quit '退出Word对象方法二、CreateObjectDim WordApp As ObjectSet WordApp = CreateObject("Word.Application") '新建Word对象Dim WordD As Object‘后续操作及退出一样……使用方法一定义,后续程序设计时,各对象、方法有逐步提示,但需先在“工具-引用”中勾选相关“MicroSoft Word **** Object Library”使用方法二定义则相反,不需要勾选,但也没有逐步提示。
方法三、GetObject文件已打开的情况下,使用:Set WordD=GetObject(filename),可建立对文档的引用,如果文件没有打开,则还需要先用方法一或二来操作。
基于VBA的AutoCAD和EXCEL数据交换作者:丁喆来源:《科技创新导报》2013年第02期摘要:该文探讨如何利用VBA程序实现AutoCAD 2010从EXCEL 2007中读取坐标数据,然后将与坐标值对应的元件显示到计算机显示器上。
关键词:VBA AutoCAD EXCEL 电路板中图分类号:TP317 文献标识码:A 文章编号:1674-098X(2013)01(b)-00-01随着电子元器件的小型化,电子产品的集成度越来越高,一块电路板上的电子元件数量也越来越多。
在这些数量巨大的元件中立刻找到我们想要找到的元件就变得越来越困难。
1 利用坐标文件寻找元件安装位置电路板设计过程中产生的坐标文件中记录着所有元件在电路板上安装位置的坐标值。
根据坐标值,我们可以使用尺子测量电路板,从而找到该元件。
但这种方法在实际使用中缺乏实用性,因为坐标原点不易寻找,并且测量时会产生较大误差。
为了更好地使用坐标文件,我认为可以从电路板板图入手。
从GERBER文件中导出的电路板板图与实际的电路板使用相同的坐标,使用坐标文件中的坐标我们可以在实际的电路板上找到元件,也可以在电路板板图上找到该元件的安装位置。
从GERBER文件中导出的电路板图纸可以使用AutoCAD进行操作。
利用VBA程序对AutoCAD进行二次开发,将需要查找元件的坐标从EXCEL文件中导入到AutoCAD中,利用坐标值寻找到元件的准确位置,把它显示到计算机屏幕上。
这样做的优点如下:(1)使用AutoCAD软件可以很容易变换坐标系,方便更改坐标原点[2]、不需要测量实际的电路板,避免了手工测量导致的误差,元件安装位置寻找更准确。
2 使用VBA完成AutoCAD与EXCEL之间的访问在AutoCAD中通过VBA使用EXCEL中的数据,需要使用到VBA在不同软件间的访问功能。
在不同软件间进行访问,一般可以通过三种方式:自动方式、动态数据交换(DDE)和SendKeys方式。
VBA对象引用的前期绑定与后期绑定编辑:madmlwt前言系列问题涉及:1.操作环境是:Ofeice 2003完整版,Win XP操作系统。
2.探讨主方向:在EXCEL中用VBA操作WORD表格,进行EXCEL数据与WORD数据的相互读写及相应格式设置。
3.引用WORD程序的方法:后期绑定。
不需要在对象库中去勾选Microsoft Word 11.0 Object Library对象。
4.资料收集整理:网络查询、Ofeice 2003相关程序自身的VBA帮助、个人理解,本人是个编辑者。
5.相关实例:网络搜索引用、个人原创,在EXCEL中实际操作通过。
综上,在后续的系列文章中的诸多说法、实例中,不再一一重复阐述说明。
编辑此系列问题,可能已经滞后,仅供有此需要的朋友参考借鉴!如有雷同,敬请见谅、免责!一、问题的提出试图在EXCEL中用VBA操作WORD文档,结果在WORD中能够正常使用的一些方法或属性,在EXCEL中不能使用或使用后没有达到应该有的效果。
【例子】在EXCEL中用VBA操作。
首先创建一个空白的新WORD文档,再写入2句话(作为2个段落),然后分别对这二个段落进行字体、字号和居中设置。
【要求】在EXCEL中用VBA操作WORD文档时,VBA代码编辑过程中,不直接引用Microsoft Word 11.0 Object Library对象,采用后期绑定Set wordAppl = CreateObject("Word.Application") 定义一个Word对象变量。
【操作】1.直接在WORD文档中运行代码⑴在已经存在的操作假定上面要求的WORD文档已经创建,打开该文档。
在键盘上按组合键Alt+F11,打开WORD代码编辑窗口。
在左边的“工程-Normal”下面窗格中双击“Project(当前打开的WORD文档名称)”下面的“引用Normal”图标,右边显示当前WORD文档的代码编辑窗口,复制并粘贴下面的代码。
Sub 设置()With ActiveDocument.Paragraphs(1).Range.Font.Size = 18 '字号 = "黑体" '字体.Font.Bold = wdToggle '字型加粗.ParagraphFormat.Alignment = wdAlignParagraphCenter '水平居中End WithEnd Sub单击代码编辑窗口上方工具栏上的绿色三角形按钮(或按键盘上的F5),运行上述代码,可以看到你打开的WORD文档中的第一段文本,按要求进行了字体设置和水平居中。
可见,代码正常运行且达到预期目标!⑵创建一个新的WORD文档打开一个任意已经存在的WORD文档,在键盘上按组合键Alt+F11,打开WORD代码编辑窗口。
在左边的“工程-Normal”下面窗格中双击“Project(当前打开的WORD文档名称)”下面的“引用Normal”图标,右边显示当前WORD 文档的代码编辑窗口,复制并粘贴下面的代码。
Sub 设置()Application.ScreenUpdating = False '关闭屏幕刷新Documents.Add '创建一个新的Word文档Selection.TypeText Text:="创建WORD表格模型"'写入第一段文字…………With ActiveDocument.Paragraphs(1).Range'对第一个段落进行格式设置.Font.Size = 18 '字号 = "黑体" '字体.Font.Bold = wdToggle '字型加粗.ParagraphFormat.Alignment = wdAlignParagraphCenter '水平居中(问题代码)End WithActiveDocument.SaveAs FileName:=ThisDocument.Path & "\新建WORD文档.doc" '保存新建Word文档与当前WORD文件相同位置ActiveWindow.Close '关闭新建文档Application.ScreenUpdating = False '关闭屏幕刷新End Sub2.在EXCEL中运行代码打开一个EXCEL工作簿,任指定一个名字保存打开的工作簿于任意位置(为便于操作最后就保存到桌面)。
在键盘上按组合键Alt+F11,打开EXCEL代码编辑窗口。
在菜单命令中单击“插入”打开列表命令后再单击“模块”,显示当前EXCEL文档的代码编辑窗口,复制并粘贴下面的代码。
⑴创建一个新的WORD文档Sub 设置()Application.ScreenUpdating = False '关闭屏幕刷新Set wordAppl = CreateObject("Word.Application") '定义一个Word对象变量dqM= '当前工作簿名称With wordAppl.Documents.Add '创建一个新的Word文档.Selection.TypeText Text:="创建一个WORD表格模型" '写入第一个段落文本…………With .ActiveDocument.Paragraphs(1).Range'对第一个段落进行格式设置.Font.Size = 18 '字号 = "黑体" '字体.Font.Bold = wdToggle '字型加粗.ParagraphFormat.Alignment = wdAlignParagraphCenter '水平居中(问题代码)End With.ActiveDocument.SaveAs ThisWorkbook.Path & "\" & Left(dqM, Len(dqM) - 4) & ".doc" '保存新建Word文档与当前工作簿相同名称和位置.Documents.Close '关闭新建文档.Quit '关闭新建文档窗口End WithSet wordAppl = Nothing '释放存储空间Application.ScreenUpdating = False '关闭屏幕刷新End Sub单击代码编辑窗口上方工具栏上的绿色三角形按钮(或按键盘上的F5),运行上述代码。
最小化当前工作簿窗口,在当前工作簿保存的桌面上,找到以当前工作簿名称命名的WORD文件,双击打开这个WORD文档。
效果一目了然,第一段落仅设置了字体格式,但并没有水平居中!换句话说,代码.ParagraphFormat.Alignment = wdAlignParagraphCenter 虽然运行通过,但没有产生本质的属性功能。
⑵打开一个已经存在的WORD文档Sub 设置()Application.ScreenUpdating = False '关闭屏幕刷新dqM = ThisWorkbook.Path & "\" & Cells(2, 1) & ".doc" '要打开的W ORD文件及路径Set wdWORD = CreateObject("Word.Application")'创建WORD对象变量Set wdDOC = wdWORD.Documents.Open(dqM) '创建文档对象变量With wdDOC.Paragraphs(1).Range.Font.Size = 18 '字号 = "黑体" '字体.Font.Bold = wdToggle '字型加粗.ParagraphFormat.Alignment = wdAlignParagraphCenter '水平居中End WithwdDOC.Close '关闭文档wdWORD.Quit '关闭窗口Set wdDOC = Nothing '释放存储空间Set wdWORD = Nothing '释放存储空间Application.ScreenUpdating = False '关闭屏幕刷新End Sub说明:代码运行通过,但是水平居中没有达到预期目的。
二、前期绑定与后期绑定在VBA中经常需要进行office软件互访问,比如将excel中的数据导出到word中,这时需要涉及到在excel中通过OLE技术引用word软件,在这过程中VBA提供了两种绑定方式,前绑定和后绑定。
1.前期绑定前绑定需要在工具菜单的引用对话框下首先引用对象库,在编译期完成绑定,这样的优点是在编码过程中可以实时看到word对象引用的方法属性等提示。
下面是一个前绑定导出excel单元格数据到新建word文件的例程。
把当前工作表单元格ActiveSheet.Cells(2, 3)数据导入新建WORD文档“123.doc”,并保存到当前操作的工作簿保存位置。
Sub Exc导出到Doc()Dim App As Word.ApplicationDim doc As Word.DocumentSet App = New Word.ApplicationSet doc = App.Documents.Adddoc.Content.InsertAfter ActiveSheet.Cells(2, 3).Valuedoc.SaveAs Filename:=ThisWorkbook.Path & "\123.doc"doc.CloseApp.QuitSet doc = NothingSet App = NothingEnd Sub前绑定还可以使用一种即时实例化变量,即声明时候就实例化,不需要set 语句,代码如下:Sub Exc导出到Doc_1()Dim App As New Word.Application'这是即时实例化Dim doc As Word.DocumentSet doc = App.Documents.Adddoc.Content.InsertAfter ActiveSheet.Cells(2, 3).Valuedoc.SaveAs Filename:=ThisWorkbook.Path & "\1234.doc"doc.CloseApp.QuitSet doc = NothingSet App = NothingEnd Sub2.后期绑定后期绑定是指在运行代码的过程中创建对象,指定对象类型,不需要先声明。