VBA学习重点笔记专业资料.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VBA 学习 重点 笔记 专业 资料
- 资源描述:
-
EXCEL之VBA 学习笔记 姓名:刘磊 时间:9 目录 第一章 VBA基本知识 3 第二章 工作簿以及工作表操作 9 第三章:单元格区域操作 14 第四章:事件程序: 36 第五章:VBA数组 42 第一章 VBA基本知识 1:代码协助: F1 2:代码换行: 下划线+空格+回车 3:.惯用代码操作excel中对象 (1)、工作簿(Workbooks) Workbooks(N)第N个工作簿 Workbooks ("工作簿名") ActiveWorkbook 活动工作簿 ThisWorkBook 代码所在工作簿 (2)、工作表(Worksheets) Sheets(N) 第N个工作表 Sheets("工作表名") SheetN 第N个工作表 ActiveSheet 活动工作表 worksheets 与 Sheets区别 (3)、 单元格(cells) Range ("单元格地址") Cells(行号,列号) [A1]单元格简写 Activecell 活动单元格 Selection 当前被选用区域 4:常量与变量 (1.)常量:常量是定义了之后就不做变化了。 常量定义格式:Const 常量名= 常量表达式 (2).变量:在定义之后还能再次赋值 变量定义格式:Dim 变量 As 变量类型 5:数据类型 (1.)VBA中常用数据类型: 类型 注释 简写 占用内存 Integer 整型 % 2Byte Single 单精度 ! 4Byte Double 双精度 # 8Byte Long 长整型 & 4Byte String 字符型 $ 定长或变长( 变长字符串最多可包括大概 20 亿 ( 2^31)个字符。 定长字符串可包括 1 到大概 64K ( 2^16 ) 个字符。) Currency 货币型 @ 8Byte 6:if条件语句 1.单行形式1(If...Then) If 条件判断 Then 条件成立成果 注意 在单行形式中,按照 If...Then 判断成果也可以执行多条语句。 所有语句必要在同一行上并且以冒号分开? 例子: Sub test() If 1 > 10 Then a = a + 1:b = 1 + a:c = 1 + b End Sub 2. 单行形式1(If 条件判断 Then 条件成立 Else 条件不成立) 例子: Sub test2() If 1 > 1 Then MsgBox "yes" Else MsgBox "no" End Sub 3.块形式(If...Then…End) If 条件判断 Then 条件成立成果 End If 例子: Sub test3() If 11 > 10 Then a = 1 + a b = 1 + a c = 1 + b End If End Sub 4.块形式If嵌套 If 条件判断 Then 成立时成果 ElseIf 条件判断 Then 成立时成果 …… Else 不成立时成果 End If 例子: Sub 级别判断() If Sheet1.Range("b1") >= 90 Then Sheet1.Range("b2") = "优" ElseIf Sheet1.Range("b1") >= 80 Then Sheet1.Range("b2") = "良" ElseIf Sheet1.Range("b1") >= 70 Then Sheet1.Range("b2") = "中" Else Sheet1.Range("b2") = "差" End If End Sub 7:select语句用于判断选取 Select case Case 1 Case 2 ….. Case else End select 8:循环语句 (1):do loop语句 Do ….. Loop (2):do while loop语句 Do while (条件成立时候循环) Loop (3)do until loop 语句 Do until (直到条件成立) Loop [注]:while与until不但可以放在DO背面,也可以放在LOOP背面事实上有时在循环最后一行进行判断,更具备意义。 Do [{While | Until} 表达式] [执行一条或多条语句] [Exit Do] [执行一条或多条语句] Loop --------------------------------------------------------------------------------- while:当这个条件为True时就 循环 until:直到这个条件为True时就 跳出循环 --------------------------------------------------------------------------------- 或者可以使用下面这种语法: Do [执行一条或多条语句] [Exit Do] [执行一条或多条语句] Loop [{While | Until}表达式] --------------------------------------------------------------------------------- 用Do…Loop循环要注意几点: 1. While与Until是放在Do背面还是Loop背面,取决于是先判断再循环,还是先循环再判断。前者则在Do背面,后者则在Loop背面。 2. 可以在Do...Loop中任何位置放置任意个数 Exit Do 语句,随时跳出 Do...Loop 循环。 3. Do...Loop + If...Then + Exit Do 普通结合使用. 4. 如果 Exit Do 使用在嵌套 Do...Loop 语句中,则 Exit Do 会将控制权转移到 Exit Do 所在位置外层循环。 (4):for each next 语句 Eg: Sub foreachnext循环1() Dim rng As Range,n! (range为单元格对象) For Each rng In Sheet1.Range("a2:a10") 取a2:a10中每个单元格 If rng = "A1" Then rng.Interior.ColorIndex = 3 Next End Sub Sub foreachnext循环2() Dim wsh As Worksheet,n As Byte,m As String (worksheet为工作表变量) For Each wsh In Worksheets 取当前工作表集合中每个成员 n = n + 1 Sheet1.Cells(n,3) = wsh.Name Next End Sub 9:exit语句与end语句 (1): exit是退出当前语句 1.Exit Do 2.Exit For 3.Exit Function 4.Exit Sub (2):结束一种过程或块 End End Function End If End Select End Sub [注]:end 有时候在某些地方功能和exit for作用相似。 10:跳转语句 GoTo line无条件地转移到过程中指定行。 Gosub return 跳转到某行,并且可以返回。 注意太多 GoTo 语句,会使程序代码不容易阅读及调试。尽量使用构造化控制语句(Do...Loop、For...Next、If...Then...Else、Select Case)。 For example Sub gotoreturn() Dim i! For i = 2 To 10 If Sheet1.Range("a" & i) > 1 / 3 Then GoSub 100 Next i Exit Sub 100: (作为gosub跳转标示符号) Sheet1.Range("b" & i) = "迟到" Return (return语句返回到跳转地方) End Sub 11:对错误语句解决 办法1: On Error Resume Next 当错误时候继续执行下去 办法2: On Error goto 当错误时候去哪儿。 12:with语句 当对某个对象执行一系列语句时,不用重复指出对象名称。 For example Sub with嵌套1() Range("a1").Value = "Who am i ?" Range("a1").Parent.Name = "Hello World" Range("a1").Font.Size = 20 Range("a1").Font.Bold = True End Sub Sub with嵌套2() With Range("a1") .Value = "Who am i ?" .Parent.Name = "Hello World" With .Font .Size = 20 .Bold = True End With End With End Sub 13:VBA 与公式 For example Sub 普通公式() Sheet1.Cells(1,3) = "=a1+b1" End Sub Sub 批量计算() Dim i As Integer For i = 1 To 10 Sheet1.Cells(i,4) = "=a" & i & "+b" & i Next i End Sub Sub 数组公式() Range("e1:e10").FormulaArray = "=a1:a10+b1:b10" (FormulaArray为数组公式) End Sub Sub 公式带引号计算() Cells(12,1) = "=COUNTIF(A1:A10,"">9"")" (如果公式当中具有引号,则需要添加双重引号,才可以使公式输入格式对的) Cells(12,2) = "=sum(INDIRECT(""a1:a10""))" End Sub 14:运算符 运算符是代表VBA某种运算功能符号。 1)赋值运算符 := 2)数学运算符:&(字符连接符)、+(加)、-(减)、Mod(取余)、\(整除)、*(乘)、/(除)、-(负号)、^(指数) 3)逻辑运算符:Not(非)、And(与)、Or(或)、Xor(异或 相似为0 ,不同为1)、Eqv(相等,相似为1,不同为0)、Imp(隐含) 4)关系运算符:= (相似)、<>(不等)、>(不不大于)、<(不大于)、>=(不不大于)、<=(不不不大于)、Like(判断两个字符串与否相似) ?:代表任何单一字符 *:代表零个或各种字符。 [charlist] :代表charlist.中任何单一字符? [!charlist] :代表不在 charlist 中任何单一字符。 第二章 工作簿以及工作表操作 1:VBA 中工作表与工作簿表达办法 1: workbooks(“工作表文献名”) Workbooks(“工作表文献名”).parent 返回工作簿对象父对象 2:工作簿引索号表达法 workbooks(数字).name 返回工作表名称 3:窗口表达办法 Windows.count 返回当前excel工作簿打开个数 Windows(N).parent.Name 返回第N个工作簿名称 [注:工作簿索引号表达法与窗口表达法表达工作簿顺序相反。] 2:当前工作簿与活动工作簿 当前工作簿:thisworkbook 代码所在工作簿 活动工作簿:activeworkbook 已经激活工作簿 [注]:当前工作簿也许是已经激活工作簿,也也许不是已经激活工作簿。 3:工作簿基本操作 workbooks由当前所有在内存中打开workbook对象构成集合 (1):.新建工作簿 Sub 新建工作簿() Dim wkb As Workbook 声明wkb为工作簿 Set wkb = Workbooks.Add 新建工作秒簿 wkb.SaveAs "c:\123.xls" 保存为工作簿 End Sub (2).打开工作簿 Sub 打开工作簿() Dim wkb As Workbook Set wkb = Workbooks.Open("c:\123.xls") End Sub (3).关闭工作簿 Sub 关闭() Workbooks("123").Close True (默以为自动保存,不提示) End Sub (4).文献复制与删除 Sub 文献复制与删除() FileCopy "c:\123.txt","c:\321.txt" (对所有文献类型都起作用) Kill "c:\321.txt" End Sub 4:工作薄应用实例 (1) 判断文献与否存在 Sub 文献与否存在() a = Dir("c:\123.xls") (Dir函数用来取出途径下目录文献) If a = "" Then MsgBox "不存在" Else MsgBox "存在" End If End Sub (2) 打开指定目录下文献 Sub 打开指定目录下文献() Dim a$,n!,wbs As Workbook a = Dir("c:\*.txt") Workbooks.Open "c:\" & a Do a = Dir If a <> "" Then Workbooks.Open "c:\" & a Else Exit Sub End If Loop End Sub 5:工作簿表达办法 在workbook对象中,有一种SHEETS集合,其成员是worksheet对象或chart对象。 worksheets仅指是工作表,而sheets包括图表,工作表,宏表等等 VBA中,经常在工作表之间转换或者对不同工作表中单元格区域进行操作. 普通有下面几种办法: (1):Sub 直接使用工作表名称法() MsgBox Worksheets("我工作表").Name MsgBox Sheets("我图表").Name End Sub (2)Sub 索引号表达法() MsgBox Worksheets(1).Name End Sub (3)Sub 工作表代码索引号表达法() MsgBox Sheets(1).Name End Sub (4)Sub 直接取工作代码法() MsgBox Sheet1.Name End Sub (5)Sub 活动工作表() MsgBox ActiveSheet.Name End Sub 注意:当工作簿涉及工作表、宏表、图表等时, 使用索引号引用工作表如Sheets(1)与 WorkSheets(1)引用也许不是同一种表。 Sub worksheetss() MsgBox Worksheets(1).Name MsgBox Sheets(1).Name End Sub Sub sheetss() For i = 1 To Sheets.Count MsgBox Sheets(i).Name Next End Sub 6:工作表集合应用 (1)Sub 遍历sheets下所有对象() For Each shs In Sheets k = k + 1 Cells(k,1) = shs.Name Next End Sub (2)Sub 遍历worksheets下所能对象() For Each shs In Worksheets k = k + 1 Cells(k,2) = shs.Name Next End Sub (3)Sub 工作表存在与否() Dim sn$ For Each sht In Sheets sn = sht.Name If sn = "我工作表" Then MsgBox "存在" Exit Sub End If Next MsgBox "不存在" End Sub (4)Sub 工作表存在与否1() Dim sn$ For i = 1 To Sheets.Count (Sheets.Count指sheet里面数量) a = Sheets(i).Name If Sheets(i).Name = "我工作表" Then MsgBox "存在" Exit Sub End If Next MsgBox "不存在" End Sub 7:工作表增长与删除 Sheets.Add 办法 表达式.Add(Before,After,Count,Type) XlSheetType 常量之一: xlWorksheet 工作表 xlChart 图表 xlExcel4MacroSheet 宏表 xlExcel4IntlMacroSheet 对话框 默认值为 xlWorksheet? Sub 新建sheets() Sheets.Add (默认在活动工作表之前添加一种工作表) Sheets.Add Sheets("abc") (在工作表名为ABC工作表之前添加一种工作表) Sheets.Add ,Sheets("abc") (在工作表名为ABC工作表之后添加一种工作表) Sheets.Add after:=Sheets("abc") (与上式等价) Sheets.Add Count:=2 (在活动工作表前添加两个工作表) Sheets.Add ,,2 (与上式等价) Sheets.Add ,,,xlChart (添加图表) End Sub Sub 删除工作表() Sheet10.Delete End Sub 8:工作表删除与添加 如果想批量新建工作表,可以成果循环来制作 Sub 新建1到12月份工作表() Dim j% For j = 12 To 1 Step -1 Sheets.Add.Name = j & "月" Next End Sub '删除工作表 Sub 删除sheet() On Error Resume Next (当浮现错误时候忽视错误) Application.DisplayAlerts = False (当屏幕有警告提示时候忽视启动) Dim i% For i = 1 To 12 Sheets(i & "月").Delete Next Application.DisplayAlerts = True (当屏幕有警告提示时候忽视关闭,否则,下次运营代码时候仍旧是忽视关闭状态) End Sub 9:工作表移动与复制 (1) 工作表复制 表达式.copy(Before,After) Sub 复制() Sheet1.Copy Sheets(Sheets.Count) End Sub (2) 工作表移动 '表达式.Move(Before,After) Sub 移动() Sheet1.Move ,Sheet3 End Sub 10:工作表选取与激活 Worksheet.Select 办法 不支持隐藏选用 Worksheet.Activate 办法 支持隐藏选用 (1): Sub 迅速选取所有工作表() Worksheets.Select (只选取工作表) Sheets.Select (工作表,图表等所有选取) End Sub (2):Sub 自定义选取() Worksheets(Array(1,3,5)).Select End Sub 11:拆分工作簿实例 Sub 拆分到工作簿() Dim wk As Workbook,ss$,k% 声明wk为一种工作簿类型变量 Application.DisplayAlerts = False For Each sht In Workbooks("2-11.工作簿综合运用(拆分工作簿)").Sheets Set wk = Workbooks.Add wk为一种对象,对象办法为添加工作表 k = k + 1 Workbooks(1).Sheets(k).Copy Workbooks(2).Sheets(1) ss = ThisWorkbook.Path & "\" & sht.Name & ".xlsx" wk.SaveAs ss wk.Close Next Application.DisplayAlerts = True MsgBox "拆分工作簿完毕!" End Sub 第三章:单元格区域操作 1:range对象 单元格对象在VBA中一种非常基本,同步也很重要。它表达方式也是非常多样化。 Range 对象 代表某一单元格、某一行、某一列、某一选定区域(该区域可包括一种或若干持续单元格区域),或者某一三维区域。 Range ("文本型装单元格地址") range常用写法 Sub rng() Range("a1").Select 单元格 Range("a:a").Select 列 Range("1:3").Select 行 Range("a1:b10").Select 相邻区域 Range("a1:d7,c4:e8").Select 不相个邻区域 Range("a1:d7 c4:e8").Select 相交区域 End Sub 2:range其她写法 Range("a1:b10").Select '普通写法 Range("a1","b10").Select '变化写法1 Range(Range("a1"),Range("b10")).Select '变化写法2 (以便后来可以使用变量替代) Range("a1") = 123 (给单元格赋值) 注意: 1.如果在range前没有指定工作表,则默以为活动工作表 2.如果对象不是活动工作表(如活动图表),则会浮现错误 Sub 单元格对象例子() Debug.Print Range("a:a").Count '计数工作表最大行数(Debug.Print意思是在活动窗口中显示出来) Debug.Print Range("1:1").Count '计算工作表最大列数 Debug.Print Application.CountA(Range("a:a")) '计算工作表已使用行数 Debug.Print Application.CountA(Range("1:1")) '计算工作表已使用列数 End Sub 3:range变量与引用 (1):range变化写法 1):range("地址区域").range("地址区域") Sub 序号表达法() Range("b2:d4").Range("b2").Select '相对引用写法 '参照前一种range左上单元格 End Sub 2):2.range地址区域中支持变量 Sub range变量支持() Dim a% a = 3 Range("a" & a).Select Range("c3:e5")(2).Select End Sub 3):动态引用实例 Sub 实例1动态选单元格或区域() Dim i% i = Application.CountA(Range("c:c")) '找到c列中已使用最后一种单元格位置 Range("c" & i).Select '选取C列最后一格 Range("a1","c" & i).Select '选取A1到C列最后一格(办法一) Range("a1:c" & i).Select '选取A1到C列最后一格(办法二) 小结:动态单元格区域定位,可以应用到单据保存等实际工作中 End Sub 4:Range引用与索引 range区域中每个单元格,咱们也可以用索引号表达出来 写法:range("单元格区域")(行号,列号) Sub 索引号取出range单元格() 'Range("a1:c4")(4).Select '引用顺序是:从左向右,从上到下选用 'Range("b2:c4")(3).Select '此前一种单元格区域为照 Range("a1:c4")(4.5).Select '当有小数时,则取整 '注意:如果索引号浮现小数,则按照“四舍六入五单双”“银行家舍入法” End Sub Sub 行列号定位() Range("a1:c4")(3,2).Select '运用行号与列号定位 Range("a1:c4")(1.5,2.5).Select '行列号也可以使用小数 5:cells单元格引用 cells单元格引用法 写法:cells(行号,列号) Sub cells基本写法() Cells(3,4).Select '行列号均为数字 Cells(2,"c").Select '行为数字,列为列标字母 Cells.Select '全选 End Sub 'cells可以像range同样可以参照前面单元格位置 Sub 参照写法() Range("b3:f11").Cells(2,2).Select Range("b3:f11").Cells(6).Select '从左到右,从上到下 Range("b3:f11")(6).Select '与上一句相等 End Sub '注意: '1.cells中数字同样支持正数,负数,0值,小数(四舍六入五单双) '2.cells不能像range同样可以引用一种区域,只能引用一种单元格 6:单元格简写 除了前面讲range\cells单元格区域表达办法还,还是一种简朴写法 '写法:[单元格地址] '注意:中括号中单元格地址并不需要双引号("") Sub 单元格简写() [a3].Select ' 单元格引用 [b2:c6].Select '单元格区域引用 [a3,b2:c6,b8:d12].Select '多区域引用 [a:a].Select '整列引用 [1:1].Select '整行引用 End Sub '单元格简写也支持引用子集 Sub 子集引用() [b2:c6].Item(3).Select Range("b2:c6")(3).Select [b2:c6].Cells(4).Select End Sub Sub 动态区域引用() a = Application.CountA([a:a]) b = Application.CountA([1:1]) Range(Range("a1"),Range(Chr(64 + b) & a)).Select '运用chr函数,让字母形式列号也支持变量 End Sub Sub chr函数字符循环() For i = 1 To 65535 Cells(i,1) = i Cells(i,2) = Chr(i) Next End Sub 7:三种单元格引用小结 功能 Range Cells [单元格地址] 引用对象 单元格,区域,行,列 单元格 单元格,区域,行,列 变量支持 支持 支持 不支持 书写难易 难 难 易 Range("a1:c" & i).Select '引用单元格是区域且有变量 Cells(i,"c").Select '引用是单个单元格且有变量 [a1:19].Select '引用是区域或单元格且无变量 8:行列引用 '行列引用 Sub 列引用() Columns(1).Select Columns("b").Select (b列) Columns("c:e").Select (c到e列) End Sub Sub 行引用() Rows(1).Select Rows("2").Select Rows("3:4").Select (3到4行) End Sub Sub range行列表式法() Range("1:1").Select (第一行) Range("2:4").Select (2到4行) Range("a:a").Select (a列) Range("b:d").Select (B到D列) End Sub Sub 简写法() [a:a].Select [b:d].Select [1:1].Select [2:4].Select End Sub Sub 全选() Rows.Select '选取所有行 Columns.Select '选取所有列 Cells.Select '选取所单元格 i = Rows.Count j = Columns.Count k = Cells.Count End Sub Sub 动态引用使用区域() a = Application.CountA(Columns(1)) (返回第一列当中使用(非空)单元格数目) b = Application.CountA(Rows(1)) (返回第一行中使用(非空)单元格数目) Range("a1",Cells(a,b)).Select (动态引用单元格) End Sub 9:row与column属性 Range.Row 属性 '返回区域中第一种子区域第一行行号 'Range.Column 属性 '返回指定区域中第一块中第一列列号 Sub test() i = Range("a3:b9").Range("a5").Row (返回A3到B9区域第一行第五列所在单元格位置真实行号) j = Range("a3:b9").Row i = Range("b3:d9").Range("a5").Column j = Range("b3:d9").Column End Sub 实例: Sub row应用() For Each rw In Rows("1:13") If rw.Row Mod 2 = 0 Then rw.RowHeight = 5 (将偶数行行高设立为5,其中mod为求余函数) End If Next rw End Sub 10:单元格地址与值 单元格值表达办法 Sub 单元格值表达() a = [a1].Value '实际是什么,就是什么 b = [a1].Text '看到是什么,就是什么 c = [a1] End Sub '注意:一种单元格可以省略value,多单元格区域不能省略 Sub 多区域赋值() Range("e1:e4") = Range("d1:d4").Value End Sub '单元格地址与引用 Sub 地址与引用() Set rng = [b2:f2] [a9] = rng.Address(1,1) '绝对引用 [b9]展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




VBA学习重点笔记专业资料.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/3032693.html