您好,欢迎访问三七文档
VBA:VisualBasicforApplicationsVBA必须依赖于父应用程序(excel)VBE(vba编辑界面)打开方法alt+F11Excel2003打开VBE方法Excel2007打开VBE方法VBE编辑界面立即窗口:可以直接输入代码进行调试。本地窗口:各个变量的值。工程窗口:显示工程的树状结构。注释:'我是一个注释批量注释:用于对多行代码同时注释全部运行:F5逐句运行:F8调试打印:可以在程序执行的时候,在立即窗口打印需要的内容Debug.PrintSheet2.Name打印sheet2的标签名字常见对象:工作簿Workbooks(N):第N个工作簿Workbooks(book1)ThisWorkbook当前工作簿ActiveWorkbook激活的工作簿工作表Worksheets(N)Worksheets(sheet1)SheetNActiveSheet单元格Cells(3,2)三行2列Range(a2)A2是地址[a4]=-3相当于Range(a4)=-3ActiveCell表示选中的单元格的内容Selection选中的范围可以用如下方式,显示选中范围的第几个数值Selection.Cells(4)以上的结果为33对象的属性MsgBoxSheet1.Name//获取属性Sheet2.Name=ohshit//对属性进行赋值对象的方法例如选择,赋值,删除。Range(a1:b10).Select选择Selection.Delete删除Range(a1:b10).CopySheet2.Range(a1)复制Range(b11:c20)=fuck对范围赋值常量:Constpi=3.14pi=2这句报错,不许给常量赋值变量:DimiAsInteger%2byteDimlonAsLong&4byteDimsiAsSingle!4byteDimdouAsDouble#8byteDimsAsString$DimcAsCurrency@8byteVba允许不声明变量,默认为Variant(变体变量)一行定义多个变量,用逗号隔开即可dimi$,b&,c%IF语句'单行写法Ifa20Then[b2]=good'多行写法Ifa20Then[b2]=shitEndIf'ifesleIfa20Then[b2]=yesElse[b2]=noEndIf'多条件判断Ifa20Then[b2]=verybadElseIfa40Then[b2]=badElseIfa60Then[b2]=normalElse[b2]=goodEndIf'单行写法if后,执行多条语句,用冒号隔开Ifa20Then[b2]=good:[b3]=yes'单行ifelseIfa20Then[b2]=aaElse[b2]=bbForEach语句例子1:将范围内的死胖子染成红色DimrngAsRange,n!ForEachrngInRange(a1:a10)Ifrng=死胖子Thenrng.Interior.ColorIndex=3Next例子2:列出所有的工作表名DimwAsWorksheet,i%i=1ForEachwInWorksheetsRange(a&i)=w.Namei=i+1NextFor语句例子1:从1加到100Fori=1To100sum=sum+iNextMsgBoxsum例子2:1到100相加,只加偶数Subsss()DimwAsWorksheet,i%,sum%sum=0Fori=2To100Step2sum=sum+iNextMsgBoxsumEndSubExit和End语句Exit有四种:ExitFor//退出forExitDoExitSub//退出子过程ExitFunction用于退出各种循环例子:Fori=2To100Step2sum=sum+iIfi=20ThenExitForNextEnd有五种:End退出子过程,相当于ExitSubEndIfEndSelectEndFunctionEndSubgoto语句无条件跳转例子:输入密码不等于xietao,则返回重新输入aaa:IfxietaoInputBox(password)ThenGoToaaaReturn,用于返回跳转之前的位置错误分支语句1.当语句遇到错误的时候,忽略错误。OnErrorResumeNextFori=1To6Range(c&i)=Range(a&i)+Range(b&i)Next2.出现错误的时候,跳转OnErrorGoToaaaFori=1To6Range(c&i)=Range(a&i)+Range(b&i)Nextaaa:Range(c&i)=存在异常With语句用于对同一对象进行一些列操作。WithSheet1.Range(a1)a=.Addressb=.Parent.Name.Value=dfaEndWithVba内使用公式直接把公式贴近宏,加上引号即可。Range(d1)==B1+C1批量公式:Fori=1To8Range(c&i)==a&i&+b&iNext数组公式:Range(d1:d8).FormulaArray==a1:a8+b1:b8带函数的公式:Range(c&i)==sum(a&i&+b&i&)VBA中直接使用工作表函数Fori=1To8Range(c&i)=Application.WorksheetFunction.Sum(Range(a&i),Range(b&i))Next以上的黑体部分,可以简写Range(c&i)=WorksheetFunction.Sum(Range(a&i),Range(b&i))VBA函数[d1]=Format(Range(a1),yyyy-mm-dd)自定义函数Functionsex(rngAsRange)IfMid(rng,17,1)Mod2=0Thensex=女Elsesex=男EndIfEndFunction就可以在工作表中调用自定义的函数VBA运算符1,赋值=2,数学+-*/mod^加,减,乘,除,求余,指数3,逻辑NOTANDOR非,与,或4,关系===like(like用于比较字符串)使用like的时候:?表示单个字符,*表示多个字符,#表示0~9任何数字,[charlist]内部的一个字符例如:31Like##返回一个true例如:aLike[sabd]返回truelike区分大小写ALikea返回false使用like时候,把通配符放like右边AaLike*a*返回true,Like可以使用”[a-z]”代表一个范围wLike[a-z]返回truewLike[!a-z]返回false工作簿工作簿的表示方法1,用工作簿的名字Workbooks(book1).Name结果为book1Workbooks(book1).Parent结果为MicrosoftExcel2,用工作簿的索引号MsgBoxWorkbooks(1).Name结果为book13,窗口方法MsgBoxWindows.Count当前有几个窗口MsgBoxWindows(1).Parent.Name窗口的名字例子:列出所有的工作薄方法1Dimi%i=1ForEachwbInWorkbooksCells(i,1)=wb.Namei=i+1Next方法2Fori=1ToWorkbooks.CountCells(i,2)=Workbooks(i).NameNext当前工作簿:指代码所在的工作薄ThisWorkbook活动工作簿:被激活的工作薄ActiveWorkbook例子:MsgBoxThisWorkbook.Path&Chr(10)&ThisWorkbook.FullNameWorkbooks集合1,新建工作簿DimwkbAsWorkbookSetwkb=Workbooks.Addwkb.Sheets(sheet1).Range(a1)=aaawkb.SaveAs(ThisWorkbook.Path+\xietao.xls)2,打开工作薄DimwkbAsWorkbookSetwkb=Workbooks.Open(ThisWorkbook.Path&\xietao.xls)wkb.Sheets(1).Range(a2)=asdf3,关闭工作簿DimwksAsWorkbookSetwks=Workbooks.Open(ThisWorkbook.Path&\xietao.xls)wks.Sheets(1).Range(a4)=sssswks.CloseTrue4,文件复制FileCopyThisWorkbook.Path&\aaa.xls,ThisWorkbook.Path&aaa2.xls5,文件删除KillThisWorkbook.Path&aaa.xls判断文件是否存在Subaaa()Dima$a=Dir(ThisWorkbook.Path&\Book2.xls)Ifa=ThenMsgBox不存在ElseMsgBox存在EndSub如果存在,这里的a是文件名;如果不存在,a无内容的字符串列出所有文件Subaaa()Dima$i=1a=Dir(ThisWorkbook.Path&\*)Cells(i,1)=ai=i+1DoWhileaa=Dir‘不带参数的时候,将会打开下一个文件Cells(i,1)=ai=i+1LoopEndSub工作表工作表的表示方法1,用名字Worksheets(sheet1).Name2,用索引Worksheets(2).Name3,工作表代码Sheet1.Name4,活动工作表ActiveSheet.Name例子列出所有工作表Fori=1ToWorksheets.CountRange(a&i)=Worksheets(i).NameNext增加工作表Sheets.Add:在活动工作表前面增加工作表Sheets.AddSheet3:在sheet3前面增加工作表删除工作表Sheets(4).Delete例子添加12个月分名称的工作表Fori=1To12Worksheets.Add,ActiveSheet‘这里指添加到活动worksheet之后ActiveSheet.Name=i&月Next删除12个工作表Application.DisplayAlerts=FalseFori=1To12Sheets(i&月).DeleteNextApplication.DisplayAlerts=True工作表复制,移动工作表的选择和激活例子拆分worksheet为独立的workbookSubaaa()Application.DisplayAlerts=FalseDimshtAsWorksheetDimwbkAsWorkbookForEachshtInSheetsSetwbk=Workbooks.Add'新增一个sht.Copywbk.Sheets(1)'复制进去wbk.SaveAs(ThisWorkbook.Path+\+sht.Name)NextApplication.DisplayAlerts=TrueEndSub单元格Range可以代表一个单元格,一行,一列,一个区域Range(a1)一个单元格Range(a:a)一列Range(1:1)一行rnage(a1:f4)一个区域单元格后边跟一个索引的用法Fori=1To100Range(c4:f10)(i)=iNext结果如图上图也可以写作Range(c4:f10).cells(i)=iCells的用法Cells(行号,列号)Cells(行号,“字母”)这样可以通过字母表示列号Cells.select选择全部Cells只能引用单个单元格。单元格简写[单元格地址]即可。例如[A2].Select[b2:c6].Select简写不支持变量行列的使用列:Columns(1).SelectColumns(b).SelectColumns(b:c).Select行Rows(1).SelectRows(2:4).SelectRows(2).Sel
本文标题:excel宏笔记
链接地址:https://www.777doc.com/doc-6220109 .html