首页 VBA学习笔记共44页word资料

VBA学习笔记共44页word资料

举报
开通vip

VBA学习笔记共44页word资料如有侵权,请联系网站删除,仅供学习与交流【精品文档】第PAGE44页VBA学习笔记EXCEL之VBA学习笔记姓名:刘磊时间:2015年9目录TOC\o"1-3"\h\z\u第一章VBA基础知识PAGEREF_Toc430955941\h3第二章工作簿以及工作表的操作PAGEREF_Toc430955942\h9第三章:单元格区域操作PAGEREF_Toc430955943\h14第四章:事件程序:PAGEREF_Toc430955944\h36第五章:VBA数组PAGEREF_...

VBA学习笔记共44页word资料
如有侵权,请联系网站删除,仅供学习与交流【精品文档】第PAGE44页VBA学习笔记EXCEL之VBA学习笔记姓名:刘磊时间:2015年9目录TOC\o"1-3"\h\z\u第一章VBA基础知识PAGEREF_Toc430955941\h3第二章工作簿以及工作 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 的操作PAGEREF_Toc430955942\h9第三章:单元格区域操作PAGEREF_Toc430955943\h14第四章:事件程序:PAGEREF_Toc430955944\h36第五章:VBA数组PAGEREF_Toc430955945\h42第一章VBA基础知识1:代码帮助:F12:代码换行:下划线+空格+回车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整型%2ByteSingle单精度!4ByteDouble双精度#8ByteLong长整型&4ByteString字符型$定长或变长(变长字符串最多可包含大约20亿(2^31)个字符。定长字符串可包含1到大约64K(2^16)个字符。)Currency货币型@8Byte6:if条件语句1.单行形式1(If...Then)If条件判断Then条件成立结果注意在单行形式中,按照If...Then判断的结果也可以执行多条语句。所有语句必须在同一行上并且以冒号分开?例子:Subtest()If1>10Thena=a+1:b=1+a:c=1+bEndSub2.单行形式1(If条件判断Then条件成立Else条件不成立)例子:Subtest2()If1>1ThenMsgBox"yes"ElseMsgBox"no"EndSub3.块形式(If...Then…End)If条件判断Then条件成立结果EndIf例子:Subtest3()If11>10Thena=1+ab=1+ac=1+bEndIfEndSub4.块形式的If嵌套If条件判断Then成立时的结果ElseIf条件判断Then成立时的结果Else不成立时的结果EndIf例子:Sub等级判断()IfSheet1.Range("b1")>=90ThenSheet1.Range("b2")="优"ElseIfSheet1.Range("b1")>=80ThenSheet1.Range("b2")="良"ElseIfSheet1.Range("b1")>=70ThenSheet1.Range("b2")="中"ElseSheet1.Range("b2")="差"EndIfEndSub7:select语句用于判断选择SelectcaseCase1Case2CaseelseEndselect8:循环语句(1):doloop语句DoLoop(2):dowhileloop语句Dowhile(条件成立时候循环)Loop(3)dountilloop语句Dountil(直到条件成立)Loop[注]:while与until不但可以放在DO后面,也可以放在LOOP后面事实上有时在循环的最后一行进行判断,更具有意义。Do[{While|Until}表达式][执行的一条或多条语句][ExitDo][执行的一条或多条语句]Loopwhile:当这个条件为True时就循环until:直到这个条件为True时就跳出循环或者可以使用下面这种语法:Do[执行的一条或多条语句][ExitDo][执行的一条或多条语句]Loop[{While|Until}表达式]用Do…Loop循环要注意的几点:1.While与Until是放在Do后面还是Loop后面,取决于是先判断再循环,还是先循环再判断。前者则在Do后面,后者则在Loop后面。2.可以在Do...Loop中的任何位置放置任意个数的ExitDo语句,随时跳出Do...Loop循环。3.Do...Loop+If...Then+ExitDo通常结合使用.4.如果ExitDo使用在嵌套的Do...Loop语句中,则ExitDo会将控制权转移到ExitDo所在位置的外层循环。(4):foreachnext语句Eg:Subforeachnext循环1()DimrngAsRange,n!(range为单元格对象)ForEachrngInSheet1.Range("a2:a10")取a2:a10中的每个单元格NextEndSubSubforeachnext循环2()DimwshAsWorksheet,nAsByte,mAsString(worksheet为工作表变量)ForEachwshInWorksheets取当前工作表集合中的每个成员n=n+1Sheet1.Cells(n,3)=wsh.NameNextEndSub9:exit语句与end语句(1):exit是退出当前语句1.ExitDo2.ExitFor3.ExitFunction4.ExitSub(2):结束一个过程或块EndEndFunctionEndIfEndSelectEndSub[注]:end有时候在某些地方的功能和exitfor的作用相同。10:跳转语句GoToline无条件地转移到过程中指定的行。Gosubreturn跳转到某行,而且能够返回。注意太多的GoTo语句,会使程序代码不容易阅读及调试。尽可能使用结构化控制语句(Do...Loop、For...Next、If...Then...Else、SelectCase)。ForexampleSubgotoreturn()Dimi!Fori=2To10IfSheet1.Range("a"&i)>1/3ThenGoSub100NextiExitSub100:(作为gosub的跳转标示符号)Sheet1.Range("b"&i)="迟到"Return(return语句返回到跳转的地方)EndSub11:对错误语句的处理方法1:OnErrorResumeNext当错误的时候继续执行下去方法2:OnErrorgoto当错误时候去哪儿。12:with语句当对某个对象执行一系列的语句时,不用重复指出对象的名称。ForexampleSubwith嵌套1()Range("a1").Value="Whoami?"Range("a1").Parent.Name="HelloWorld"Range("a1").Font.Size=20Range("a1").Font.Bold=TrueEndSubSubwith嵌套2()WithRange("a1").Value="Whoami?".Parent.Name="HelloWorld"With.Font.Size=20.Bold=TrueEndWithEndWithEndSub13:VBA与公式ForexampleSub普通公式()Sheet1.Cells(1,3)="=a1+b1"EndSubSub批量计算()DimiAsIntegerFori=1To10Sheet1.Cells(i,4)="=a"&i&"+b"&iNextiEndSubSub数组公式()Range("e1:e10").FormulaArray="=a1:a10+b1:b10"(FormulaArray为数组公式)EndSubSub公式带引号的计算()Cells(12,1)="=COUNTIF(A1:A10,"">9"")"(如果公式当中含有引号,则需要添加双重引号,才能够使公式的输入格式正确)Cells(12,2)="=sum(INDIRECT(""a1:a10""))"EndSub14:运算符运算符是代表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新建工作簿()DimwkbAsWorkbook声明wkb为工作簿Setwkb=Workbooks.Add新建工作秒簿wkb.SaveAs"c:\123.xls"保存为工作簿EndSub(2).打开工作簿Sub打开工作簿()DimwkbAsWorkbookSetwkb=Workbooks.Open("c:\123.xls")EndSub(3).关闭工作簿Sub关闭()Workbooks("123").CloseTrue(默认为自动保存,不提示)EndSub(4).文件复制与删除Sub文件复制与删除()FileCopy"c:\123.txt","c:\321.txt"(对所有文件类型都起作用)Kill"c:\321.txt"EndSub4:工作薄的应用实例判断文件是否存在Sub文件是否存在()a=Dir("c:\123.xls")(Dir函数用来取出路径下的目录文件)Ifa=""ThenMsgBox"不存在"ElseMsgBox"存在"EndIfEndSub打开指定目录下的文件Sub打开指定目录下的文件()Dima$,n!,wbsAsWorkbooka=Dir("c:\*.txt")Workbooks.Open"c:\"&aDoa=DirIfa<>""ThenWorkbooks.Open"c:\"&aElseExitSubEndIfLoopEndSub5:工作簿的表示方法在workbook对象中,有一个SHEETS集合,其成员是worksheet对象或chart对象。worksheets仅指的是工作表,而sheets包含图表,工作表,宏表等等VBA中,经常在工作表之间转换或者对不同工作表中的单元格区域进行操作.通常有下面几种方法:(1):Sub直接使用工作表名称法()MsgBoxWorksheets("我的工作表").NameMsgBoxSheets("我的图表").NameEndSub(2)Sub索引号表示法()MsgBoxWorksheets(1).NameEndSub(3)Sub工作表代码索引号表示法()MsgBoxSheets(1).NameEndSub(4)Sub直接取工作代码法()MsgBoxSheet1.NameEndSub(5)Sub活动工作表()MsgBoxActiveSheet.NameEndSub注意:当工作簿包括工作表、宏表、图表等时,使用索引号引用工作表如Sheets(1)与WorkSheets(1)引用的可能不是同一个表。Subworksheetss()MsgBoxWorksheets(1).NameMsgBoxSheets(1).NameEndSubSubsheetss()Fori=1ToSheets.CountMsgBoxSheets(i).NameNextEndSub6:工作表集合的应用(1)Sub遍历sheets下的所有对象()ForEachshsInSheetsk=k+1Cells(k,1)=shs.NameNextEndSub(2)Sub遍历worksheets下的所能对象()ForEachshsInWorksheetsk=k+1Cells(k,2)=shs.NameNextEndSub(3)Sub工作表存在与否()Dimsn$ForEachshtInSheetssn=sht.NameIfsn="我的工作表"ThenMsgBox"存在"ExitSubEndIfNextMsgBox"不存在"EndSub(4)Sub工作表存在与否1()Dimsn$Fori=1ToSheets.Count(Sheets.Count指sheet里面的数量)a=Sheets(i).NameIfSheets(i).Name="我的工作表"ThenMsgBox"存在"ExitSubEndIfNextMsgBox"不存在"EndSub7:工作表的增加与删除Sheets.Add方法表达式.Add(Before,After,Count,Type)XlSheetType常量之一:xlWorksheet工作表xlChart图表xlExcel4MacroSheet宏表xlExcel4IntlMacroSheet对话框默认值为xlWorksheet?Sub新建sheets()Sheets.Add(默认在活动工作表之前添加一个工作表)Sheets.AddSheets("abc")(在工作表名为ABC的工作表之前添加一个工作表)Sheets.Add,Sheets("abc")(在工作表名为ABC的工作表之后添加一个工作表)Sheets.Addafter:=Sheets("abc")(与上式等价)Sheets.AddCount:=2(在活动工作表前添加两个工作表)Sheets.Add,,2(与上式等价)Sheets.Add,,,xlChart(添加图表)EndSubSub删除工作表()Sheet10.DeleteEndSub8:工作表的删除与添加如果想批量新建工作表,可以结果循环来制作Sub新建1到12月份的工作表()Dimj%Forj=12To1Step-1NextEndSub'删除工作表Sub删除sheet()OnErrorResumeNext(当出现错误时候忽略错误)Application.DisplayAlerts=False(当屏幕有警告提示时候忽略开启)Dimi%Fori=1To12Sheets(i&"月").DeleteNextApplication.DisplayAlerts=True(当屏幕有警告提示时候忽略关闭,否则,下次运行代码时候依旧是忽略关闭状态)EndSub9:工作表的移动与复制工作表的复制表达式.copy(Before,After)Sub复制()Sheet1.CopySheets(Sheets.Count)EndSub工作表的移动'表达式.Move(Before,After)Sub移动()Sheet1.Move,Sheet3EndSub10:工作表的选择与激活Worksheet.Select方法不支持隐藏选取Worksheet.Activate方法支持隐藏选取(1):Sub快速选择所有工作表()Worksheets.Select(只选择工作表)Sheets.Select(工作表,图表等全部选择)EndSub(2):Sub自定义选择()Worksheets(Array(1,3,5)).SelectEndSub11:拆分工作簿实例Sub拆分到工作簿()DimwkAsWorkbook,ss$,k%声明wk为一个工作簿类型变量Application.DisplayAlerts=FalseForEachshtInWorkbooks("2-11.工作簿综合运用(拆分工作簿)").SheetsSetwk=Workbooks.Addwk为一个对象,对象的方法为添加工作表k=k+1Workbooks(1).Sheets(k).CopyWorkbooks(2).Sheets(1)ss=ThisWorkbook.Path&"\"&sht.Name&".xlsx"wk.SaveAssswk.CloseNextApplication.DisplayAlerts=TrueMsgBox"拆分工作簿完成!"EndSub第三章:单元格区域操作1:range对象单元格对象在VBA中一个非常基础,同时也很重要的。它的表达方式也是非常的多样化。Range对象代表某一单元格、某一行、某一列、某一选定区域(该区域可包含一个或若干连续单元格区域),或者某一三维区域。Range("文本型装单元格地址")range的常见写法Subrng()Range("a1").Select单元格Range("a:a").Select列Range("1:3").Select行Range("a1:b10").Select相邻区域Range("a1:d7,c4:e8").Select不相个邻区域Range("a1:d7c4:e8").Select相交的区域EndSub2:range的其他写法Range("a1:b10").Select'一般写法Range("a1","b10").Select'变化写法1Range(Range("a1"),Range("b10")).Select'变化写法2(方便以后可以使用变量替换)Range("a1")=123(给单元格赋值)注意:1.如果在range前没有指定工作表,则默认为活动工作表2.如果对象不是活动工作表(如活动图表),则会出现错误Sub单元格对象例子()Debug.PrintRange("a:a").Count'计数工作表最大的行数(Debug.Print意思是在活动窗口中显示出来)Debug.PrintRange("1:1").Count'计算工作表最大的列数Debug.PrintApplication.CountA(Range("a:a"))'计算工作表已使用的行数Debug.PrintApplication.CountA(Range("1:1"))'计算工作表已使用的列数EndSub3:range变量与引用(1):range的变化写法1):range("地址区域").range("地址区域")Sub序号表示法()Range("b2:d4").Range("b2").Select'相对引用的写法'参照前一个range的左上单元格EndSub2):2.range地址区域中支持变量Subrange的变量支持()Dima%a=3Range("a"&a).SelectRange("c3:e5")(2).SelectEndSub3):动态引用实例Sub实例1动态选单元格或区域()Dimi%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列的最后一格(方法二)小结:动态单元格区域的定位,可以应用到单据的保存等实际工作中EndSub4:Range引用与索引range区域中的每个单元格,我们也可以用索引号表示出来写法:range("单元格区域")(行号,列号)Sub索引号取出range的单元格()'Range("a1:c4")(4).Select'引用顺序是:从左向右,从上到下选取'Range("b2:c4")(3).Select'以前一个单元格区域为照Range("a1:c4")(4.5).Select'当有小数时,则取整'注意:如果索引号出现小数,则按照“四舍六入五单双”的“银行家舍入法”EndSubSub行列号定位()Range("a1:c4")(3,2).Select'利用行号与列号定位Range("a1:c4")(1.5,2.5).Select'行列号也可以使用小数5:cells单元格的引用cells单元格引用法写法:cells(行号,列号)Subcells基本写法()Cells(3,4).Select'行列号均为数字Cells(2,"c").Select'行为数字,列为列标字母Cells.Select'全选EndSub'cells可以像range一样可以参照前面的单元格位置Sub参照写法()Range("b3:f11").Cells(2,2).SelectRange("b3:f11").Cells(6).Select'从左到右,从上到下Range("b3:f11")(6).Select'与上一句相等EndSub'注意:'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'整行引用EndSub'单元格简写的也支持引用子集Sub子集引用()[b2:c6].Item(3).SelectRange("b2:c6")(3).Select[b2:c6].Cells(4).SelectEndSubSub动态区域的引用()a=Application.CountA([a:a])b=Application.CountA([1:1])Range(Range("a1"),Range(Chr(64+b)&a)).Select'利用chr函数,让字母形式的列号也支持变量EndSubSubchr函数字符循环()Fori=1To65535Cells(i,1)=iCells(i,2)=Chr(i)NextEndSub7:三种单元格引用小结功能RangeCells[单元格地址]引用对象单元格,区域,行,列单元格单元格,区域,行,列变量支持支持支持不支持书写难易难难易Range("a1:c"&i).Select'引用单元格是区域且有变量Cells(i,"c").Select'引用的是单个单元格且有变量[a1:19].Select'引用的是区域或单元格且无变量8:行列的引用'行列引用Sub列引用()Columns(1).SelectColumns("b").Select(b列)Columns("c:e").Select(c到e列)EndSubSub行引用()Rows(1).SelectRows("2").SelectRows("3:4").Select(3到4行)EndSubSubrange行列表式法()Range("1:1").Select(第一行)Range("2:4").Select(2到4行)Range("a:a").Select(a列)Range("b:d").Select(B到D列)EndSubSub简写法()[a:a].Select[b:d].Select[1:1].Select[2:4].SelectEndSubSub全选()Rows.Select'选择所有行Columns.Select'选择所有列Cells.Select'选择所单元格i=Rows.Countj=Columns.Countk=Cells.CountEndSubSub动态引用使用区域()a=Application.CountA(Columns(1))(返回第一列当中使用的(非空)单元格数目)b=Application.CountA(Rows(1))(返回第一行中使用的(非空)单元格数目)Range("a1",Cells(a,b)).Select(动态引用单元格)EndSub9:row与column属性Range.Row属性'返回区域中第一个子区域的第一行的行号'Range.Column属性'返回指定区域中第一块中的第一列的列号Subtest()i=Range("a3:b9").Range("a5").Row(返回A3到B9区域的第一行第五列所在单元格位置的真实行号)j=Range("a3:b9").Rowi=Range("b3:d9").Range("a5").Columnj=Range("b3:d9").ColumnEndSub实例:Subrow应用()ForEachrwInRows("1:13")Ifrw.RowMod2=0Thenrw.RowHeight=5(将偶数行的行高设置为5,其中mod为求余函数)EndIfNextrwEndSub10:单元格的地址与值单元格的值表示方法Sub单元格值表示()a=[a1].Value'实际是什么,就是什么b=[a1].Text'看到是什么,就是什么c=[a1]EndSub'注意:一个单元格可以省略value,多单元格区域不能省略Sub多区域赋值()Range("e1:e4")=Range("d1:d4").ValueEndSub'单元格地址与引用Sub地址与引用()Setrng=[b2:f2][a9]=rng.Address(1,1)'绝对引用[b9]=rng.Address(0,0)'相对引用[c9]=rng.Address(1,0)'混合引用[d9]=rng.Address(0,1)'混合引用EndSub'总结:1代表固定(绝对引用),0代表不固定,默认是绝对引用Sub地址引用实例()'将表三成绩中为空的单元格标为未考DimrngAsRange,rn$OnErrorResumeNextForEachrngInSheet3.Range("b2:d10")Ifrng=""Thenrn=rn&rng.Address&","NextRange(Left(rn,Len(rn)-1))="未考"(left函数返回从左开始取字符串中,Len(rn)–1长度个字符)EndSub11:单元格的移动与复制'将单元格区域剪切到指定的区域'将单元格区域复制到指定的区域(会复制该单元格的值和格式)Sub移动复制()Range("a1:d8").CutRange("f1")Range("f1:i8").CopyRange("a1")EndSub(利用单元格赋值的方法也可以完成复制操作,在此方法中只会复制单元格的值,不会复制格式)Sub另类复制方法()Range("a10:d17")=Range("a1:d8").ValueEndSub'注:'2.被赋值的区域格式全部去掉12:工作表中单元格的删除与插入'工作表中单元格,行与列的插入与删除Sub插入()Rows(2).InsertEndSubSub隔行插入()Dimr%Dor=r+2Rows(r).InsertLoopUntilCells(r+1,1)=""EndSubSub删除()Rows(1).DeleteEndSubSub隔行删除()Dimr,sm=Application.CountA(Columns(1))Forr=1Tom/2Rows(r).DeleteNextEndSub13:活动单元格与选择区域活动单元格:activecell,工作表中活动单元格只有一个Subactivecells()a=activecell.Address'取得活动单元格地址Cells(2,3).Activate'激活指定单元格EndSub'selection光标所选区域Sub光标所选区域()Selection=1(光标所选区域的每一个单元格的值赋为1)EndSubSub在selection中的改变活单元格()Fori=1ToSelection.CountSelection(i).Activate(激活所选区域单元格)NextEndSubSub运用()DimiAsRangeForEachiInSelectionIfi=""Ori="缺勤"Theni="×"EndIfNextiEndSub'小结:selection的好处在于,可以很自由灵活选择你想要处理的单元格区域14:UsedRange已使用区域(条件统计)'Worksheet.UsedRange属性'返回一个Range对象,该对象表示指定工作表上所使用的区域Sub已使用区域()EndSub'注意:'已使用区域的定位方法是:已使用的最小单元格:最大单元格'如果单元格中无内容,但设定了格式,也认为是已使用区域'如果没有已使用单元格,则默认为A1单元Subusedrange应用()ForEachRngInSheet1.UsedRangeIfIsNumeric(Rng)AndRng>=90Thenk=k+1NextRngMsgBox"大于等于90分的人数为:"&k&"人"EndSub'小结:'1.usedrange自动计算已用区域的所有值'2.不用当数据增加时的处理问题。'3.比selection方便,但不够灵活15:currentregion属性'Range.CurrentRegion属性'返回一个Range对象,该对象表示当前区域。(返回以当前单元格说扩展后的单元格区域)Sub当前区域()[a1].CurrentRegion.Select[f8].CurrentRegion.SelectEndSubSubcurrentregion应用()Rows(8).Cleara=[b2].CurrentRegion.Addressb=[b5].CurrentRegion.Addressc=[b2].CurrentRegion.Count+1Setc=Range("b8",Cells(8,c))c.FormulaArray="="&a&"+"&b(此为一数组公式,formulaArray为数组公式)EndSub'usedrange与currentregion'如果表中只有一个区域,两者最后的结果是一样的'只是表达方式不一样Subu与c()[a1].CurrentRegion.SelectEndSub16:单元格的offset(偏移)属性'Range.Offset属性'返回Range对象,它代表位于指定单元格区域的一定的偏移量位置上的区域。'表达式.Offset(偏移行,偏移列)'表达式一个代表Range对象的变量。'偏移行列的数字可以是:正数,负数,零值Subtest()[a1].Offset(1,2).Select'行列都偏移[a1].Offset(2).Select'只偏移行[a1].Offset(,2).Select'只偏移列'如果offset前面的range对象是一个区域,则偏移后也结果尺寸不变[a1:d1].Offset(1,2).Select[a1:d1].Offset(2).Select[a1:d1].Offset(,2).SelectEndSubSuboffset应用1()Dimi%Fori=2To8Step2[a1:e1].Copy[a1:e1].Offset(i)NextiEndSubSuboffset应用2()Dimi%Fori=2To8Step2[a1:e1].Offset(i)=""NextiEndSub17:单元格的resize属性(单据数据保存)'Range.Resize属性'调整指定区域的大小。返回Range对象,该对象代表调整后的区域。'语法'表达式.Resize(行数,列数)'表达式一个返回Range对象的表达式。Subtest()[a1].Resize(2,3).Select[a1].Resize(2).Select[a1].Resize(,3).SelectEndSubSub保存()Dimi%,j%,k%k=Application.CountA(Sheet2.Columns(1))[a2].Resize(i,j).CopySheet2.[a1].Offset(k)EndSub18:单元格所在的行和列'Range.EntireRow属性'返回一个Range对象,该对象表示包含指定区域的整行(或多行)。'语法'表达式.EntireRow'表达式一个代表Range对象的变量。'Range.EntireColumn属性'返回一个Range对象,该对象表示包含指定区域的整列(或多列)'语法'表达式.EntireColumn'表达式一个代表Range对象的变量。Subtest()[a1].EntireRow.Select[a1].EntireColumn.Select[a1:a4].EntireRow.Select[a1:d1].EntireColumn.SelectEndSubSubtest1()DimrngAsRange,adsAsStringForEachrngIn[a1:a10]Ifrng=""Thenad=ad&rng.Address&","Nextads=Left(ad,Len(ad)-1)Range(ads).EntireRow.DeleteEndSub19:定位条件'Range.SpecialCells方法'返回一个Range对象,该对象代表与指定类型和值匹配的所有单元格。'语法'表达式.SpecialCells(Type,Value)'表达式一个代表Range对象的变量。Sub批注汇总()MsgBoxApplication.Sum(Selection.SpecialCells(-4144))EndSubSub删除空行()OnErrorGoTo100Selection.SpecialCells(xlCellTypeBlanks).SelectSelection.EntireRow.DeleteExitSub100:MsgBox"没有空行"EndSub20:find查找方法'Range.Find方法'在区域中查找特定信息'语法'表达式.Find(What,After,LookIn,LookAt,SearchOrder,SearchDirection,MatchCase,MatchByte,SearchFormat)'表达式一个代表Range对象的变量。Sub查找最后一个单元格()Setendrng=Cells.Find("*",,xlFormulas,,,xlPrevious)Range([a1],endrng).SelectEndSubMatchByteTRUE:区分(打勾)FLASE:不区分(不打勾)21:find查找系统Sub查询系统()ends=Columns(1).Find("*",,,,,searchdirection:=xlPrevious).Row'动态找到A列的最后一个单元格Range("g3:l999").Clear'清除之前所有的筛选结果ForEachRngInRange("a2:a"&ends)m=m+1IfRngLikeRange("h1")Then'如果条件成立,那么k=k+1Range("a"&m+1&":e"&m+1).CopyRange("g"&k+2)'将记录复制到另一个区域EndIfNextEndSub22:进销存之入库单Sub开单()Setes=Cells.Find("*",,xlFormulas,,,xlPrevious)a=es.Address[b2]="SM"&Format(Now(),"ymdhms")Range([a5],es.Offset(4))=""[e2]=""EndSubSub保存()OnErrorGoTo100DimesAsRange,a%IfSheet2.[f:f].Find([b2])=[b2]ThenMsgBox"已经保存过了!"Else100:Setes=Cells.Find("*",,xlFormulas,,,xlPrevious)a=Application.CountA(Sheet2.[a:a])Ifes.Row=4ThenMsgBox"没有填写内容":EndRange([a5],es).CopySheet2.Cells(a+1,1)Sheet2.Cells(a+1,"f").Resize(es.Row-4)=[b2]'保存入库单Sheet2.Cells(a+1,"g").Resize(es.Row-4)=[e2]'保存供应商Sheet2.Cells(a+1,"h").Resize(es.Row-4)=Now()'保存日期时间MsgBox"保存成功!"EndIfEndSubSub计算()Setes=Columns(3).Find("*",,xlFormulas,,,xlPrevious)ForEachRngInRange([c5],es)Rng.Offset(0,2)=Rng.Offset(0,1)*RngNextEndSub23:单元格end属性Sub宏5()Selection.End(xlDown).SelectSelection.End(xlToRight).SelectSelection.End(xlUp).SelectSelection.End(xlToLeft).SelectEndSubSub分期付款最后月()i=Cells(Rows.Count,1).End(xlUp).Row'找到A列的最后一行的行号Range("n2",Cells(i,"n"))=""'将最后付款月下的区域清空Forj=2Toik=Cells(j,"n").End(xlToLeft).Column'找到最后付款月所在的列号Cells(j,"n")=Cells(1,k)'将对应的月份填入对应的单元格NextjEndSub24:查找最后一个单元格的N种方法'这里讨论怎样找到最后一个单元格!'不考虑最后量个单元格是:是公式,错误值,隐藏之类的特殊情况。'以最后是一个常规的值为准。且以A列的最后一个单元格为准Sub最后的单元格()a=Cells(Rows.Count,1).End(xlUp).Row'end属性b=Columns(1).Find("*",,,,,xlPrevious).Row'find方法c=Cells.SpecialCells(xlCellTypeLastCell).Row'specialcells方法f=WorksheetFunction.CountA([a:a])'工作表函数countag=Application.CountIf([a:a],"<>")'工作表函数countifEndSub25:单元格的合并'Application.Union方法'返回两个或多个区域的合并区域Subtest()Range("a1:b3,c5:d8").Select'文本地址引用方式Union([a1:b3],[c5:d8]).Select'单元格区域引用方式EndSub'小结:虽然range也可以完成多区域的引用'但文本地址的引用方式最多不能超过256个字符'而union却没有这个限制'我们经常利用变量与union进行单元格的连接Sub连接符单元格连接()DimrngAsRangeForEachrngsIn[b2:b10]adss=rngs.Addressads=ads&rngs.Address&","Nextad=Left(ads,Len(ads)-1)EndSubSubunion单元格连接()DimrngAsRange,rngsAsRangeSetrng=[b2]ForEachrngsIn[b2:b10]adss=rngs.AddressSetrng=Union(rng,rngs)ads=rng.AddressNextEndSub26:单元格的交集'Application.Intersect方法'返回一个Range对象,该对象表示两个或多个区域重叠的矩形区域。Subtest()IfIntersect([a1:d10],Selection)IsNothingThen'注释:IsNothing用于判断对象是否存在,对象可以是工作簿,工作表,单元格区域等MsgBox"没有交集"ElseMsgBoxIntersect([a1:d10],Selection).AddressIntersect([a1:d10],Selection).SelectEndIfEndSubSub隔行插入()Fori=0ToApplication.CountA(Columns(1))*2Step2Intersect([a1:d2].Offset(i),[a2:d3].Offset(i)).EntireRow.InsertNextEndSub27:单元格数字格式的设置代码'Range.NumberFormatLocal属性Sub获取单元格设置数字格式()ForEachRngIn[a1:a3]Cells(Rng.Row,2)=Rng.NumberFormatLocal'获取单元格的格式代码NextRngEndSubSub给单元格设置数字格式()ForEachRngIn[a1:a3]Rng.NumberFormatLocal="0.00"NextRngEndSubSub保存1111()Setes=Cells.Find("*",,xlFormulas,,,xlPrevious)a=Application.CountA(Worksheets("记录保存").[a:a])Range([a5],es).CopyWorksheets("记录保存").Cells(a+1,1)WithWorksheets("记录保存").Cells(a+1,"f").Resize(es.Row-4)=[b2]'保存入库单.Cells(a+1,"g").Resize(es.Row-4)=[e2]'保存供应商.Cells(a+1,"h").Resize(es.Row-4)=Now()'保存日期时间.Cells(a+1,"h").Resize(es.Row-4).NumberFormatLocal="e-m-daaaa"EndWithMsgBox"保存成功!"EndSub28:单元格字体格式设置代码实现'Font对象'包含对象的字体属性(字体名称、字号、颜色等等)。'Range.ClearFormats方法'清除对象的格式设置'常见font对象的属性Subfont对象属性()With[a2:a6].Font.Name="微软雅黑"'字体.Size=8'字号.Bold=True'加粗.Color=RGB(255,0,255)'颜色EndWithEndSubSub大于90分的颜色设置为红色()Seti=Cells(Rows.Count,3).End(xlUp)Range([b2],i).ClearFormatsForEachRngInRange([b2],i)IfRng.Value>=[f1]ThenWithRng.Font.Name="华文琥珀".Size=20.Bold=True.Color=RGB(255,0,0)EndWithEndIfNextRngEndSub29:底纹颜色的设置'Interior对象'代表一个对象的内部'针对interior对象,我们用得最多的是它的颜色,下面就来讨论一下。Sub索引颜色值()Fori=1To56Cells(i,1).Interior.ColorIndex=iCells(i,2)=iNextiEndSubSub早期颜色值()Fori=0To15Cells(i+1,1).Interior.Color=QBColor(i)Cells(i+1,2)=iNextiEndSubSub三原色颜色值()Cells(2,4).Interior.Color=RGB([a1],[b1],[c1])EndSubSub直接颜色值()'此颜色有255^3种颜色Cells(1,1).Interior.Color=[b1]EndSub30:单元格格式设置实例Sub格式化工资条()Dimi%i=Cells(Rows.Count,1).End(xlUp).RowForj=1ToiIfjMod2ThenWithCells(j,1).EntireRow.Range("a1:g1").Font.Bold=True.Size=8.ColorIndex=56EndWithElseWithCells(j,1).EntireRow.Range("a1:g1").Interior“以本行第一个单元格为坐标的A1:G1”区域.ColorIndex=40EndWithEndIfNextjEndSubSub清除格式化()Selection.ClearFormatsEndSub31:利用查找颜色功能拾取颜色求平均Sub根据查找功能拾取的颜色求平均()OnErrorGoTo100DimerngAsRange,rngAsRange,iAsLongSeterng=Cells(Rows.Count,"e").End(xlUp)ForEachrngInRange([b2],erng)NextMsgBox"最后平均分为:"&k/n&"分"End100:MsgBox"查找功能没有拾取到颜色!"EndSub32:粘贴OptionExplicit'Worksheet.Paste方法'将“剪贴板”中的内容粘贴到工作表上。'表达式.Paste(Destination,Link)'表达式一个代表Worksheet对象的变量。Sub粘贴()Range("B1:B6").CopyRange("c9")Range("B1:B6").Copy'复制区域无公式Sheet1.PasteRange("c9")'粘贴到c4单元格EndSubSub粘贴2()Range("c1:c6").Copy'复制单元格有公式Sheet3.Paste'如果不指定Destination参数,则在使用该方法之前必须选择目标区域。EndSubSub粘贴1()Range("c1:C6").Copy'复制c1单元格Sheet3.Paste,True'Application.CutCopyMode=TrueEndSub33:选择性粘贴OptionExplicit'Range.PasteSpecial方法'将Range从剪贴板粘贴到指定的区域中。'语法'表达式.PasteSpecial(Paste,Operation,SkipBlanks,Transpose)'表达式一个代表Range对象的变量。Sub选择怪粘贴()Range("c2:c10").CopyRange("d2").PasteSpecial12EndSubSub选择怪粘贴运算()Range("b2:b9").CopyRange("d2").PasteSpecial,2Range("c2:c9").CopyRange("d2").PasteSpecial,2EndSubSub选择怪粘贴跳过空单元()Range("b2:b9").CopyRange("e2").PasteSpecial,,TrueEndSubSub选择性粘贴转置()Range("a2:b9").CopyRange("a11").PasteSpecial1
本文档为【VBA学习笔记共44页word资料】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
美丽的老师
暂无简介~
格式:doc
大小:622KB
软件:Word
页数:43
分类:初中语文
上传时间:2022-01-23
浏览量:0