VBA对象引用的前期绑定与后期绑定
cad批量打印总结VBA

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 的版本。
excel的365个常见问题答疑——答案

如何取得一个区域内的已用区域地址?
答:利用Intersect取选区和已用区域的交集即可,代码如下:
on error resume next
Intersect(edRange, Selection).Address
问题24:
按地址传递(byref)和按值传递(byval)区别是什么?
答:按值传递时,参数的值不产生变化;按地址传递时,该参数值可以修改。
问题25:如Βιβλιοθήκη 用VBA打开与陌生人的QQ聊天对话框?
答:通过IE浏览器可以直接开启与非好友聊天的对话框,所以用Shell调用IE地址即可。代码如下:
Shell "explorer.exe """""
问题26:
如何判断当前操作系统是否为繁体中文?
问题13:
为什么有的属性在常数列表中看不到?
答:VBA具有部分隐藏属性,需要进入对象浏览器后单击右键菜单【显示隐含成员】才可以显示。
问题14:
如何查询Excel 2010相对2007有哪些新增内容?
答:开启Excel,进入VBE界面后按下F1键,然后选择窗口中的“Excel 2010开发人员参考”→“新增内容”。
问题11:
为什么VBE中的菜单【视图】→【工具箱】是灰色的?
答:插入一个窗体且选中窗体后才会显示工具箱,所以未显示工具箱时需要执行两个步骤:先插入一个窗体;然后选择窗体。
问题12:
如何对VBA代码加密?
答:加密的方式有很多,最简单的方法是VBA自带的保护工程,操作方法为:
在VBE界面中单击菜单【工具】→【VBAProjectn属性】→【保护】,然后录入密码,且勾选“查看时锁定工程”。
vba中正则表达式

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编程优化对象引用使用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)--基础篇

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)

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)和文本流

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中文件和文件夹操作

文件和文件夹操作我们在使用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)、前期和后期绑定区别在于定义方式和创建方式不同。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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.后期绑定后期绑定是指在运行代码的过程中创建对象,指定对象类型,不需要先声明。