VBA对象引用的前期绑定与后期绑定
cad批量打印总结VBA
![cad批量打印总结VBA](https://img.taocdn.com/s3/m/0fa3a46ca32d7375a41780d8.png)
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个常见问题答疑——答案
![excel的365个常见问题答疑——答案](https://img.taocdn.com/s3/m/a744a8fb83d049649b6658d6.png)
如何取得一个区域内的已用区域地址?
答:利用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中正则表达式](https://img.taocdn.com/s3/m/abcc74ef900ef12d2af90242a8956bec0975a50e.png)
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编程 优化对象引用](https://img.taocdn.com/s3/m/31977664a98271fe910ef9af.png)
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)--基础篇](https://img.taocdn.com/s3/m/7af8fe59842458fb770bf78a6529647d27283412.png)
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)](https://img.taocdn.com/s3/m/f13271d5ba4cf7ec4afe04a1b0717fd5360cb242.png)
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)和文本流](https://img.taocdn.com/s3/m/a835d74e814d2b160b4e767f5acfa1c7aa00827e.png)
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中文件和文件夹操作](https://img.taocdn.com/s3/m/7c55191a4b7302768e9951e79b89680203d86be8.png)
文件和文件夹操作我们在使用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](https://img.taocdn.com/s3/m/799bc1fd58f5f61fb73666ae.png)
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数据交换
![基于VBA的AutoCAD和EXCEL数据交换](https://img.taocdn.com/s3/m/bec5f765a45177232f60a2fe.png)
基于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方式。
CAD应用二次开发---VB和VBA开发CAD的知识
![CAD应用二次开发---VB和VBA开发CAD的知识](https://img.taocdn.com/s3/m/7a3437c8a48da0116c175f0e7cd184254b351b7c.png)
CAD应⽤⼆次开发---VB和VBA开发CAD的知识1、如何在 VB 中连接 AutoCAD。
启动 VB ,引⽤ AutoCAD 类型库。
操作步骤:从“⼯程”菜单中选择“引⽤”选项,启动“引⽤”对话框。
在“引⽤”对话框中,选择AutoCAD 类型库,然后单击“确定”。
定义模块级变量 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 AcadDocumentSub ConnectToAcad()On Error Resume NextSet acadApp = GetObject(, "AutoCAD.Application")If Err ThenErr.ClearSet acadApp = CreateObject("AutoCAD.Application")If Err Then EndEnd IfacadApp.Visible = TrueSet acadDoc = acadApp.ActiveDocumentEnd Sub2、如何使 VB 开发的程序不依赖于 AutoCAD 的版本。
ExcelVBA操作Word(入门篇)
![ExcelVBA操作Word(入门篇)](https://img.taocdn.com/s3/m/bb5338082379168884868762caaedd3383c4b5cd.png)
ExcelVBA操作Word(⼊门篇)本⽂的对象是:有⼀定Excel VBA基础,对Word VBA还没有什么认识,想在Excel中通过VBA操作Word还有困难的⼈。
⼀、新建Word引⽤需要⾸先创建⼀个对 Word Application 对象的引⽤。
在VBA中,⼯具-引⽤,选取“MicroSoft Word 11.0 Object Library”。
⽅法⼀、New Word.ApplicationDim Wordapp As Word.ApplicationSet Wordapp = NewWord.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对象‘后续操作及退出⼀样……⽅法三、GetObject⽂件已打开的情况下,使⽤:SetWordD=GetObject(filename),可建⽴对⽂档的引⽤,如果⽂件没有打开,则还需要先⽤⽅法⼀或⼆来操作。
⾄于⽅法⼀和⽅法⼆的区别,在⽹上询问了⼀下,⼤师们的回答是:⽅法⼀:前期绑定,好处是在对象后输⼊句点可以给出快速提⽰,因为需要先引⽤对象,所以容易出现版本兼容问题。
Office VBA开发经典:中级进阶卷
![Office VBA开发经典:中级进阶卷](https://img.taocdn.com/s3/m/e0f02f4b30b765ce0508763231126edb6e1a7645.png)
05
4.10 XML 与Office 文档
01
5.1 customUI 概述
02
5.2使用 customUI 软件
04
5.4常用属 性详解
06
5.6自定义 快速访问工 具栏
03
5.3自定义 常用功能区
05
5.5使用 Commandb ars对象操 作Office 内置控件
01
5.7自定义 环境功能区
2
2.2内置注册 表函数
3 2.3使用
WshShell操作 注册表
4
2.4创建快捷 方式
5
2.5操作环境 变量
2.6自动激活 1
指定标题文字 的窗口
2
2.7自动关闭 的对话框
3
2.8自动发送 按键
4 2.9使用
WshNetwork 对象
5
2.10本章小结
3.2使用Shell32对 象
3.1 Shell调用 WinRAR
读书笔记
读书笔记
1.看这本书是为了查阅VBA操作Acrobat对象的资料,使为了完善网页电子期刊的自动下载后PDF文件的整理。
目录分析
1
1.1使用传统 方式
2
1.2二进制方 式读写文件
3
1.3使用文件 系统对象
4 1.4使用
ADODB.Strea m实现文件读写
5
1.5本章小结
1
2.1 Shell函 数
02
5.8自定义 右键菜单
03
5.9自定义 Office菜 单
04
5.10更改 内置控件属 性
06
5.12本章 小结
05
5.11 customUI 疑难解答
excel visual basic 引用
![excel visual basic 引用](https://img.taocdn.com/s3/m/16ff476f302b3169a45177232f60ddccda38e60b.png)
excel visual basic 引用ExcelVisualBasic引用指的是在VisualBasicforApplications(VBA)中使用Excel对象模型的方式。
通过引用Excel对象模型,可以在 VBA 中使用 Excel 应用程序中的各种对象和属性,从而实现更高效、更灵活的编程。
在 VBA 中引用 Excel 对象模型有多种方式,其中最常见的方式是使用 early binding 和 late binding。
early binding 是指在编译时将 Excel 对象模型显式地添加为引用,而 late binding 则是在运行时将对象模型动态地加载到代码中。
无论是使用 early binding 还是 late binding,都需要使用下面的代码行来引用 Excel 对象模型:```VBDim xlApp As Excel.Application```其中,Excel.Application 是 Excel 应用程序对象的类型。
通过这种方式,就可以在 VBA 中使用 Excel 应用程序对象的各种属性和方法了。
除了应用程序对象,VBA 还可以引用 Excel 中的各种对象,包括工作簿、工作表、单元格、图表等。
例如,要引用活动工作簿对象,可以使用下面的代码行:```VBDim wb As Excel.WorkbookSet wb = ActiveWorkbook```其中,ActiveWorkbook 是 Excel 应用程序中的一个属性,用于返回当前活动的工作簿对象。
总之,通过引用 Excel 对象模型,可以在 VBA 中轻松地操作Excel 应用程序中的各种对象和属性,从而实现更高效、更灵活的编程。
VBA对象引用的前期绑定与后期绑定
![VBA对象引用的前期绑定与后期绑定](https://img.taocdn.com/s3/m/b46d5e064a7302768e9939a3.png)
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文档的代码编辑窗口,复制并粘贴下面的代码。
关于VB或VBA代码中前期绑定与后期绑定的区别
![关于VB或VBA代码中前期绑定与后期绑定的区别](https://img.taocdn.com/s3/m/b3050ef4846a561252d380eb6294dd88d0d23d11.png)
关于VB或VBA代码中前期绑定与后期绑定的区别在VBA中经常需要进行office软件互访问,比如将excel中的数据导出到word中,这时需要涉及到在excel中通过OLE技术引用word软件,在这过程中VBA提供了两种绑定方式,前绑定和后绑定。
前绑定需要在工具菜单的引用对话框下首先引用对象库,在编译期完成绑定,这样的优点是在编码过程中可以实时看到word对象引用的方法属性等提示。
下面是一个前绑定导出excel第一行第一列单元格到word文件的例程:Sub qianqi1()Dim App As Word.ApplicationDim doc As Word.DocumentSet App = New Word.ApplicationSet doc = App.Documents.Adddoc.Content.InsertAfter Worksheets(1).Cells(1, 1).Valuedoc.SaveAs Filename:="c:\123.doc"doc.CloseApp.QuitSet doc = NothingSet App = NothingEnd Sub前绑定还可以使用一种即时实例化变量,即声明时候就实例化,不需要set语句,代码如下:Sub qianqi1()Dim App As New Word.Application ‘这是即时实例化Dim doc As Word.DocumentSet doc = App.Documents.Adddoc.Content.InsertAfter Worksheets(1).Cells(1, 1).Valuedoc.SaveAs Filename:="c:\1234.doc"doc.CloseApp.QuitSet doc = NothingSet App = NothingEnd Sub后期绑定是指在运行代码的过程中创建对象,指定对象类型,不需要先声明。
老司机说:编写vba这些地方不注意,肯定要翻车
![老司机说:编写vba这些地方不注意,肯定要翻车](https://img.taocdn.com/s3/m/318b9fb9d1d233d4b14e852458fb770bf78a3b01.png)
老司机说:编写vba这些地方不注意,肯定要翻车1、Sub过程名要取得有意义[驼峰命名法]如(主程序|方法):Sub Main()'代码块End Sub再如(函数过程获取一个名字):Function GetName() as String'代码块GetName=代码块'那个名字End function再如(函数过程执行SQL语句,[可选无返回值]):Function SetSql(sql as String)'代码块cnn.Execute(sql)'代码块End function2、变量名得有意义。
如(字符串):dim str as String(累加求和):dim sum as Long再如(年龄):dim age as Integer(数组):dim arr()3、指明[Range |Cells]对象。
如:Sheet1. Range('A1')Sheet1.[A1]Sheet1.Cells(1,1)当在标准模块不指明该对象时,则vba会执行当前活动工作表的Cells,在把数据错误写入表格时将无法恢复。
4、指明vba内置函数对象。
如(统计字符数):VBA.Len('工作表')(转义回车):VBA.Chr(13)(获取年份): VBA.Year (Now)如写成Year (Now),在本机上完美执行,可你写的vba程序要运行于他人电脑,则有可能会报错(如下图)。
所以为避免错误,尽量使用VBA对象。
5、使用强制声明。
如:在代码的顶部加上Option Explicit或:注:不强制变量声明,虽然也不会在本机出错,但在其他电脑运行可能会报错(找不到工程或库)。
6、创建(引用)外部对象。
引用字典、正则表达式、(Excel中引用)word对象等外部对象时,建议在写代码的时候使用【前期绑定法】,代码(给他人)使用时用【后期绑定法】。
【前期绑定法】:Option ExplicitSub Test1()Dim wd As New Word.ApplicationDim Doc As DocumentSet Doc = wd.Documents.Add '创建wd.Visible = True '显示word程序Doc.SaveAs 'D:\123.docx' '另存Doc.Close '关闭文档wd.Quit '关闭word程序End Sub【后期绑定法】Sub Test1()Dim wd As ObjectDim Doc As ObjectSet wd = CreateObject('Word.Application')'后期绑定Set Doc = wd.Documents.Add '新建wordwd.Visible = True '显示word程序Doc.SaveAs 'D:\123.docx' '另存Doc.Close '关闭文档wd.Quit '关闭word程序End Sub注:使用前期绑定有代码提示,后期绑定则没有。
VBA文件对话框的应用(VBA打开文件、VBA选择文件、VBA选择文件夹,VBA遍历文件夹)
![VBA文件对话框的应用(VBA打开文件、VBA选择文件、VBA选择文件夹,VBA遍历文件夹)](https://img.taocdn.com/s3/m/f0209b18591b6bd97f192279168884868762b88d.png)
VBA⽂件对话框的应⽤(VBA打开⽂件、VBA选择⽂件、VBA选择⽂件夹,VBA遍历⽂件夹)在Scripting类库中有三个可以直接使⽤NEW关键字实例化的类,第⼀个就是常⽤的字典,第三个是FSO。
DictionaryEncoderFileSystemObject⼀、FSO对象引⽤的⽅法:前期绑定:先要引⽤类库⽂件scrrun.dll,写代码的时候有智能提⽰。
如果程序发给别⼈⽤,就要⽤后期绑定⽅式。
Dim fso As New Scripting.FileSystemObject后期绑定:不需要引⽤类库⽂件,但没有智能提⽰。
Set fso = CreateObject("Scripting.FileSystemObject")递归,提取⽂件名,office2019测试通过;Sub ListFilesTest()With Application.FileDialog(msoFileDialogFolderPicker)If .Show Then myPath$ = .SelectedItems(1) Else Exit SubEnd WithIf Right(myPath, 1) <> "\"Then myPath = myPath & "\"[a:b] = ""Call ListAllFso(myPath, 1)MsgBox"OK"End SubFunction ListAllFso(myPath$, i)Set Fld = CreateObject("Scripting.FileSystemObject").GetFolder(myPath)For Each f In Fld.FilesIf Like "*.xls*"ThenCells(i, 2) = Cells(i, 1) = f.ParentFolder.pathi = i + 1End IfNextFor Each fd In Fld.SubFoldersCells(i, 1) = fd.pathi = i + 1Call ListAllFso(fd.path, i)NextEnd Function上⾯,根据使⽤略微调整Sub ListFilesTest()'With Application.FileDialog(msoFileDialogFolderPicker)'If .Show Then myPath$ = .SelectedItems(1) Else Exit Sub'End WithDim ws As WorksheetSet ws = Worksheets("File")With wsrowmax = WorksheetFunction.Max(.Cells(65536, 1).End(xlUp).Row, .Cells(65536, 2).End(xlUp).Row)If rowmax > 4Then .Range(.Cells(5, 1), .Cells(rowmax, 5)).ClearContentsEnd WithmyPath$ = Worksheets("Main").Cells(28, 4).ValueIf Right(myPath, 1) <> "\"Then myPath = myPath & "\"Call ListAllFso(myPath, 5, ws)MsgBox"OK"End SubFunction ListAllFso(myPath$, i, ws As Worksheet)Set Fld = CreateObject("Scripting.FileSystemObject").GetFolder(myPath)Set Fso = CreateObject("Scripting.FileSystemObject")For Each f In Fld.FilesIf Like "*.xls*"Thenws.Cells(i, 1) = f.ParentFolder.pathws.Cells(i, 2) = Fso.GetBaseName()ws.Cells(i, 3) = f.DateLastModifiedws.Cells(i, 5) = Fso.GetExtensionName()ws.Cells(i, 4) = f.Sizei = i + 1End IfNextFor Each fd In Fld.SubFolders' ws.Cells(i, 1) = fd.path' i = i + 1Call ListAllFso(fd.path, i, ws)NextEnd Function⽂件改名,然后再重新载⼊;Sub RenameFile()Dim ws As WorksheetSet ws = Worksheets("File")Set Fso = CreateObject("Scripting.FileSystemObject")With wsrowmax = WorksheetFunction.Max(.Cells(65536, 1).End(xlUp).Row, .Cells(65536, 2).End(xlUp).Row)If rowmax > 4ThenFor i = 5To rowmaxIf .Cells(i, 6) <> ""Thenoldname = .Cells(i, 1) & "\" & .Cells(i, 2) & "." & .Cells(i, 5)newname = .Cells(i, 1) & "\" & .Cells(i, 6) & "." & .Cells(i, 5)If Fso.fileexists(newname) ThenMsgBox i & "⾏,以新⽂件名命名的⽂件已存在; " & newnameElseOn Error Resume NextName oldname As newnameEnd IfErrorProcess:If Err.Number = 58Thennewname = .Cells(i, 1) & "\" & .Cells(i, 6) & "_" & i & "." & .Cells(i, 5)Name oldname As newnameErr.Clear' MsgBox Err.NumberEnd IfElseMsgBox i & "⾏,⽆新⽂件名,未改名;"End IfNextEnd Ifws.Selectws.Cells(5, 2).ActivateEnd WithCall ListFilesEnd SubSub 提取⽂件夹名称()Dim fs As Objectn = 1Set fs = CreateObject("Scripting.FileSystemObject")Set f = fs.getfolder("D:\Personal\Downloads")For Each fd In f.subfoldersCells(n, 1) = n = n + 1NextSet f = NothingSet fs = NothingEnd Sub如果想通过VBA代码由⾃⼰选择⽂件夹再执⾏提取⽂件夹名称,:Sub getFldList1()Dim Fso, FldDim Arr(1To999), k%Set Fso = CreateObject("Scripting.FileSystemObject")Set Fld = Fso.getfolder(CreateObject("Shell.Application").BrowseForFolder(0, "请选择⽂件夹", 0, "").Self.Path & "") For Each fd In Fld.subfoldersk = k + 1Arr(k) = Next[A1].Resize(k) = Application.Transpose(Arr)End SubSub遍历⽂件夹()'On Error Resume NextDim fn(1To10000) As StringDim f, i, k, f2, f3, xDim arr1(1To100000, 1To1) As String, q As IntegerDim tt = Timerfn(1) = ThisWorkbook.Path & "\"i = 1: k = 1Do While i < UBound(fn)If fn(i) = ""Then Exit Dof = Dir(fn(i), vbDirectory)DoIf InStr(f, ".") = 0And f <> ""Thenk = k + 1fn(k) = fn(i) & f & "\"End Iff = DirLoop Until f = ""i = i + 1Loop'*******接下来是提取各个⽂件夹的⽂件***For x = 1To UBound(fn)If fn(x) = ""Then Exit Forf3 = Dir(fn(x) & "*.*")Do While f3 <> ""q = q + 1arr1(q, 1) = fn(x) & f3f3 = DirLoopNext xedRange = ""Range("a1").Resize(q) = arr1MsgBox Format(Timer - t, "0.00000")End Sub在VBA中经常要⽤到⽂件对话框来进⾏打开⽂件、选择⽂件或选择⽂件夹的操作。
vba横向字典
![vba横向字典](https://img.taocdn.com/s3/m/158ef137443610661ed9ad51f01dc281e53a5694.png)
vba横向字典
字典:是为字词提供音韵、意思解释、例句、用法等等的工具书。
在VBA中字典与传统理解的字典差不多:
1、都具有关键字(key)和值(item)——对应的关系,
2、键具有唯—性。
VBA字典的作用,与数组的结合运用,简化代码(其实是牺牲内存,空间换取时间的用法,但在现时代通用的电脑普遍内存够用的),提升速度等—些强大的功能。
字典不存在与VBA中,需要调用,有两种方法:
1、前期绑定,在EXCEL表格开发工具中,工具-引用-浏览-找到scrrun.dll-确定;
2、后期绑定,直接用代码创建调用:
Set d = CreateObject("scripting.dictionary")
本文主要采用后期绑定方式记录字典用法。
字典对象的方法有6个:
Add添加—条关键字与条目
Keys返回所有关键字(形成1维数组)
ltems返回所有条目(形成1维数组)
Exists关键字是否存在(TRUE/FALSE)
Remove移除关键字与对应的条目
RemoveAll移除所有关键字与对应的条目
向Dictionary 对象中添加—个关键字项目对。
语法: object.Add (key, item)
Key,必选项。
与被添加的item相关联的key。
ltem,必选项。
与被添加的key 相关联的item。
key是唯—存在的,否则将导致一个错误。
- 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.后期绑定后期绑定是指在运行代码的过程中创建对象,指定对象类型,不需要先声明。