VBA基础

    技术2025-01-25  12

    VBA基础

    目录

    对象语法规则VBA常见的数据类型数据类型声明判断语句循环语句结束语句跳转语句错误分支重复利用对象公式与函数运算符禁止/允许弹出警示窗口立即debug运行窗口输出VBA字典技术(类)正则表达式工作簿与工作表工作簿表示方法工作簿基础操作工作表表示方法工作表基础操作 单元格

    对象

    对象 在Excel VBA中,指的就是:工作薄、工作表、单元格、图表、透视图。 属性: 指对象所具有的特性。 方法: 实际上就是对对象的操作,他是一种动作,一种行为。

    变量: 在定义之后了还能再次赋值 格式: Dim 变量 As 变量类型 = 数值 [let] 变量 = 变量值 set obj = 对象 静态变量Static: 用法:Static 变量 As 类型名 = 数值 PS: VBA 允许使用未定义的变量,默认变量是变体变量(Variant) Option Explicit ,规定变量必须显式声明,才能使用

    常量 定义Const,用法:Const 常量 As 类型名 = 数值

    访问权限定义 Public,Private

    语法规则

    变量命名以字母开头变量命名不能用保留字变量命名不超过255个字符变量命名同一范围内必须是唯一VB代码不区分大小写同一行可以写多条语句,但要用冒号:隔开如果一行写不下,可以加入续行符(" _"不带引号)后换行注释以Rem或’开头

    VBA常见的数据类型

    Integer 整形 % 2Byte Single 单精度 ! 4Byte Double 双精度 # 8Byte Long 长整形 & 4Byte String 字符型 $ 定长或变长 Currency 货币型 @ 8Byte Boolean 布尔值 TrueFalse Date 日期

    数据类型声明

    Dim a As Integer 等同于 Dim a% Dim a As Integer, b As Single 等同于 Dim a%, b!

    判断语句

    If类: If (判断句) Then (操作) If (判断句) Then (操作) End If If (判断句) Then (操作) Else (操作) End If If (判断句) Then (操作) ElseIf (判断) Then (操作) Else (操作) End If IIf ([判断], [真操作],[假操作]) PS:可以嵌套 IIf ([判断], IIf(,),[假操作]) Select类:

    Select Case () Case Is(1) (操作) Case Else(2) (操作) End Select PS:不用Break,case匹配到后执行完毕直接跳到EndSelect

    循环语句

    ```vbnet 'Do Loop类: Do (操作) Loop '死循环 Do (操作+If() Then (Exit Do) End If ) Loop 'Do While Loop类: Do While (判断) (操作) Loop Do (操作) Loop While (判断) 'Do Until Loop类: Do (操作) Loop Until(判断) 'For Each类: For Each (变量) In (对象) Next 'For next类:(内置计数器) For (变量) = (1) To (2) (操作) Next For (变量) = (1) To (2) Step (步长) (操作) Next

    结束语句

    'Exit:退出当前语句 Exit Do Exit For Exit Function Exit Sub 相当于 return 'End: 结束一个块或者过程 End 有时等同于 Exit Sub(退出窗体用End) End Function End If End Select End Sub

    跳转语句

    GoTo Line:无条件转移到过程的指定行 (标记名):(操作) If(判断) Then GoTo (标记名) GoTo Return:执行后又跳转回去 (标记名):(操作) return If(判断) Then GoTo (标记名)

    错误分支

    'OnErrorResume On Error Resume Next '错误出现时继续执行下去 'OnErrorGoto On Error GoTo (标记名)

    重复利用对象

    With语句,对某一个对象执行一系列语句时,不用重复指出对象名称 With (对象) (.操作) End With PS:可以不断嵌套

    公式与函数

    普通公式 eg:Sheet1.Cells(1,3) = "a1+b1" 批量公式 eg:Sheet1.Cells(i,4) = "=a" & i & "+b" & i (i循环) 数组公式 eg:Range("e1:e10").FormulaArray = "=a1:a10+b1:b10" Range("e1:e10") = "=a1:a10+b1:b10" (PS:FormulaArray支持数组公式,两者不同) 带工作函数的计算 eg:Sheet1.Cells(1,4) = "=sum(a1:b1)" 公式带引号的计算(用"转义") eg:Cells(12,1) = "=COUNTIF(A1:A10,"">9"")" 借用工作表函数 Applicaton.WorksheetFunction.函数名(VB表达式) WorksheetFunction.函数名(VB表达式) Applicaton.函数名(VB表达式) VBA函数: VBA.函数名(VB表达式) 函数名(VB表达式) 自定义函数: Function 函数名(参数) (判断操作) End Function

    运算符

    赋值运算符:= 数学运算符: &(字符连接符) -(负号) ^(指数) +(加) -(减) Mod(余) \(整除) *(乘) /(除) 逻辑运算: Not(非) And(与) Or(或) Xor(异或) Eqv(相等) Imp(隐含) 关系运算: =(相同) <>(不等) >(大于) <(小于) >=(不小于) <=(不大于) Like(比较两个字符串) Like通配符:区分大小写 ?单一字符; eg:"abc" like "a?c" *零个或多个字符; eg:"excel" like "*c*" #任何一个数字; eg: 88 like "##" [charlist]list任何一个单一字符,[!charlist]反之; eg: "a" Like "[a-z]" ; 8 Like "[1-4, 6-9]"

    禁止/允许弹出警示窗口

    Application.DispalyAlerts = false/true

    立即debug运行窗口输出

    Debug.Print

    VBA字典技术(类)

    <Key,Item> 方法:Add, Keys, Items, Exists, Remove, RemoveAll 属性:Count, Key,Item, CompareMode Key关键字类型 速度:纯数字>纯文本>>>文本/数值混合型

    Dim d As Object Set d = CreateObject("Scripting.Dictionary") d.add "a", "Example1" d.add "b", 9 'add重复Key会报错 d("b") = 7 '赋值操作,直接覆盖,不报错 d.Item("b") = 7 '等同于赋值 d.Key("a") = "aa" '替换Key值

    更改Key值比较实用的方式:CompareMode = 0(二进制)/1(文本)/2(数据库)

    正则表达式

    * 零次或多次 + 一次或多次 ? 零次或一次 . 除换行符之外的单字符 ^ 字符串开始位置 $ 字符串结尾位置,如果设置了多行属性则也匹配'\n'、'\r' | 两项之间的选择 [] 表达式开始于结束 \b 字与空格间的位置 单词边界 \B 非单词边界 {} 限定符(表示出现次数条件)表达式的开始 *、+、? {n} 确定n次 {n,} 匹配n及以上次 {n,m} 匹配n-m次

    工作簿与工作表

    工作簿表示方法

    Workbooks表示当前打开的工作簿集合 名称表示法: Workbooks(“名称”) 索引号表示法:目录中的第几个 Workbooks.Count Workbooks(2) 窗口表示法:office excel打开的第几个 Windows.Count Windows(1) 当前工作簿:代码所在的工作簿 ThisWorkbook.Name 活动工作簿:被激活的工作簿,正在被使用的工作簿 ActiveWorkbook.Name

    工作簿基础操作

    新建工作簿: Dim wkb As Workbook Set wkb = Workbooks.Add '新建工作簿,对象赋值需要用Set wkb.SaveAs "C:\123.xls" '保存工作簿文件到指定路径 打开工作簿: Dim wkb As Workbook Set wkb = Workbooks.Open("C:\123.xls")'打开路径指定的文件 关闭工作簿: Workbooks("123").Close True 文件复制与删除:FileCopy & Kill FileCopy "C:\123.xls","C:123_COPY.xls" Kill "C:123.xls" '删除文件kill (PS:这两个操作关键词对所有文件类型都起作用) 文件是否存在:Dir取出目录下的文件 a = Dir("C:123.xls") '返回文件的名称 PS:Dir如果匹配到多个文件,直接使用会直接得到下一个文件名

    工作表表示方法

    workbook对象中,有一个SHEET集合,成员是 worksheet或chart对象 Worksheets仅仅指的是工作表,而sheets包含图表、工作表、宏表等 工作表名称: Worksheets(“工作表表名”).Name Sheets(“图表表名”).Name 索引号表示法: Worksheets(index).Name Sheets(index).Name 直接取工作代码法: Sheet1.Name '工程下名称为Sheet1的对象 活动工作表: ActiveSheet.Name '激活的工作表 工作表集合应用:Sheets 与 Worksheets 区别

    工作表基础操作

    增加工作表: 格式:Sheets.Add(Before,After,Count,Type) '默认增加工作表xlWorksheet类型 PS: XLSheetType类型有:xlWorksheet表、xlChart图、xlExcel4MacroSheet宏、xlExcel4IntMacroSheet对话框 Sheets.Add '默认在当前激活的工作表前增加一个工作表 Sheets.Add Sheets("abc") '在abc工作表前增加一个工作表 Sheets.Add ,,2 '等同于 Add Count:=2 ,在当前激活的工作表增加两个工作表 指定名称新增: Sheets.Add.Name = "Name" 删除工作表:对象.Delete Sheets1.Delete 移动工作表:对象.Move(Before,After) Eg: Sheet1.Move ,Sheet4 '等同于 Sheet1.Move After:=Sheet4 Sheet1.Move ,after:=Sheets(Sheets.Count) '移动到最后 复制工作表:对象.Copy(Before,After) Eg: Sheet1.Copy Sheets(Sheets.Count+1) '在最后增加复制表1 选择工作表: 可以是集合对象 Sheets、Worksheets(Array(1,3,5))等 对象.Select '不支持选取已经隐藏工作表 对象.Active '支持

    单元格

    单元格 是Excel中最小的一个单位(工作簿、工作表、行、列、单元格) 单元格数量 = 行数:rows(B:B) * 列数 columns(2:2) 单元格容量:32767个字符

    Range 对象 代表某一单元格、某一行、某一列、某一选定区域 Range(“文本型装单元格地址”) Range(“a1”).Select 单元格 Range(“a:a”).Select 列 Range(“1:3”).Select 行 Range(“a1:b10”).Select 相邻区域 等同于 Range(“a1”,“b10”) '变化写法1 Range(Range(“a1”),(Range(“b10”)) '变化写法2 Range(“a1:d7,c4:e8”).Select 合并选 Range(“a1:d7 c4:e8”).Select 交选

    更多变化写法: 参照位置,相对引用法,相对位置 Range(“b2,d4”).Range(“a1”).Select 嵌套Cell Range(Cells(1,2), Cell(4,4)) 地址可以支持变量 Range(“a” & i) Range(“c3:e5”)(2) '从左到右,从上到下对区域单元格编号 PS:超出区域会向下拓展行 Range(“c3:e5”)(2,3) '区域相对行列坐标 动态获取单元格对象,会经常做这样的操作

    属性: NumberFormatLocal '单元格格式,可自定义格式 Font '是一个对象,包含字体颜色大小、字号等 (Name,zise,Bold,Color等属性可以设置) Interrior '代表Range对象的内部,用的比较多的是它的颜色 Interrior.Color '设置底纹填充颜色 Interrior.ColorIndex = 1-56 '56中颜色 索引颜色 Interrior.Color = QBColor(0-15) '16种颜色 早期颜色值 Interrior.Color = RGB(,) 'RGB颜色,三原色值 可以直接用数字 MergeArea '返回合并的Range单元格 Comment '批注对象,单元格批注,没有批注会是Nothing Comment.Visible '是否显示 Comment.Shape.width/height/Fill '批注属性

    操作: ClearFormats '清除单元格格式 Clear '清除内容及格式 PasteSpecial '选择粘贴,从剪贴板粘贴到指定区域, Cut '区域1剪切到区域2 Copy '区域1复制到区域2 Merge '合并单元格 UnMerge '拆分单元格 AddComment.Text “” '增加批注 ClearComments '删除批注 Activate '激活单元格 Offset(a,b) '偏移的行数列数的等同大小区域 Currentregion ’该对象所在的Range区域,区别 Resize(a,b) '调整Range对象,拓展成a行b列的Range对象 EntireRow '指定区域的整行或者多行,Range对象 EntireColumn '指定区域的整列或多列,Range对象 SpecialCells(Type,Vale) '指定类型和值匹配的所有单元格Range对象 Find(,…) '查找,参数很多,可以找文档细看 End(LRUD) '返回区域尾端单元格,参数上下左右

    Range没有指定工作表,会默认为当前活动的工作表 Range只对工作表对象中使用,不能对图表等其他表对象使用 Range的Row、Column属性,指区域内左上角的行列号

    Selection表示为选中的区域,一个Rang对象 Worksheet.UsedRange返回已经被使用的区域,最小长方形区域 如果设置了格式,也会被认定为已使用的区域;都没使用则定位到a1单元格

    Cells单元格 Cells表示工作表中所有单元格集合 集合Cells中定位 格式Cells(行号,列号) Cells(3,4) 等同于 Cells(3,“d”) 参照Range定位 Range(“b3,f11”).Cells(2,2) Range(“b3,f11”).Cells(6) 单元格简写:使用中括号 : [a3] '不用双引号 [b2:c6] [b2:c6].Item(3) 'Item必须写 Range(“b2:c6”)(3) 'Item被省略 [b2:c6].Cells(3) 活动单元格: activecell 激活单元格: cell对象.Activat

    单元格属性: 值 Value '实际是什么就是什么 值 Text '看到什么就是什么 (单区域可以省去Value赋值,对区域必须带上Value) 地址 Address(1, 1) '地址绝对引用 赋值 = '区域2等于区域1的值,必须用.Value属性,会清除格式

    行列: 列: Columns(1) Columns(“a”) Columns(“c:e”) '多列不能用数字表示,必须用字母 行: Rows(1) Rows(“2”) Rows(“3:4”) Range(“2:4”) 等同于 [2:4] Range(“a:b”) 等同于 [a:b] 属性: Rows(2).Insert '第二行上边插入一行 Rows(1).Delete '删除第一行

    Application操作单元格相关方法

    Union 单元格并集 多个区域合并用于单元格连接 Rnage可以完成多区域引用,但是文本地址有256长度限制 Intersect 单元格交集 多个区域相交区域,没有交集返回Nothing Range.Copy Sheet.Paste(Destination,Link) 单元格复制,工作表粘贴

    Shapes 图形对象,指工作表所有Shape对象集合 Shape 一个图片、形状、图表、按钮等都是一个Shape对象 常用属性: Name 名称 Type 图形类型,有一个int表示不同的类型 Top 顶端坐标 Left 左端坐标 Width 宽度 Height 高度 操作: Shapes.AddPicture(…) '添加图片对象,参数*7必填 shape.Delete '删除图形对象

    Processed: 0.013, SQL: 12