首页 最新VBA常用代码解析

最新VBA常用代码解析

举报
开通vip

最新VBA常用代码解析EXCELVBA常用代码解析Range对象是Excel应用程序中最常用的对象,一个Range对象代表一个单元格、一行、一列、包含一个或者更多单元格区域(可以是连续的单元格,也可以是不连续的单元格)中选定的单元格,甚至是多个工作表上的一组单元格,在操作Excel内的任何区域之前都需要将其表示为一个Range对象,然后使用该Range对象的方法和属性。▲001单元格的引用方法在VBA中经常需要引用单元格或单元格区域区域,主要有以下几种方法。001-1使用Range属性VBA中可以使用Range属性返回单元格或单元格区域...

最新VBA常用代码解析
EXCELVBA常用代码解析Range对象是Excel应用程序中最常用的对象,一个Range对象代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 一个单元格、一行、一列、包含一个或者更多单元格区域(可以是连续的单元格,也可以是不连续的单元格)中选定的单元格,甚至是多个工作表上的一组单元格,在操作Excel内的任何区域之前都需要将其表示为一个Range对象,然后使用该Range对象的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 和属性。▲001单元格的引用方法在VBA中经常需要引用单元格或单元格区域区域,主要有以下几种方法。001-1使用Range属性VBA中可以使用Range属性返回单元格或单元格区域,如下面的代码所示。SubRngSelect()Sheet1.Range("A3:F6,B1:C5").SelectEndSub代码解析:RangeSelect过程使用Select方法选中A3:F6,B1:C5单元格区域。Range属性返回一个Range对象,该对象代表一个单元格或单元格区域,语法如下:Range(Cell1,Cell2)参数Cell1是必需的,必须为A1样式引用的宏语言,可包括区域操作符(冒号)、相交区域操作符(空格)或合并区域操作符(逗号)。也可包括美元符号(即绝对地址,如“$A$1”)。可在区域中任一局部使用局部定义名称,如Range("B2:LastCell"),其中LastCell为已定义的单元格区域名称。参数Cell2是可选的,区域左上角和右下角的单元格。运行RangeSelect过程,选中A3:F6,B1:C5单元格区域。001-2使用Cells属性使用Cells属性返回一个Range对象,如下面的代码所示。SubCell()DimicellAsIntegerForicell=1To100Sheet2.Cells(icell,1).Value=icellNextEndSub代码解析:Cell过程使用For...Next语句为工作表中的A1:A100单元格区域填入序号。Cells属性指定单元格区域中的单元格,语法如下:Cells(RowIndex,ColumnIndex)参数RowIndex是可选的,表示引用区域中的行序号。参数ColumnIndex是可选的,表示引用区域中的列序号。如果缺省参数,Cells属性返回引用对象的所有单元格。Cells属性的参数可以使用变量,因此经常应用于在单元格区域中循环。001-3使用快捷记号在VBA中可以将A1引用样式或命名区域名称使用方括号括起来,作为Range属性的快捷方式,这样就不必键入单词“Range〞或使用引号,如下面的代码所示。SubFastmark()[A1:A5]=2[Fast]=4EndSub代码解析:Fastmark过程使用快捷记号为单元格区域赋值。第2行代码使用快捷记号将活开工作表中的A1:A5单元格赋值为2。第3行代码将工作簿中已命名为“Fast〞的单元格区域赋值为4。注意使用快捷记号引用单元格区域时只能使用固定字符串而不能使用变量。001-4使用Offset属性可以使用Range对象的Offset属性返回一个基于引用的Range对象的单元格区域,如下面的代码所示。SubOffset()Sheet3.Range("A1:C3").Offset(3,3).SelectEndSub代码解析:Offset过程使用Range对象的Offset属性选中A1:A3单元格偏移三行三列后的区域。应用于Range对象的Offset属性的语法如下:expression.Offset(RowOffset,ColumnOffset)参数expression是必需的,该表达式返回一个Range对象。参数RowOffset是可选的,区域偏移的行数(正值、负值或0(零))。正值表示向下偏移,负值表示向上偏移,默认值为0。参数ColumnOffset是可选的,区域偏移的列数(正值、负值或0(零))。正值表示向右偏移,负值表示向左偏移,默认值为0。运行Offset过程,选中A1:A3单元格偏称三行三列后的区域。001-5使用Resize属性使用Range对象的Resize属性调整指定区域的大小,并返回调整大小后的单元格区域,如下面的代码所示。SubResize()Sheet4.Range("A1").Resize(3,3).SelectEndSub代码解析:Resize过程使用Range对象的Resize属性选中A1单元格扩展为三行三列后的区域。Resize属性的语法如下:expression.Resize(RowSize,ColumnSize)参数expression是必需的,返回要调整大小的Range对象参数RowSize是可选的,新区域中的行数。如果省略该参数,那么该区域中的行数保持不变。参数ColumnSize是可选的,新区域中的列数。如果省略该参数。那么该区域中的列数保持不变。运行Resize过程,选中A1单元格扩展为三行三列后的区域。001-6使用Union方法使用Union方法可以将多个非连续区域连接起来成为一个区域,从而可以实现对多个非连续区域一起进行操作,如下面的代码所示。SubUnSelect()Union(Sheet5.Range("A1:D4"),Sheet5.Range("E5:H8")).SelectEndSub代码解析:UnSelect过程选择单元格A1:D4和E5:H8所组成的区域。Union方法返回两个或多个区域的合并区域,语法如下:expression.Union(Arg1,Arg2,...)其中参数expression是可选的,返回一个Application对象。参数Arg1,Arg2,...是必需的,至少指定两个Range对象。运行UnSelect过程,选中单元格A1:D4和E5:H8所组成的区域。001-7使用UsedRange属性使用UsedRange属性返回指定工作表上已使用单元格组成的区域,如下面的代码所示。SubUseSelect()Sheet6.UsedRange.SelectEndSub代码解析:UseSelect过程使用UsedRange属性选择工作表上已使用单元格组成的区域,包括空单元格。如工作表中已使用A1单元格和D8单元格,运行UseSelect过程将选择A1到D8单元格区域。001-8使用CurrentRegion属性使用CurrentRegion属性返回指定工作表上当前的区域,如下面的代码所示。SubCurrentSelect()Sheet7.Range("A5").CurrentRegion.SelectEndSub代码解析:CurrentSelect过程使用CurrentRegion属性选择工作表上A5单元格当前的区域,当前区域是一个边缘是任意空行和空列组合成的范围。运行CurrentSelect过程将选择A5到B6单元格区域。▲002选定单元格区域的方法002-1使用Select方法在VBA中一般使用Select方法选定单元格或单元格区域,如下面的代码所示。SubRngSelect()Sheet3.ActivateSheet3.Range("A1:B10").SelectEndSub代码解析:RngSelect过程使用Select方法选定Sheet3中的A1:B10单元格区域,Select方法应用于Range对象时语法如下:expression.Select(Replace)参数expression是必需的,一个有效的对象。参数Replace是可选的,要替换的对象。使用Select方法选定单元格时,单元格所在的工作表必需为活开工作表,所以先使用Activate方法使Sheet3成为活开工作表,否那么Select方法有可能出错,显示错误提示。002-2使用Activate方法还可以使用Activate方法选定单元格或单元格区域,如下面的代码所示。SubRngActivate()Sheet3.ActivateSheet3.Range("A1:B10").ActivateEndSub代码解析:RngActivate过程使用Activate方法选定Sheet3中的A1:B10单元格区域,Activate方法应用于Range对象时语法如下:expression.Activate使用Activate方法选定单元格时,单元格所在的工作表也必需为活开工作表,否那么Activate方法有可能出错,显示错误提示。002-3使用Goto方法使用Goto方法无需使单元格所在的工作表成为活开工作表,如下面的代码所示。SubRngGoto()Application.GotoReference:=Sheet3.Range("A1:B10"),scroll:=TrueEndSub代码解析:RngGoto过程使用Goto方法选定Sheet3中的A1:B10单元格区域,并滚开工作表以显示该单元格。Goto方法选定任意工作簿中的任意区域或任意VisualBasic过程,并且如果该工作簿未处于活动状态,就激活该工作簿,语法如下:expression.Goto(Reference,Scroll)参数expression是必需的,返回一个Application对象。参数Reference是可选的,Variant类型,指定目标。可以是Range对象、包含R1C1-样式记号的单元格引用的字符串或包含VisualBasic过程名的字符串。如果省略本参数,目标将是最近一次用Goto方法选定的区域。参数Scroll是可选的,Variant类型,如果该值为True,那么滚动窗口直至目标区域的左上角单元格出现在窗口的左上角。如果该值为False,那么不滚动窗口。默认值为False。▲003获得指定行、列中的最后一个非空单元格使用VBA对工作表进行操作时,经常需要定位到指定行或列中最后一个非空单元格,此时可以使用Range对象的End属性,在取得单元格对象后便能获得该单元格的相关属性,如单元格地址、行列号、数值等,如下面的代码所示。SubLastRow()DimrngAsRangeSetrng=Sheet1.Range("A65536").End(xlUp)MsgBox"A列中最后一个非空单元格是"&rng.Address(0,0)_&",行号"&rng.Row&",数值"&rng.ValueSetrng=NothingEndSub代码解析:LastRow过程使用消息框显示工作表中A列最后非空单元格的地址、行号和数值。End属性返回一个Range对象,该对象代表包含源区域的区域尾端的单元格。等同于按键,语法如下:expression.End(Direction)参数expression是必需的,一个有效的对象。参数Direction是可选的,所要移动的方向,可以为XlDirection常量之一。Range对象的End属性返回的是一个Range对象,因此可以直接使用该对象的属性和方法。通过修改相应的参数,能够获得指定行中最后一个非空单元格,如下面的代码所示。SubLastColumn()DimrngAsRangeSetrng=Sheet1.Range("IV1").End(xlToLeft)MsgBox"第一行中最后一个非空单元格是"&rng.Address(0,0)_&",列号"&rng.Column&",数值"&rng.ValueSetrng=NothingEndSub代码解析:LastColumn过程使用消息框显示工作表中第一行最后一个非空单元格的地址、列号和数值。▲004定位单元格在Excel中使用定位对话框可以选中工作表中特定的单元格区域,而在VBA中那么使用SpecialCells方法,如下面的代码所示。SubSpecialAddress()DimrngAsRangeSetrng=Sheet1.UsedRange.SpecialCells(xlCellTypeFormulas)rng.SelectMsgBox"工作表中有公式的单元格为:"&rng.AddressSetrng=NothingEndSub代码解析:SpecialAddress过程使用SpecialCells方法选中工作表中有公式的单元格,并用消息框显示其地址。SpecialCells方法返回一个Range对象,该对象代表与指定类型及值相匹配的所有单元格,语法如下:expression.SpecialCells(Type,Value)参数expression是必需的,返回一个有效的对象。参数Type是必需的,要包含的单元格,可为表格所列的XlCellType常量之一。第3行代码将SpecialCells方法的Type参数设置为xlCellTypeFormulas,返回的是含有公式的单元格,通过修改相应的参数可以返回不同的单元格。参数Value是可选的,如果Type参数为xlCellTypeConstants或xlCellTypeFormulas,此参数可用于确定结果中应包含哪几类单元格。将某几个值相加可使此方法返回多种类型的单元格。如果省略将选定所有常量或公式,可为表格所列的XlSpecialCellsValue常量之一。第5行代码使用消息框显示工作表中含有公式单元格的地址。SpecialCells方法返回的是Range对象,因此可以直接使用该对象的属性和方法。▲005查找单元格005-1使用Find方法在Excel中使用查找对话框可以查找工作表中特定内容的单元格,而在VBA中那么使用Find方法,如下面的代码所示。SubRngFind()DimStrFindAsStringDimRngAsRangeStrFind=InputBox("请输入要查找的值:")IfTrim(StrFind)<>““ThenWithSheet1.Range("A:A")SetRng=.Find(What:=StrFind,_After:=.Cells(.Cells.Count),_LookIn:=xlValues,_LookAt:=xlWhole,_SearchOrder:=xlByRows,_SearchDirection:=xlNext,_MatchCase:=False)IfNotRngIsNothingThenApplication.GotoRng,TrueElseMsgBox"没有找到该单元格!"EndIfEndWithEndIfEndSub代码解析:RngFind过程使用Find方法在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值,并查找该值所在的第一个单元格。第6到第13行代码在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值。应用于Range对象的Find方法在区域中查找特定信息,并返回Range对象,该对象代表用于查找信息的第一个单元格。如果未发现匹配单元格,就返回Nothing,语法如下:expression.Find(What,After,LookIn,LookAt,SearchOrder,SearchDirection,MatchCase,MatchByte,SerchFormat)参数expression是必需的,该表达式返回一个Range对象。参数What是必需的,要搜索的数据,可为字符串或任意数据类型。参数After是可选的,表示搜索过程将从其之后开始进行的单元格,必须是区域中的单个单元格。查找时是从该单元格之后开始的,直到本方法绕回到指定的单元格时,才对其进行搜索。如果未指定本参数,搜索将从区域的左上角单元格之后开始。在本例中将After参数设置为A列的最后一个单元格,所以查找时从A1单元格开始搜索。参数LookIn是可选的,信息类型。参数LookAt是可选的,可为XlLookAt常量的xlWhole或xlPart之一。参数SearchOrder是可选的,可为XlSearchOrder常量的xlByRows或xlByColumns之一。参数SearchDirection是可选的,搜索的方向,可为XlSearchDirection常量的xlNext或xlPrevious之一。参数MatchCase是可选的,假设为True,那么进行区分大小写的查找。默认值为False。参数MatchByte是可选的,仅在选择或安装了双字节语言支持时使用。假设为True,那么双字节字符仅匹配双字节字符。假设为False,那么双字节字符可匹配其等价的单字节字符。参数SerchFormat是可选的,搜索的格式。每次使用Find方法后,参数LookIn、LookAt、SearchOrder和MatchByte的设置将保存。如果下次调用Find方法时不指定这些参数的值,就使用保存的值。因此每次使用该方法时请明确设置这些参数。如果工作表的A列中存在重复的数值,那么需要使用FindNext方法或FindPrevious方法进行重复搜索,如下面的代码所示。SubRngFindNext()DimStrFindAsStringDimRngAsRangeDimFindAddressAsStringStrFind=InputBox("请输入要查找的值:")IfTrim(StrFind)<>““ThenWithSheet1.Range("A:A")SetRng=.Find(What:=StrFind,_After:=.Cells(.Cells.Count),_LookIn:=xlValues,_LookAt:=xlWhole,_SearchOrder:=xlByRows,_SearchDirection:=xlNext,_MatchCase:=False)IfNotRngIsNothingThenFindAddress=Rng.AddressDoRng.Interior.ColorIndex=6SetRng=.FindNext(Rng)LoopWhileNotRngIsNothingAndRng.Address<>FindAddressEndIfEndWithEndIfEndSub代码解析:RngFindNext过程在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值,并将查到单元格底色设置成黄色。第8行到第17行代码使用Find方法在工作表Sheet1的A列中查找。第16行代码将查找到的第一个单元格地址赋给字符串变量FindAddress。第18行代码将查找到的单元格底色设置成黄色。第19行代码使用FindNext方法进行重复搜索。FindNext方法继续执行用Find方法启动的搜索。查找下一个匹配相同条件的单元格并返回代表单元格的Range对象,语法如下:expression.FindNext(After)参数expression是必需的,返回一个Range对象。参数After是可选的,指定一个单元格,查找将从该单元格之后开始。第20行代码如果查找到的单元格地址等于字符串变量FindAddress所 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 的地址,说明A列已搜索完毕,结束查找过程。运行RngFindNext过程,在InputBox函数输入框中输入“196.01〞后结果如所示。还可以使用FindPrevious方法进行重复搜索,FindPrevious方法的语法如下:expression.FindPrevious(After)FindPrevious方法和FindNext方法唯一的区别是FindPrevious方法查找匹配相同条件的前一个单元格而FindNext方法是查找匹配相同条件的下一个单元格。005-2使用Like运算符使用Like运算符可以进行更为复杂的模式匹配查找,如下面的代码所示。SubRngLike()DimrngAsRangeDimaAsIntegera=1WithSheet2.Range("A:A").ClearContentsForEachrngIn.Range("B1:E1000")Ifrng.TextLike"*a*"Then.Range("A"&a)=rng.Texta=a+1EndIfNextEndWithEndSub代码解析:RngLike过程使用ForEach...Next语句和Like运算符在单元格区域B1:E10000中搜索含有“a〞字符的单元格,找到匹配单元格以后将单元格的值写入到A列中。第6行代码使用ClearContents方法去除A列区域的数据。第7行代码使用ForEach...Next语句在单元格区域B1:E10000中循环。第8行代码使用Like运算符在单元格区域B1:E10000中搜索含有“a〞字符的单元格。Like运算符用来比拟两个字符串,语法如下:result=stringLikepattern参数string是必需的,字符串表达式。参数pattern是必需的,字符串表达式。如果string与pattern匹配,那么result为True;如果不匹配,那么result为False。但是如果string或pattern中有一个为Null,那么result为Null。参数pattern可以使用通配符、字符串列表或字符区间的任何组合来匹配字符串。表格中列出pattern中允许的字符以及它们与什么进行匹配。第9行代码将找到的匹配单元格的值写入到A列中。▲006替换单元格内字符串如果需要替换单元格内指定的字符串,那么使用Range对象的Replace方法,如下面的代码所示。SubRngReplace()Range("A1:A5").Replace"通州","南通"EndSub代码解析:RngReplace过程将工作表A1:A5单元格中的“通州〞字符串替换成“南通〞字符串。应用于Range对象的Replace方法替换指定区域内单元格中的字符,语法如下:expression.Replace(What,Replacement,LookAt,SearchOrder,MatchCase,MatchByte,SearchFormat,ReplaceFormat)其中参数expression是必需的,返回一个Range对象。参数What是必需的,要搜索的字符串。参数Replacement是必需的,替换的字符串。运行RngReplace过程前工作表。▲007复制单元格区域在实际操作中,经常需要复制指定的单元格区域到另外一个单元格区域。要复制指定单元格区域到其他位置,使用Range对象的Copy方法,如下面的代码所示。SubRangeCopy()Application.DisplayAlerts=FalseSheet1.Range("A1").CurrentRegion.CopySheet2.Range("A1")Application.DisplayAlerts=TrueEndSub代码解析:RangeCopy过程将Sheet1工作表中A1单元格的当前区域复制到Sheet2工作表中以A1单元格为左上角单元格的区域。Sheet2工作表复制后。Range对象的Copy方法的语法如下:Copy(Destination)参数Destination表示复制单元格区域的目标区域,如果省略该参数,Excel将把该区域复制到剪贴板中。使用Copy方法复制单元格区域时,也复制了该单元格区域的格式。复制单元格区域时,如果目标区域为非空单元格区域,Excel将显示消息框提示是否替换单元格内容,可以设置Application.DisplayAlerts属性值为False,使复制时不出现该消息框。第2行代码通常复制单元格区域的操作不会将单元格区域的列宽大小同时复制,如果希望在复制单元格区域的同时,也复制源区域的列宽大小,可以使用下面的代码。SubCopyWithSameColumnWidths()Sheet1.Range("A1").CurrentRegion.CopyWithSheet3.Range("A1").PasteSpecialxlPasteColumnWidths.PasteSpecialxlPasteAllEndWithApplication.CutCopyMode=FalseEndSub代码解析:第4行代码使用Range对象的PasteSpecial方法选择性粘贴剪贴板中的Range对象的列宽。第5行代码粘贴剪贴板中的Range对象全部内容。第7行代码取消应用程序复制模式。应用于Range对象的PasteSpecial方法将剪贴板中的Range对象粘贴到指定区域,在粘贴时可以有选择的粘贴对象的局部属性。其语法如下:PasteSpecial(Paste,Operation,SkipBlanks,Transpose)参数Paste指定要粘贴的区域局部,可为表格所列的XlPasteType常量之一。参数Operation指定粘贴操作。可为表格所列的XlPasteSpecialOperation常量之一。参数SkipBlanks指示是否跳过空单元格,假设参数值为True,那么不将剪贴板上区域中的空白单元格粘贴到目标区域中。默认值为False。参数Transpose指示是否进行转置,假设参数值为True,那么粘贴区域时转置行和列。默认值为False。运行CopyWithSameColumnWidths过程后,Sheet3工作表,目标区域的各列列宽与源区域一致。注意使用PasteSpecial方法时指定xlPasteAll(粘贴全部),不会粘贴列宽。▲008仅复制数值到另一区域如果在复制单元格区域时,仅希望复制单元格区域的数值,有下面几种方法。008-1使用选择性粘贴使用选择性粘贴功能并指定粘贴数值,如下面的代码所示。SubCopyPasteSpecial()Sheet1.Range("A1").CurrentRegion.CopySheet2.Range("A1").PasteSpecialPaste:=xlPasteValuesApplication.CutCopyMode=FalseEndSub代码解析:CopyPasteSpecial过程复制工作表Sheet1中A1单元格的当前区域的数值到工作表Sheet2的A1单元格所在区域中。第2行代码将Sheet1中A1单元格的当前区域进行复制。第3行代码使用选择性粘贴功能并指定粘贴数值,选择性粘贴数值仅复制了单元格区域的数值,单元格区域的格式(背景颜色、字体对齐格式和边框等)不会被复制,复制结果。008-2直接赋值的方法除了使用Copy方法外,还可以使用直接赋值的方法,如下面的代码所示。SubGetValueResize()WithSheet1.Range("A1").CurrentRegionSheet3.Range("A1").Resize(.Rows.Count,.Columns.Count).Value=.ValueEndWithEndSub代码解析:GetValueResize过程将工作表Sheet1中的A1单元格的当前区域的数值赋予工作表Sheet3的A1单元格所在的单元格区域。在对单元格区域直接赋值时,应保证源区域大小与目标区域的大小一致,如果源区域为动态的单元格区域,可使用Resize方法确定目标区域。▲009单元格自动进入编辑状态当光标选择单元格时无需双击,自动进入编辑状态,如下面的代码所示。PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)IfTarget.Column=3AndTarget.Count=1ThenIfTarget<>““ThenApplication.SendKeys"{F2}"EndIfEndIfEndSub代码解析:工作表的SelectionChange事件过程,中选择工作表C列有数据单元格时自动进入编辑状态。第2、3行代码设置SelectionChange事件的触发条件,利用Target参数的Column属性和Count属性将事件的触发条件限制在C列并且只有在选择一个单元格时才发生。第4行代码使用SendKeys方法发送一个F2键到应用程序,等同于选择单元格后按F2键,使单元格进入编辑状态。▲010禁用单元格拖放功能在工作表中可以拖放单元格右下角的小十字对单元格内容进行复制等操作,如果不希望用户进行此操作可以禁用单元格拖放功能,如下面的代码所示。PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)IfNotApplication.Intersect(Target,Range("A1:A15"))IsNothingThenApplication.CellDragAndDrop=FalseElseApplication.CellDragAndDrop=TrueEndIfEndSub代码解析:工作表的SelectionChange事件过程,在指定的单元格区域禁用单元格的拖放功能。CellDragAndDrop属性设置单元格的拖放功能,如果允许使用单元格拖放功能,那么该值为True。为了不影响其他工作表,应在工作表的Deactivate事件中恢复单元格的拖放功能,如下面的代码所示。PrivateSubWorksheet_Deactivate()Application.CellDragAndDrop=TrueEndSub代码解析:工作表的Deactivate事件过程,恢复单元格的拖放功能。工作表的Deactivate事件当工作表从活动状态转为非活动状态时产生,语法如下:PrivateSubobject_Deactivate()参数object代表Worksheet对象。中选择工作表“Sheet1〞的A1:A15单元格时将禁用单元格的拖放功能,▲011单元格格式操作011-1单元格字体格式设置在VBA中可以对单元格的字体格式进行各种设置,如下面的代码所示。PublicSubRngFont()WithRange("A1").Font.Name="华文彩云".FontStyle="Bold".Size=18.ColorIndex=3.Underline=2EndWithEndSub代码解析:RngFont过程对单元格A1的字体格式进行设置。其中第3行代码设置字体为“华文彩云〞,应用于Font对象的Name属性返回或设置对象的名称。第4行代码设置字体为加粗,FontStyle属性返回或设置字体样式。设置为“Bold〞加粗字体,设置为“Italic〞倾斜字体,也可以设置成“BoldItalic〞。第5行代码设置字体的大小为18磅,Size属性返回或设置字体大小。第6行代码设置字体的颜色为红色,应用于Font对象的ColorIndex属性返回或设置字体的颜色,该颜色可指定为当前调色板中颜色的编号。第7行代码设置字体为单下划线类型,Underline属性返回或设置应用于字体的下划线类型,可为表格所列的XlUnderlineStyle常量之一。011-2设置单元格内部格式设置单元格的Interior属性可以对单元格的内部格式进行设置,如下面的代码所示。SubRngInterior()WithRange("A1").Interior.ColorIndex=3.Pattern=xlPatternCrissCross.PatternColorIndex=6EndWithEndSub代码解析:RngInterior过程对A1单元格的内部格式进行设置。第2行代码使用Interior属性返回单元格对象的内部。第3行代码设置单元格边框内部的颜色为红色。应用于Interior对象的ColorIndex属性返回或设置边框内部的颜色,可指定为如▲11-1所示的当前调色板中颜色的编号或为XlColorIndex常量之一:xlColorIndexAutomatic(自动填充)、xlColorIndexNone(无内部填充)。第4行代码设置单元格设置内部图案为十字图案。应用于Interior对象的Pattern属性返回或者设置内部图案。第5行代码设置单元格设置内部图案的颜色为黄色。应用于Interior对象的PatternColorIndex属性返回或设置内部图案的颜色,可指定为如▲11-1中所示的当前调色板中颜色的编号或为XlColorIndex常量之一:xlColorIndexAutomatic(自动填充)、xlColorIndexNone(无内部填充)。011-3为单元格区域添加边框我们为单元格区域添加边框时往往通过录制宏获取代码,但宏录制器生成的代码分别设置单元格区域的每个边框,因此代码多且效率低。使用Range对象的Borders集合可以快速的对单元格区域的每个边框应用相同的格式,而Range对象的BorderAround方法那么可以快速地为单元格区域添加一个外边框,如下面的代码所示。SubAddBorders()DimrngAsRangeSetrng=Range("B4:G10")Withrng.Borders.LineStyle=xlContinuous.Weight=xlThin.ColorIndex=5EndWithrng.BorderAroundxlContinuous,xlMedium,5Setrng=NothingEndSub代码解析:AddBorders过程为单元格区域B4:G10设置内部统一边框并添加一个加粗外边框。第4行到第8行代码使用Borders属性引用单元格区域的Borders集合,其中第5行代码设置其边框样式线条的样式,第6行代码设置边框线条的粗细,第7行代码设置边框的颜色。应用于Range对象的Borders集合代表Range对象的4个边框(左边框、右边框、顶部边框和底部边框)的4个Border对象组成的集合,这4个边框既可单独返回,也可作为一个组同时返回。第9行代码使用BorderAround方法为单元格区域添加一个加粗外边框。应用于Range对象的BorderAround方法向单元格区域添加整个区域的外边框,并设置该边框的相关属性,其语法如下:BorderAround(LineStyle,Weight,ColorIndex,Color)其中LineStyle参数设置边框线条的样式,Weight参数设置边框线条的粗细,ColorIndex参数设置边框颜色,Color参数以RGB值指定边框的颜色。注意指定Color参数可以设置颜色为当前调色板之处的其它颜色,不能同时指定ColorIndex参数和Color参数。运行AddBorders过程,效果。如果需要在单元格区域中应用多种边框格式,那么需分别设置各边框格式,如下面的代码所示。SubBordersDemo()DimrngAsRangeSetrng=Sheet2.Range("B4:G10")Withrng.Borders(xlInsideHorizontal).LineStyle=xlDot.Weight=xlThin.ColorIndex=5EndWithWithrng.Borders(xlInsideVertical).LineStyle=xlContinuous.Weight=xlThin.ColorIndex=5EndWithrng.BorderAroundxlContinuous,xlMedium,5Setrng=NothingEndSub代码解析:BordersDemo过程代码为单元格区域内部边框在水平和垂直方向上应用不同格式,并为区域添加一个加粗外边框。Borders(index)属性返回单个Border对象,其Index参数取值可为表格所列的XlBordersIndex常量之一:011-4灵活设置单元格的行高列宽一般情况下单元格的行高列宽都是以磅为单位进行设置的,也可以使用英寸和厘米计量单位设置单元格的行高列宽,如下面的代码所示。SubRngToPoints()WithRange("A1").RowHeight=Application.CentimetersToPoints(2).ColumnWidth=Application.CentimetersToPoints(1.5)EndWithWithRange("A2").RowHeight=Application.InchesToPoints(1.2).ColumnWidth=Application.InchesToPoints(0.3)EndWithEndSub代码解析:RngToPoints过程以英寸和厘米计量单位设置单元格的行高列宽。第3、4行代码使用CentimetersToPoints方法以厘米为计量单位设置A1单元格的行高列宽。CentimetersToPoints方法将计量单位从厘米转换为磅(一磅等于0.035厘米),语法如下:expression.CentimetersToPoints(Centimeters)参数expression是必需的,返回一个Application对象。参数Centimeters是必需的,指定要转换为磅值的厘米值。第5、6行代码使用InchesToPoints方法以英寸为计量单位设置B2单元格的行高列宽。InchesToPoints方法将计量单位从英寸转换为磅,语法如下:expression.InchesToPoints(Inches)参数expression是必需的,返回一个Application对象。参数Inches是必需的,指定要转换为磅值的英寸值。▲012单元格中的数据有效性012-1在单元格中建立数据有效性在单元格中建立数据有效性可以使用Add方法,如下面的代码所示。SubValidation()WithRange("A1:A10").Validation.Delete.AddType:=xlValidateList,_AlertStyle:=xlValidAlertStop,_Operator:=xlBetween,_Formula1:="1,2,3,4,5,6,7,8"EndWithEndSub代码解析:Validation过程使用Add方法在A1:A10单元格中建立数据有效性。第3行代码删除已建立的数据有效性,防止代码运行出错。第4行到第7行代码使用Add方法建立数据有效性。应用于Validation对象的Add方法的语法如下:expression.Add(Type,AlertStyle,Operator,Formula1,Formula2)参数expression是必需的,返回一个Validation对象。参数Type是必需的,数据有效性类型。参数AlertStyl是可选的,有效性检验警告样式。参数Operator是可选的,数据有效性运算符。参数Formula1是可选的,数据有效性公式的第一局部。参数Formula2是可选的,当Operator为xlBetween或xlNotBetween时,数据有效性公式的第二局部(其他情况下,此参数被忽略)。Add方法所要求的参数依有效性检验的类型而定,如表格所示。012-2判断单元格是否存在数据有效性在VBA中没有专门的属性判断单元格是否存在数据有效性设置,可以使用Validation对象的有效性类型和错误陷阱来判断,如下面的代码所示。SubValidation()OnErrorGoToLineIfRange("A2").Validation.Type>=0ThenMsgBox"单元格有数据有效性!"ExitSubEndIfLine:MsgBox"单元格没有数据有效性!"EndSub代码解析:Validation过程使用Validation对象的有效性类型和错误陷阱来判断A2单元格中是否存在数据有效性。第6行代码,如果A2单元格中存在数据有效性,Type参数值就会大于等于0,否那么就会发生错误,使用OnErrorGoTo捕捉到错误后转移到第8行代码,显示一个消息框。012-3动态的数据有效性利用VBA可以在单元格中建立动态的数据有效性,如下面的代码所示。PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)IfTarget.Column=1AndTarget.Count=1AndTarget.Row>1ThenWithTarget.Validation.Delete.AddType:=xlValidateList,_AlertStyle:=xlValidAlertStop,_Operator:=xlBetween,_Formula1:="主机,显示器"EndWithEndIfEndSubPrivateSubWorksheet_Change(ByValTargetAsRange)IfTarget.Column=1AndTarget.Row>1AndTarget.Count=1ThenWithTarget.Offset(0,1).Validation.DeleteSelectCaseTargetCase"主机".AddType:=xlValidateList,_AlertStyle:=xlValidAlertStop,_Operator:=xlBetween,_Formula1:="Z286,Z386,Z486,Z586"Case"显示器".AddType:=xlValidateList,_AlertStyle:=xlValidAlertStop,_Operator:=xlBetween,_Formula1:="三星17,飞利浦15,三星15,飞利浦17"EndSelectEndWithEndIfEndSub代码解析:第1行到第11行代码,工作表的SelectionChange事件,中选择工作表的A列单元格时,在A2以下的单元格中建立动态的数据有效性。其中第2行代码,利用SelectionChange事件的Target参数来限制事件的触发条件。第3行到第9行代码使用Add方法在A列单元格中建立数据有效性。应用于Validation对象的Add方法请参阅▲12-1。第12行到第30行代码,工作表的Change事件,当工作表A列单元格内容改变时,在B列单元格中建立动态的数据有效性。其中第16行到第27行代码,根据A列单元格的内容在B列对应的单元格中建立数据有效性,其Formula1参数的值根据A列单元格的内容而变化,使之到达动态数据有效性的效果。012-4自动展开数据有效性下拉列表选择工作表单元格时自动展开数据有效性的下拉列表,如下面的代码所示。PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)IfTarget.Column=5ThenApplication.SendKeys"%{down}"EndSub代码解析:中选择工作表的E列中有数据有效性的单元格时使用SendKeys方法发送Alt+向下键,翻开数据有效性的下拉列表。应用于Application对象的SendKeys方法将击键发送给活动应用程序,语法如下:expression.SendKeys(Keys,Wait)参数expression是可选的,该表达式返回一个Application对象。参数Keys是必需的,要发送的键或者组合键,以文本方式表示。Keys参数可以指定任何单个键或与Alt、Ctrl或Shift的组合键(或者这些键的组合)。每个键可用一个或多个字符表示。例如,"a"表示字符a,或者"{ENTER}"表示Enter。假设要指定在按相应键时不会显示的字符(例如,Enter或Tab),请使用如表格所列的代码来表示相应的键,表中的每个代码表示键盘上的一个键。中选择工作表中的E列单元格时将自动展开数据有效性的下拉列表,▲13单元格中的公式013-1在单元格中写入公式使用Range对象的Formula属性可以在单元格区域中写入公式,如下面的代码所示。SubrngFormula()Sheet1.Range("C1:C10").Formula="=SUM(A1+B1)"EndSub代码解析:应用于Range对象的Formula属性返回或设置A1样式表示的Range对象的公式,语法如下:expression.Formula参数expression是必需的,返回一个Range对象。还可以使用FormulaR1C1属性返回或设置以R1C1-样式符号表示的公式,如下面的代码所示。SubrngFormulaRC()Sheet2.Range("C1:C10").FormulaR1C1="=SUM(RC[-2]+RC[-1])"EndSub如果需要在单元格中写入数组公式那么使用Range对象的FormulaArray属性。如下面的代码所示。SubRngFormulaArray()Sheet3.Range("C1").FormulaArray="=A1:A2*B1:B2"EndSubRange对象的FormulaArray属性返回或设置单元格区域的数组公式。013-2检查单元格是否含有公式使用单元格的HasFormula属性检查单元格是否含有公式,如下面的代码所示。PrivateSubCommandButton1_Click()SelectCaseSelection.HasFormulaCaseTrueMsgBox"公式单元格!"CaseFalseMsgBox"非公式单元格!"CaseElseMsgBox"公式区域:"&Selection.SpecialCells(xlCellTypeFormulas,23).Address(0,0)EndSelectEndSub代码解析:工作表中按钮的单击过程,检查所选择的单元格区域是否含有公式。第2行代码返回所选择单元格区域的HasFormula属性值。如果区域中所有单元格均包含公式,那么该值为True;如果所有单元格均不包含公式,那么该值为False。第3、4行代码,如果返回True,说明区域中所有单元格均包含公式。第5、6行代码,如果返回False,说明区域中所有单元格均不包含公式。第7、8行代码,如果是混合区域,那么显示包含公式的单元格地址。013-3判断单元格公式是否存在错误当需要获取的单元格的值由公式返回时,公式返回的结果可能是一个错误文本,包含#NULL!、#DIV/0!、#VALUE!、#REF!、#NAME?、#NUM!、#N/A等。此时,当单元格公式返回结果为错误文本时,如果试图通过Value属性来获得公式的返回结果,将得到类型不匹配的错误信息。通过Range对象的Value属性的返回结果是否为错误类型,来判断公式是否存在错误,如下面的代码所示。SubFormulaIsError()IfVBA.IsError(Range("A1").Value)=TrueThenMsgBox"A1单元格错误类型为:"&Range("A1").TextElseMsgBox"A1单元格公式结果为"&Range("A1").ValueEndIfEndSub代码解析:FormulaIsError过程代码判断单元格A1中公式结果是否为错误,如果为错误那么显示该错误类型,否那么显示公式的结果。第2行代码使用IsError函数返回Boolean值,指出表达式是否为一个错误值,如果表达式表示一个错误,那么IsError函数返回True,否那么返回False。013-4取得单元格中公式的引用单元格如果需要取得单元格中公式的引用单元格对象,可以使用Range对象的Precedents属性,如下面的代码所示。SubRngPrecedent()DimrngAsRangeSetrng=Sheet1.Range("C1").PrecedentsMsgBox"公式所引用的单元格有:"&rng.AddressSetrng=NothingEndSub代码解析:在工作表的C1单元格中写有公式“SUM(“A1:B1”)〞,RngPrecedent过程使用Range对象的Precedents属性取得其引用的单元格A1:B1。Precedents属性返回一个Range对象,该对象代表单元格的所有引用单元格。如果有假设干引用单元格,那么该区域可能是多个的选定区域(Range对象的联合)。013-5将单元格中的公式转换为数值工作表中如果存在过多的公式将影响
本文档为【最新VBA常用代码解析】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
楼上的小胖子
暂无简介~
格式:doc
大小:1MB
软件:Word
页数:220
分类:
上传时间:2022-07-25
浏览量:3