VBA教程
CADVBA初级教程(全)

第一课:入门1.为什么要写这个教程市面上ACAD VBA 的书不多,它的帮助是英文版的,很多人看不懂。
其实我转行已经好几年了,而且手艺也慢慢生疏了,写个教程对自己来说也是一次复习。
2.什么是Autocad VBA?VBA 是Visual Basic for Applications 的英文缩写,它是一个功能强大的开发工具,学好VBA 可以成倍甚至成百、成万倍提高工作效率,在工作中,有很多任务仅用ACAD 命令不可能完成的,只要学好VBA 就可以做到,相信到时候您一定会得到同事的佩服、老板的器重。
3、VBA 有多难?相信大家都知道Basic 是的含义.应该承认,我的水平还不高,错误之处在所难免,如果大家发现错误一定要提出批评,以便及时更正.4、怎样学习VBA?介绍大家一个学习公式:信心+恒心=开心。
仔细阅读本教程,完成例题,在学习的过程中一定要多思考,多想一些是什么、为什么。
本教程将陆续发布在CAD 世界论坛上,您不需要付费就可以学习。
本作者在此郑重承诺:关于本教程中有任何疑问,可以跟贴提问,只要有时间,本人一定会耐心解答.我不会发到任何人的邮箱中,您自己在论坛上找就可以了,请不要再向我索要这份教程。
5、现在我们开始编写第一个程序:画一百个同心圆第一步:复制下面的红色代码第二步:在模型空间按快捷键Alt+F8,出现宏窗口第三步:在宏名称中填写C100,点“创建”、“确定”第四步:在Sub c100()和End Sub 之间粘贴代码第五步:回到模型空间,再次按Alt+F8,点击“运行"Sub c100()Dim cc(0 To 2) As Double '声明坐标变量cc(0) = 1000 ’定义圆心座标cc(1) = 1000cc(2) = 0For i = 1 To 1000 Step 10 ’开始循环Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '画圆Next iEnd Sub也许您还看不懂上面的代码,这没有关系,只要能把同心画出来就可以了,祝您成功。
CADVBA初级教程(全)

第一课:入门1.为什么要写这个教程市面上ACAD VBA 的书不多,它的帮助是英文版的,很多人看不懂。
其实我转行已经好几年了,而且手艺也慢慢生疏了,写个教程对自己来说也是一次复习。
2.什么是Autocad VBA?VBA 是Visual Basic for Applications 的英文缩写,它是一个功能强大的开发工具,学好VBA 可以成倍甚至成百、成万倍提高工作效率,在工作中,有很多任务仅用ACAD 命令不可能完成的,只要学好VBA 就可以做到,相信到时候您一定会得到同事的佩服、老板的器重。
3、VBA 有多难?相信大家都知道Basic 是的含义.应该承认,我的水平还不高,错误之处在所难免,如果大家发现错误一定要提出批评,以便及时更正.4、怎样学习VBA?介绍大家一个学习公式:信心+恒心=开心。
仔细阅读本教程,完成例题,在学习的过程中一定要多思考,多想一些是什么、为什么。
本教程将陆续发布在CAD 世界论坛上,您不需要付费就可以学习。
本作者在此郑重承诺:关于本教程中有任何疑问,可以跟贴提问,只要有时间,本人一定会耐心解答.我不会发到任何人的邮箱中,您自己在论坛上找就可以了,请不要再向我索要这份教程。
5、现在我们开始编写第一个程序:画一百个同心圆第一步:复制下面的红色代码第二步:在模型空间按快捷键Alt+F8,出现宏窗口第三步:在宏名称中填写C100,点“创建”、“确定”第四步:在Sub c100()和End Sub 之间粘贴代码第五步:回到模型空间,再次按Alt+F8,点击“运行"Sub c100()Dim cc(0 To 2) As Double '声明坐标变量cc(0) = 1000 ’定义圆心座标cc(1) = 1000cc(2) = 0For i = 1 To 1000 Step 10 ’开始循环Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '画圆Next iEnd Sub也许您还看不懂上面的代码,这没有关系,只要能把同心画出来就可以了,祝您成功。
VBA入门教程-7定义变量

VBALesson 7 程序说明:我們為什麼要用變數。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)Dim i , j As IntegerDim k As Rangei = Target.Rowj = Target.ColumnSet k = TargetIf i >= 2 And j = 2 Thenk = 200ElseIf i >= 2 And j = 3 Thenk = 300ElseIf i >= 2 And j = 4 Thenk = 400Elsek = 500End IfEnd Sub跟VBALesson 6比较,程序是不是明朗多了,在前课重复的用Target.Row,Target.Column及Target来写程序是不是有一点烦。
用变量的第一个好处大家马上感觉得出来,就是可以简化程序。
使用变量前,你得先宣告变量。
宣告变量的方法是在 "Dim " 后面写上变量 " i " As 后面接上变量的形态 "Integer"。
Dim i , j As Integer就是宣告 i与 j 为整数变量,这是同时宣告二个变量i与j所以要在二个变量间加个 " , "号。
Dim k As Range 是宣告 k为范围资料形态,Range这是Excel特有的资料形态。
i = Target.Row是把当前单元格的行数,指定给变量i。
j = Target.Column是把当前单元格的栏数,指定给变量 j。
Set k = Target是把当前的单元格,指定给变量k。
用像i与j 这样简单的变量,在程序的前面你可能还记得 i或 j代表着什么。
程序写长了,你可能忘记i或j代表着什么。
所以最好的方法是用比较有意义的代号,来为变量命名如iRow或iCol来取代i及 j 。
(word完整版)Excel_VBA_编程教程(完整版)excel高级教程==

Excel_VBA_编程教程(完整版)excel高级教程VBA - Excel编程概念之:【单元格和区域】一、如何引用单元格和区域使用Visual Basic的普通任务是指定单元格或单元格区域,然后对该单元格或单元格区域进行一些操作,如输入公式或更改格式。
通常用一条语句就能完成操作,该语句可标识单元格,还可更改某个属性或应用某个方法。
在Visual Basic中,Range 对象既可表示单个单元格,也可表示单元格区域。
下列主题说明了标识和处理Range对象最常用的方法。
用A1样式记号引用单元格和单元格区域可使用Range属性来引用A1引用样式中的单元格或单元格区域。
下述子程序将单元格区域A1:D5的字体设置为加粗。
Sub FormatRa nge()Workbooks("Book1").Sheets("Sheet1").Ra nge("A1:D5") _.Font.Bold :End Sub下表演示了使用=TrueRange属性的一些A1样式引用。
引用Ran ge("A1") Range("A1:B5") 含义单元格A1从单元格A1到单元格B5的区域Ra nge("C5:D9,G9:H16")多块选定区域Ran ge("A:A") Ran ge("1:1") Ran ge("A:C") Ran ge("1:5")A列第一行从A列到C列的区域从第一行到第五行的区域Range("1:1,3:3,8:8") 第1、3 和8 行Range("A:A,C:C,F:F") A、C 和F 列用编号引用单元格通过使用行列编号,可用Cells属性来引用单个单元格。
该属性返回代表单个单元格的Range对象。
Excel-VBA-编程教程

VBA语言的基础认识第一节:标识符一、定义标识符是一种标识变量、常量、过程、函数、类等语言构成单位的符号,利用它可以完成对变量、常量、过程、函数、类等引用。
二、命名规则(1)字母打头,由字母、数字和下划线组成,如A987b_23Abc(2)字符长度小于40,(Excel2002以上中文版本等,可以用汉字且长度可达254个字符)(3)不能与VB保留字重名,如public,private,dim,goto,next,with,integer,single等第二节:运算符定义:运算符是代表VB某种运算功能的符号。
(1)赋值运算符 =(2)数学运算符&、+ (字符连接符)、+(加)、-(减)、Mod(取余)、\(整除)、*(乘)、/(除)、-(负号)、^(指数)(3)逻辑运算符Not(非)、And(与)、Or(或)、Xor(异或)、Eqv(相等)、Imp(蕴涵)(4)关系运算符= (相同)、<>(不等)、>(大于)、<(小于)、>=(不小于)、<=(不大于)、Like、Is(5)位运算符 Not(逻辑非)、And(逻辑与)、Or(逻辑或)、Xor(逻辑异或)、Eqv(逻辑等)、Imp(隐含)第三节:数据类型VBA共有12种数据类型,具体见下表,此外用户还可以根据以下类型用Type自定义数据类型。
数据类型类型标识符字节字符串型String $ 字符长度(0-65400)字节型Byte 无 1布尔型Boolean 无 2整数型Integer % 2长整数型Long & 4单精度型Single ! 4双精度型Double # 8日期型Date 无8公元100/1/1-99/12/31货币型Currency @ 8小数点型Decimal 无14变体型Variant 无以上任意类型,可变对象型Object 无 4第四节:变量与常量(1)VBA允许使用未定义的变量,默认是变体变量(2)在模块通用说明部分,加入Option Explicit语句可以强迫用户进行变量定义(3)变量定义语句及变量作用域Dim 变量as 类型’定义为局部变量,如Dim xyz as integer Private 变量as 类型’定义为私有变量,如Private xyz as bytePublic 变量as 类型’定义为公有变量,如Public xyz as single Global 变量as 类型’定义为全局变量,如Global xyz as dateStatic 变量as 类型’定义为静态变量,如Static xyz as double一般变量作用域的原则是,那部分定义就在那部分起作用,模块中定义则在该模块那作用。
VBA最最精典的教程(基础入门)

为宏指定快捷键
你也许希望为经常使用的宏指定快捷键。当给宏指定了快捷键后, 就可以用快捷键来执行宏,而不必通过“工具”菜单。
※注意:当包含宏的工作簿打开时间, 为宏指定快捷键会覆盖EXCEL默认的快捷键。
可以在创建宏时指定快捷键,也可以在创建后再指定。 要在创建(录制)宏时指定快捷键,只须在录制宏时 在输入宏名后,在“快捷键”文本框中输入相应的键。
2021/2/27
如果该文件存在,则每当EXCEL 启动时会自动将此文件打开 并隐藏在活动工作簿后面
如果你要让某个宏在多个工作簿 都能使用,那么就应当创建 个人宏工作簿, 并将宏保存于其中。
个人宏工作簿
• 试着练:
• 1)建立一个名为“HOUR2”的工作簿,选择“工具”-“宏”-“录制新宏”,显 示“录制新宏”对话框。
Sub 改变颜色() ' ' 改变颜色 Macro ' xw 记录的宏 2000-6-10 '
' With Selection.Interior .ColorIndex = 3 .Pattern = xlSolid .PatternColorIndex = xlAutomatic End With End Sub
例如:把CTRL+C指定 给某个宏,那么CTRL+C 就不再执行复制命令。
录制宏后指定快捷键也很简单,只需选择“工具”-“宏”,显示“宏” 对话框,选择要指定快捷键的宏,再单击“选项”按钮,通过“选项” 对话框进行设置。
2021/2/27
决定宏保存的位置
• 宏可保存在三种可能的位置:
• 1)当前工作簿。(只有该工作簿打开时,该宏才可用。) • 2)新工作簿。 • 3)个人宏工作簿。
Excel VBA编程教程最新完整版
VBA语言基础橄榄树整理一、VBA 语言基础第一节标识符一.定义标识符是一种标识变量、常量、过程、函数、类等语言构成单位的符号,利用它可以完成对变量、常量、过程、函数、类等的引用。
二.命名规则1)字母打头,由字母、数字和下划线组成,如A987b_23Abc2)字符长度小于40,(Excel2002 以上中文版等,可以用汉字且长度可达254 个字符)3)不能与VB 保留字重名,如public, private, dim, goto, next, with, integer, single等第二节运算符定义:运算符是代表VB某种运算功能的符号。
1)赋值运算符2)数学运算符&、+ (字符连接符)、+(加)、-(减)、Mod(取余)、\(整除)、*(乘)、/(除)、-(负号)、^(指数)3)逻辑运算符Not(非)、And(与)、Or(或)、Xor(异或)、Eqv(相等)、Imp(隐含)4)关系运算符= (相同)、<>(不等)、>(大于)、<(小于)、>=(不小于)、<=(不大于)、Like、Is5)位运算符Not(逻辑非)、And(逻辑与)、Or(逻辑或)、Xor(逻辑异或)、Eqv(逻辑等)、Imp(隐含)第三节数据类型VBA 共有12 种数据类型,具体见下表,此外用户还可以根据以下类型用Type 自定义数据类型。
数据类型类型标识符字节字节型Byte 无1布尔型Boolean 无2整数型Integer % 2长整数型Long & 4单精度型Single ! 4双精度型Double # 8日期型Date 无8 公元100/1/1-99/12/31货币型Currency @ 8小数点型Decimal 无14变体型Variant 无以上任意类型,可变对象型Object 无4第四节变量与常量1)VBA 允许使用未定义的变量,默认是变体变量。
2)在模块通用说明部份,加入Option Explicit 语句可以强迫用户进行变量定义。
ExcelVBA数组入门教程
ExcelVBA数组入门教程Excel VBA数组入门教程1. 前言:不要把VBA数组想的太神秘,它其实就是一组数字而已。
2. 数组的维数:Sub 数组示例()Dim x As Long, y As LongDim arr(1 To 10, 1 To 3) '创建一个可以容下10行3列的数组空间For x = 1 To 4For y = 1 To 3arr(x, y) = Cells(x, y) '通过循环把单元格区域a1:c4的数据装进数组中Next yNext xMsgBox arr(4, 3) '根据提供的行数和列数显示数组arr(1, 2) = "我改一下试试" '你可以随时修改数组内指定位置的数据MsgBox arr(1, 2)End Sub总结:二维是由行和列表示的数组,如ARR(3,2)表示数组中第3排第2列的元素。
而一维数组只是由一个元素决定,如ARR,4,表示数组中第4个元素3. 把单元格数据搬入内存:一、声明:Dim arr as Variant '声明一个变量,不能声明其他数据类型Dim arr(1 to 10, 1 to 2 ) , 这种声明也是错误的,固定大小的VBA数组是不能一次性装入单元格数据戒:dim arr() 这种声明方式是声明一个动态数组,也可以装入单元格区域,构成一个VBA数组。
二、装入arr =range("a9:c100") '装入很简单,变量 = 单元格区域三、读出装入数组后的单元格数值,可以按数组名称(行数,列数) 直接读取该位置的值,如下面的代码。
Msgbox arr(3,2) '就可以取出搬过去的而构成的数组第3行第2列的内容四、示例Sub s3()Dim arr() '声明一个动态数组,动态指不固定大小,Dim arr1 '声明一个Variant类型的变量arr = Range("a1:c7") '把单元格区域A1:C7的值装入数组arrarr1 = Range("a1:c7") '把单元格区域A1:C7的值装入数组arr1MsgBox arr(1, 1) '读取arr数组中第1行第1列的数值MsgBox arr1(2, 3) '读取arr1数组的第2行第3列的数值 End Sub4. 把单元格数据搬入内存:Sub test()Dim arr '声明一个变量用来盛放单元格数据Dim x As Integerarr = Range("a2:d5") '把单元格数据搬入到arr里,它有4列4行For x = 1 To 4 '通过循环在arr数组中循环arr(x, 4) = arr(x, 3) * arr(x, 2) '数组的第4列(金额)=第3列*第2例Next xRange("a2:d5") = arr '把数组放回到单元格中End SubSub test1()Dim arr(1 To 5) '声明一维数组For x = 1 To 5arr(x) = x * 2 '通过循环给每个位置赋值Next xRange("A1:E1") = arr '把数组导入到excel中的a1:e1单元格中Range("A1:A5") = Application.Transpose(arr) '如果是放在一列中,就需要对数组进行转置后再存放End Sub5. 动态数组的声明:Sub darr()Dim arr() '声明一个动态的arr数组(不知道它能盛多少数据)Dim kk = Application.WorksheetFunction.CountIf(Range("a2:a6"),">10") '计算大于10的个数ReDim arr(1 To k) '再次声明arr的大小,正好盛下k数量的值For x = 2 To 6If Cells(x, 1) > 10 Thenm = m + 1arr(m) = Cells(x, 1) '通过循环把大于10的数字装入数组End IfNext xMsgBox arr(2)End Sub6. 动态数组的声明:arr(-19 to 8) 这个数组的编号就是从-19开始的.那么它的最小编号就是-19,最大编号是8, 如果用语句返回就是:Sub t1()Dim arr(-19 To 8)MsgBox UBound(arr) '返回最大编号,结果为8MsgBox LBound(arr) '返回最小编号,结果为-19End Sub如果是有行列组成的二维数组呢?二维数组返回行的下标和列的下标见下例Sub t2()Dim arr(-19 To 8, 2 To 5)MsgBox UBound(arr) '返回第1维(行的)最大编号,结果为8MsgBox LBound(arr) '返回第1维(行的)小编号,结果为-19MsgBox UBound(arr, 2) '返回第2维(列的)最大编号,结果为5MsgBox LBound(arr, 2) '返回第2维(列的)最小编号,结果为2End SubSub t3()Dim arrarr = Sheets(1).UsedRange 'Usedrange的行数和列数是未知的MsgBox UBound(arr, 1) '可以计算这个区域有多少行MsgBox UBound(arr, 2) '可以计算出这个区域有多少列 End Sub7. 使用Array函数创建常量数组:使用Array函数创建数组1维常量数组:Array("A",1,"C")2维常量数组: Array(Array("a", 10), Array("b", 20),Array("c", 30))也可以调用excel工作表内存数组:1维数量: [{"A",1,"C"}]2维数量:[{"a",10;"b",20;"c",30}] 内存常量数组有什么作用呢?1、简化赋值比如:我需要给数组arr分别赋值10 ,20,30,40 ,一般就需要分别赋值,即: arr(1)=10arr(2)=20arr(3)=30arr(4)=40而使用常量数量,只一句话:arr=array(10,20,30,40)2、调用工作表函数时使用:Sub mylook()Dim arrarr = [{"a",10;"b",20;"c",30}]MsgBox Application.VLookup("b", arr, 2, 0) '调用vlookup时可以作为第二个参数End Sub8. 数组的合并和字符串拆分,Join & Split,:多个字符的合并和字符串按规律的拆分是经常遇到的,如:A-REW-E-RWC-2-RWC 按分隔符-拆分成6个字符放在一个数组中有一组数array(23,45,7,1,76)想用分隔符-连接成一个字符串上面两种情况VBA提供了一对函数,即:split,字符串,"分隔符",拆分字符串join(数组,"分隔符") 用分隔连接数组的每个元成一个字符串Sub t1()Dim arr, myst As Stringmyst = "A-REW-E-RWC-2-RWC"arr = Split(myst, "-") '按-分隔成一组数装入数组中'MsgBox arr(0) '显示数组的第一个数(分隔后的数组最小下标为0,不是1),显示结果为AMsgBox Join(arr, ",") '再用","把数组的每个值连接成一个字符串,结果为"A,REW,E,RWC,2,RWC"End Sub值得注意的是:split和join只能对一维数组进行操作,如果是单元格戒二维数组怎么办?只有一条途径,想办法转换为一维数组:Sub t2()Dim ARRARR = Application.Transpose(Range("a1:a3")) ‘用转置的方法,把单元格一列数据转换成一维数组MsgBox Join(ARR, "-")End Sub9. Filter函数实现数组筛选:数组的筛选就是根据一定的条件,从数组中筛选符合条件的值,组成一个新的数组,实现数组筛选的VBA函数是:Filter函数用法:Filter(数组, 筛选的字符, 是否包吨)Sub DD()arr = Array("ABC", "A", "D", "CA", "ER")arr1 = VBA.Filter(arr, "A", True) '筛选所有吨A的数值组成一个新数组arr2 = VBA.Filter(arr, "A", False) '筛选所有不吨A的数值组成一个新数组MsgBox Join(arr2, ",") '查看筛选的结果End Sub遗憾的是函数只能进行模糊筛选,不能精确匹配。
VBA类模块完全教程
VBA类模块完全教程写下这个题目,可能会让很多朋友疑惑,笔者先埋下一个关子,很快我会让您知道这个标题的寓意。
这份礼物送给现在想学习类知识或曾经学过但因为各种原因没有“修成正果”的朋友,我期望的结果是这篇文章后,您可以在类模块中像在标准模块中写代码一样熟练,我也期望不至于太乏味而使您没有耐心看完整篇文章,或者说期望您学习的过程是轻松愉悦的,但愿我可以做到。
文章构划为8部分:1.什么是类2.为什么要学习类3.类的预备知识4.创建类属性5.创建类方法6.创建类事件7.一个完整的类实例8.未完的结尾什么是类在我们身边,相同或相似的物品无处不在,从生活用品,到工业产品,……通常它们都是由同一个可以称为“模具”的东西生产出来。
理解类,一般要先从对象谈起,但由于从不同的角度,有不同的理解,从而也有不同的关于类的定义,本文不去探讨一个完整并且公认的类概念,在这一部分后,只要你有一个基本的判断并且在遇到时知道是类就可以了。
在上面的这个例子中,一个“模具”就是一个“类”,而由它生产出的每一个产品,就是一个“对象”。
看下面的VBA语句:Dim tx1 As Textbox不用解释它的意思吧,这里我们用到一个类Textbox定义了一个对象tx1,再来看:Dim tx1 As TextboxDim tx2 As Textbox又定义了一个对象tx2,如果你不嫌烦,我还可以继续下去。
对象增加了,但As后的Textbox没有变,它可以无限制的使用下去。
类是一个隐者,上面Textbox是VBA已经给我们准备好的一个类,我们无法知道VBA是怎么准备的(它的真身被隐藏了),但我们可以知道对象tx1怎么用。
VBA把对对象的使用划分为三种,属性、方法和事件(后面预备知识我们再提)。
然而,Textbox是一个类,仍然不是本文要说的类,因为它是VBA已经给我们准备好了的,我们要做的,只是知道如何使用它而已。
本文要介绍的,是利用VBA已经给我们提供的资源,来构建我们自己的类,姑且可称之为自定义类。
ExcelVBA教程:ColorIndex属性
ExcelVBA教程:ColorIndex属性应⽤于 Border对象的 ColorIndex属性。
返回或设置边框的颜⾊。
该颜⾊可指定为当前调⾊板中颜⾊的编号,或下列XlColorIndex 常量之⼀。
Variant 类型,可读写。
XlColorIndex 可为以下 XlColorIndex 常量之⼀。
xlColorIndexAutomaticxlColorIndexNoneexpression.ColorIndexexpression 必需。
该表达式返回“应⽤于”列表中的对象之⼀。
应⽤于 Borders对象的 ColorIndex属性。
返回或设置四条边框的颜⾊。
如果四条边框不是同⼀种颜⾊,则返回 Null。
该颜⾊可指定为当前调⾊板中颜⾊的编号,或下列XlColorIndex 常量之⼀。
Variant 类型,可读写。
XlColorIndex 可为以下 XlColorIndex 常量之⼀。
xlColorIndexAutomaticxlColorIndexNoneexpression.ColorIndexexpression 必需。
该表达式返回“应⽤于”列表中的对象之⼀。
应⽤于 Font对象的 ColorIndex属性。
返回或设置字体的颜⾊。
该颜⾊可指定为当前调⾊板中颜⾊的编号,或下列XlColorIndex 常量之⼀。
Variant 类型,可读写。
XlColorIndex 可为以下 XlColorIndex 常量之⼀。
xlColorIndexAutomatic 指定⾃动设置颜⾊。
xlColorIndexNone.expression.ColorIndexexpression 必需。
该表达式返回“应⽤于”列表中的对象之⼀。
应⽤于 Interior对象的 ColorIndex属性。
返回或设置边框内部的颜⾊。
该颜⾊可指定为当前调⾊板中颜⾊的编号,或下列XlColorIndex 常量之⼀。
Variant 类型,可读写。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.宏和VBA宏:用Excel录制的动作称作“宏”。
VBA(Visual Basic for Application):手动编写的控制Excel的代码。
实例演示:假设我们的Excel报告经常使用一种适合公司风格的专用字体:隶书,16号字,蓝色,粗体。
如果手工操作设置这些格式,至少需要单击四五次鼠标,下面通过录制一个宏来完成这些操作并把这些操作指定到一个快捷键上。
1.首先选择一个需要设置格式的单元格区域,单击“开发工具—>录制宏”命令,开始录制我们的Excel操作。
如果Excel界面中没有找到“开发工具”标签,请按以下步骤操作:1)单击“文件”—“选项”打开“Excel选项”窗口。
2)在“自定义功能区”选项中,勾选右侧列表中的“开发工具”。
3)单击“确定”,功能区中即可显示“开发工具”选项卡,其中包含了宏命令。
2.此时弹出“录制新宏”对话框,在该对话框中,可以给即将录制的宏去一个新的名字。
在这里使用Excel提供的默认名称,如下图所示:在“快捷键”选项中,这里把即将录制的宏指定给快捷键组合“Ctrl+M”,需要注意的是,由于很多与Ctrl键组合的字母已经被Excel使用为内置快捷键,因此在指定快捷键时要尽量避免和内置快捷键发生冲突。
在“保存在”选项中需要告诉Excel,即将录制的宏保存在哪里,这里有三个选项:(1)个人宏工作簿如果把录制的宏保存在“个人宏工作簿”中,那么该宏在所有本机上打开的Excel 文件中都能使用,“个人宏工作簿”在正常情况下是隐藏的,并随着Excel的启动而开启。
(2)新工作簿如果把录制的宏保存在“新工作簿”中,那么录制的宏会保存在一个新建的工作簿中,当前工作簿并不保存录制宏所自动生成的VBA代码。
(3)当前工作簿如果把录制的宏保存在“当前工作簿”中,那么录制宏后所自动生成的VBA代码将保存在当前工作簿文件中,可以随着当前文件分发给其他用户。
注意:如果选择了“当前工作簿”这个选项,保存当前文件时,必须保存为“.xlsm 格式(表示该文件中含有宏代码)。
3.我们在这里选择把宏保存在“个人宏工作簿中”,然后设置所选单元格格式为:隶书,16号字,蓝色,粗体。
全部动作完成后,单击“开发工具—>停止录制”命令结束录制过程。
此时,我们刚才录制的宏已经被保存到了所选择的“个人宏工作簿”中了,并且指定了用快捷键“Ctrl+M”来调用它,如下图所示。
4.在Excel其他任意一个单元格中输入任意字符,选中这些字符,然后按下快捷键Ctrl+M,这时会发现,选中的单元格区域变成了我们所期望的格式。
5.我们可以查看录制的宏转变成的VBA语言,可以按照如下方式操作。
(1)单击“开发工具—>Visual Basic”命令。
此时进入VBA编程环境。
(2)由于我们把宏保存在了个人宏工作簿,因此在VBA编程环境界面的左侧单击VBAProject(PERSONAL.XLSB)下方的“模块”文件夹,在展开的列表中单击“模块1”,此时在右边的VBA代码编辑界面显示的就是我们录制的宏所对应的VBA代码.我们录制的宏所对应的VBA 代码如下:Sub 宏1()' 宏1 宏' 快捷键: Ctrl+MSelection.Font.Italic = FalseSelection.Font.Bold = FalseSelection.Font.Bold = TrueWith Selection.Font.Name = "宋体".Size = 16.Strikethrough = False.Superscript = False.Subscript = False.OutlineFont = False.Shadow = False.Underline = xlUnderlineStyleNone.ThemeColor = xlThemeColorLight1.TintAndShade = 0.ThemeFont = xlThemeFontMinorEnd WithWith Selection.Font.Name = "华文隶书".Size = 16.Strikethrough = False.Superscript = False.Subscript = False.OutlineFont = False.Shadow = False.Underline = xlUnderlineStyleNone.ThemeColor = xlThemeColorLight1.TintAndShade = 0.ThemeFont = xlThemeFontNoneEnd WithWith Selection.Font.Color = -1003520.TintAndShade = 0End WithEnd Sub用Excel录制宏所生成的VBA语句往往过于啰嗦,如果我们自己编写VBA代码的话,完全可以用如下非常精简的语言完成个很难过同样的操作。
Sub 宏1()With Selection.Font.Size=16.Name=“隶书”.Bold=“True”.ThemeColor=xlThemeColorAccentlEnd WithEnd Sub二.Excel报告自动化实例演示:假设你是某家公司的管理人员,每天需要汇总一下前一天的产品出货情况,前一天的产品出货数据由公司的业务系统在每天凌晨1点钟以文本文件的形式保存到共享磁盘空间的指定位置。
你每天早晨的第一件事就是对这些数据进行分析汇总,第一时间报告给老板,以便老板进行当天的生产安排。
为了避免无关细节的干扰,下面对问题进行了最大程度的简化,我们只要明白其中的逻辑就可以了。
在实际工作中,我们可以根据具体情况无限扩展。
如图2-1所示的数据就是在每天凌晨1点保存到共享磁盘空间指定位置的上的文本文件,新的数据会以相同的文件名覆盖旧的数据。
图2-1如图2-2所示是老板需要的数据分析汇总结果,注意这只是简化的示例,真实的情况是,我们可能需要对原始数据做各种各样的分析汇总并辅以各种图表使数据可视化。
而这些都可以在保持数据的连接性完整的情况下扩展达成的。
图2-2下面的任务是,建立Excel与数据源的链接,然后对数据进行分析处理,最后利用Excel 录制的“宏”和自行编写的VBA代码(只有一句)让整个工作自动化。
具体实现过程:(1)导入文本数据,此时需要注意,为了避免每次刷新数据时出现选择文本文件的对话框,终端自动化进程,需要作如下设置。
将鼠标放置在数据到如需的任意单元格上,单击“数据—>连接—属性”命令,弹出“外部数据区域属性”对话框,在该对话框中,取消勾选“刷新时提示文件名”复选框。
数据导入到Excel后效果如图2-3所示。
图2-3(2)在导入的文本数据的基础上制作数据透视表、图表或其他统计图表。
为说明问题简便,我们只做了一个数据透视表(鼠标选中数据区域,单击“插入—>数据透视表”),如图2-4所示。
图2-4(3)录制宏。
我们通过录制Excel宏把“刷新数据源”和“刷新数据透视表”这两个动作自动化完成。
单击“开发工具—>录制宏”命令。
在弹出的“录制新宏”对话框的“宏名”的位置给即将录制的宏取一个有意义的名字,在这里我们取名“myMacro”。
在“录制新宏”对话框的“保存在”选项处,我们选择把即将录制的宏保存在“当工作簿”,这是因为我们只希望在当前工作簿中执行该宏,如图2-5所示。
图2-5(4)从现在开始,我们对Excel的所有操作都会被Excel录制宏功能记录在案,因此为了使录制的宏简洁高效,我们必须认真对待每一步操作,尽量避免任何多余的操作。
在这一步里,我们只需要录制两个动作,即“刷新数据源”和“刷新数据透视表”。
首先选择Sheet1工作表,把鼠标置于导入数据区域的任意单元格,然后到单击“数据—>连接—>全部刷新”命令刷新数据源。
选择Sheet2工作表,把鼠标置于数据透视表区域的任意一个单元格,然后单击“数据透视表工具—>选项—>数据—>刷新”命令,数据透视表刷新完毕,如图2-6所示。
此时,Excel宏的两个动作录制结束。
图2-6(5)结束录制宏。
单击“开发工具—>停止录制”命令结束录制宏。
(6)查看刚刚录制的宏。
单击“开发工具—> Visual Basic”命令,打开Visual Basic 编辑界面。
双击“模块”文件夹,然后双击“模块1”,即可看到Excel刚刚录制的Excel宏的后台VBA代码,如图2-7所示。
图2-7下面解释一下每一句代码的含义。
Sub myMacro ()——我们给宏取的名字,录制的宏在此开始。
myMacro 宏——Excel 录制宏时自动添加的注释。
Sheets("Sheet1").Select——选择名称为“Sheet1”的工作表。
ActiveWorkbook.RefreshAll——刷新当前工作簿的所有外部链接的数据源。
Sheets("Sheet2").Select——选择名称为"Sheet2"的工作表。
Range("B4").Select——因为上一句代码选择了"Sheet2",因此这一句选取的是"Sheet2"的B4单元格,该单元格位于数据透视标范围内。
ActiveSheet.PivotT ables("数据透视表1").PivotCache.Refresh——刷新“数据透视表1”,我们制作数据透视表时,Excel 会自动给每个数据透视表取一个名字。
End Sub——录制的宏在此结束。
(7)让Excel文件打开时自动执行宏。
我们在VBA编辑界面左侧的Excel对象浏览器里双击“ThisWorkbook”,进入“ThisWorkbook”的代码编辑界面。
在该界面的右侧代码编辑区的上方单击写有“通用”字样的下拉框,从中选择“Workbook”选项,如图2-8所示。
图2-8此时Excel自动生成以“Private Sub Workbook_Open()”开始,以“End Sub”结束的Excel宏开始和结束标识。
该Excel宏标识表示,当Excel文件打开时(即Workbook_Open()),将执行“Private Sub Workbook_Open()”和End Sub”之间的所有动作。
我们的目的是让Excel文件打开时自动执行我们刚刚录制的宏“myMacro”,因此我们在两句代码之间输入“Call myMacro”,表示我们要调用执行我们刚刚录制的宏“myMacro”,如图2-9所示。