VBA技术详细教程Word文档格式.docx
- 文档编号:21173705
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:87
- 大小:1.51MB
VBA技术详细教程Word文档格式.docx
《VBA技术详细教程Word文档格式.docx》由会员分享,可在线阅读,更多相关《VBA技术详细教程Word文档格式.docx(87页珍藏版)》请在冰豆网上搜索。
#006EndSub
Cell进程利用For...Next语句为工作表中的A1:
A100单元格区域填入序号。
Cells属性指定单元格区域中的单元格,语法如下:
Cells(RowIndex,ColumnIndex)
参数RowIndex是可选的,表示引用区域中的行序号。
参数ColumnIndex是可选的,表示引用区域中的列序号。
若是缺省参数,Cells属性返回引用对象的所有单元格。
Cells属性的参数能够利用变量,因此常常应用于在单元格区域中循环。
1-3使用快捷记号
在VBA中能够将A1引用样式或命名区域名称使用方括号括起来,作为Range属性的快捷方式,如此就没必要键入单词“Range”或利用引号,如下面的代码所示。
#001SubFastmark()
#002[A1:
A5]=2
#003[Fast]=4
#004EndSub
Fastmark进程利用快捷记号为单元格区域赋值。
第2行代码利用快捷记号将活动工作表中的A1:
A5单元格赋值为2。
第3行代码将工作簿中已命名为“Fast”的单元格区域赋值为4。
注意利用快捷记号引用单元格区域时只能利用固定字符串而不能利用变量。
1-4利用Offset属性
能够利用Range对象的Offset属性返回一个基于引用的Range对象的单元格区域,如下面的代码所示。
#001SubOffset()
#002("
A1:
C3"
).Offset(3,3).Select
Offset进程利用Range对象的Offset属性选中A1:
A3单元格偏移三行三列后的区域。
应用于Range对象的Offset属性的语法如下:
(RowOffset,ColumnOffset)
参数expression是必需的,该表达式返回一个Range对象。
参数RowOffset是可选的,区域偏移的行数(正值、负值或0(零))。
正值表示向下偏移,负值表示向上偏移,默许值为0。
参数ColumnOffset是可选的,区域偏移的列数(正值、负值或0(零))。
正值表示向右偏移,负值表示向左偏移,默许值为0。
运行Offset进程,选中A1:
A3单元格偏称三行三列后的区域,如图12所示。
图12利用Range对象的Offset属性
1-5利用Resize属性
利用Range对象的Resize属性调整指定区域的大小,并返回调整大小后的单元格区域,如下面的代码所示。
#001SubResize()
A1"
).Resize(3,3).Select
Resize进程利用Range对象的Resize属性选中A1单元格扩展为三行三列后的区域。
Resize属性的语法如下:
(RowSize,ColumnSize)
参数expression是必需的,返回要调整大小的Range对象
参数RowSize是可选的,新区域中的行数。
若是省略该参数,那么该区域中的行数维持不变。
参数ColumnSize是可选的,新区域中的列数。
若是省略该参数。
那么该区域中的列数维持不变。
运行Resize进程,选中A1单元格扩展为三行三列后的区域,如图13所示。
图13利用Resize属性调整区域大小
1-6利用Union方式
利用Union方式能够将多个非持续区域连接起来成为一个区域,从而能够实现对多个非持续区域一路进行操作,如下面的代码所示。
#001SubUnSelect()
#002Union("
D4"
),("
E5:
H8"
)).Select
UnSelect进程选择单元格A1:
D4和E5:
H8所组成的区域。
Union方式返回两个或多个区域的归并区域,语法如下:
(Arg1,Arg2,...)
其中参数expression是可选的,返回一个Application对象。
参数Arg1,Arg2,...是必需的,至少指定两个Range对象。
运行UnSelect进程,选中单元格A1:
H8所组成的区域,如图14所示。
图14利用Union方式将多个非持续区域连接成一个区域
1-7利用UsedRange属性
利用UsedRange属性返回指定工作表上已利用单元格组成的区域,如下面的代码所示。
#001SubUseSelect()
#002EndSu
UseSelect进程利用UsedRange属性选择工作表上已利用单元格组成的区域,包括空单元格。
如工作表中已利用A1单元格和D8单元格,运行UseSelect进程将选择A1到D8单元格区域,如图15所示。
图15利用UsedRange属性选择已利用区域
1-8利用CurrentRegion属性
利用CurrentRegion属性返回指定工作表被骗前的区域,如下面的代码所示。
#001SubCurrentSelect()
A5"
).
CurrentSelect进程利用CurrentRegion属性选择工作表上A5单元格当前的区域,当前区域是一个边缘是任意空行和空列组合成的范围。
运行CurrentSelect进程将选择A5到B6单元格区域,如图16所示。
图16CurrentRegion属性选择当前的区域
技巧2选定单元格区域的方式
2-1利用Select方式
在VBA中一样利用Select方式选定单元格或单元格区域,如下面的代码所示。
#001SubRngSelect()
#002
#003("
A1:
B10"
RngSelect进程利用Select方式选定Sheet3中的A1:
B10单元格区域,Select方式应用于Range对象时语法如下:
(Replace)
参数expression是必需的,一个有效的对象。
参数Replace是可选的,要替换的对象。
利用Select方式选定单元格时,单元格所在的工作表必需为活动工作表,因此在第2行代码中先利用Activate方式使Sheet3成为活动工作表,不然Select方式有可能犯错,显示如图21所示的错误提示。
图21Select方式无效提示
2-2利用Activate方式
还能够利用Activate方式选定单元格或单元格区域,如下面的代码所示。
#001SubRngActivate()
).Activate
RngActivate进程利用Activate方式选定Sheet3中的A1:
B10单元格区域,Activate方式应用于Range对象时语法如下:
利用Activate方式选定单元格时,单元格所在的工作表也必需为活动工作表,不然Activate方式有可能犯错,显示如图22所示的错误提示。
图22Activate方式无效提示
2-3利用Goto方式
利用Goto方式无需使单元格所在的工作表成为活动工作表,如下面的代码所示。
#001SubRngGoto()
#002Reference:
=("
),scroll:
=True
RngGoto进程利用Goto方式选定Sheet3中的A1:
B10单元格区域,并转动工作表以显示该单元格。
Goto方式选定任意工作簿中的任意区域或任意VisualBasic进程,而且若是该工作簿未处于活动状态,就激活该工作簿,语法如下:
(Reference,Scroll)
参数expression是必需的,返回一个Application对象。
参数Reference是可选的,Variant类型,指定目标。
能够是Range对象、包括R1C1-样式记号的单元格引用的字符串或包括VisualBasic进程名的字符串。
若是省略本参数,目标将是最近一次用Goto方式选定的区域。
参数Scroll是可选的,Variant类型,若是该值为True,那么转动窗口直至目标区域的左上角单元格出此刻窗口的左上角。
若是该值为False,那么不转动窗口。
默许值为False。
技巧3取得指定行、列中的最后一个非空单元格
利用VBA对工作表进行操作时,常常需要定位到指定行或列中最后一个非空单元格,现在能够利用Range对象的End属性,在取得单元格对象后便能取得该单元格的相关属性,如单元格地址、行列号、数值等,如下面的代码所示。
#001SubLastRow()
#002DimrngAsRange
#003Setrng=("
A65536"
).End(xlUp)
#004MsgBox"
A列中最后一个非空单元格是"
&
(0,0)_
#005&
"
行号"
数值"
#006Setrng=Nothing
#007EndSub
LastRow进程利用消息框显示工作表中A列最后非空单元格的地址、行号和数值。
End属性返回一个Range对象,该对象代表包括源区域的区域尾端的单元格。
等同于按键<
End+向上键>
、<
End+向下键>
End+向左键>
或<
End+向右键>
,语法如下:
(Direction)
参数Direction是可选的,所要移动的方向,能够为表格31所示的XlDirection常量之一。
常量
值
描述
xlDown
-4121
向下
xlToRight
-4161
向右
xlToLeft
-4159
向左
xlUp
-4162
向上
表格31XlDirection常量
Range对象的End属性返回的是一个Range对象,因此能够直接利用该对象的属性和方式。
运行LastRow进程结果如图31所示。
图31取得A列最后一个非空单元格
通过修改相应的参数,能够取得指定行中最后一个非空单元格,如下面的代码所示。
#001SubLastColumn()
IV1"
).End(xlToLeft)
第一行中最后一个非空单元格是"
列号"
LastColumn进程利用消息框显示工作表中第一行最后一个非空单元格的地址、列号和数值,如图32所示。
图32取得第一行最后一个非空单元格
技巧4定位单元格
在Excel中利用定位对话框能够选中工作表中特定的单元格区域,而在VBA中那么利用SpecialCells方式,如下面的代码所示。
#001SubSpecialAddress()
#003Setrng=
#005MsgBox"
工作表中有公式的单元格为:
SpecialAddress进程利用SpecialCells方式选中工作表中有公式的单元格,并用消息框显示其地址。
SpecialCells方式返回一个Range对象,该对象代表与指定类型及值相匹配的所有单元格,语法如下:
(Type,Value)
参数expression是必需的,返回一个有效的对象。
参数Type是必需的,要包括的单元格,可为表格41所列的XlCellType常量之一。
xlCellTypeAllFormatConditions
-4172
任意格式单元格
xlCellTypeAllValidation
-4174
含有验证条件的单元格
xlCellTypeBlanks
4
空单元格
xlCellTypeComments
-4144
含有注释的单元格
xlCellTypeConstants
2
含有常量的单元格
xlCellTypeFormulas
-4123
含有公式的单元格
xlCellTypeLastCell
11
使用区域中最后的单元格
xlCellTypeSameFormatConditions
-4173
含有相同格式的单元格
xlCellTypeSameValidation
-4175
含有相同验证条件的单元格
xlCellTypeVisible
12
所有可见单元格
表格41XlCellType常量
第3行代码将SpecialCells方式的Type参数设置为xlCellTypeFormulas,返回的是含有公式的单元格,通过修改相应的参数能够返回不同的单元格。
参数Value是可选的,若是Type参数为xlCellTypeConstants或xlCellTypeFormulas,此参数可用于确信结果中应包括哪几类单元格。
将某几个值相加可使此方式返回多种类型的单元格。
若是省略将选定所有常量或公式,可为表格42所列的XlSpecialCellsValue常量之一。
xlErrors
16
错误
xlLogical
逻辑值
xlNumbers
1
数字
xlTextValues
文本
表格42XlSpecialCellsValue常量
第5行代码利用消息框显示工作表中含有公式单元格的地址。
SpecialCells方式返回的是Range对象,因此能够直接利用该对象的属性和方式。
运行SpecialAddress进程结果如图41所示。
图41SpecialCells方式
技巧5查找单元格
5-1利用Find方式
在Excel中利用查找对话框能够查找工作表中特定内容的单元格,而在VBA中那么利用Find方式,如下面的代码所示。
#001SubRngFind()
#002DimStrFindAsString
#003DimRngAsRange
#004StrFind=InputBox("
请输入要查找的值:
"
)
#005IfTrim(StrFind)<
>
Then
#006With("
A:
A"
#007SetRng=.Find(What:
=StrFind,_
#008After:
=.Cells(.,_
#009LookIn:
=xlValues,_
#010LookAt:
=xlWhole,_
#011SearchOrder:
=xlByRows,_
#012SearchDirection:
=xlNext,_
#013MatchCase:
=False)
#014IfNotRngIsNothingThen
#015Rng,True
#016Else
#017MsgBox"
没有找到该单元格!
#018EndIf
#019EndWith
#020EndIf
#021EndSub
RngFind进程利用Find方式在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值,并查找该值所在的第一个单元格。
第6到第13行代码在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值。
应用于Range对象的Find方式在区域中查找特定信息,并返回Range对象,该对象代表用于查找信息的第一个单元格。
若是未发觉匹配单元格,就返回Nothing,语法如下:
(What,After,LookIn,LookAt,SearchOrder,SearchDirection,MatchCase,MatchByte,SerchFormat)
参数What是必需的,要搜索的数据,可为字符串或任意数据类型。
参数After是可选的,表示搜索进程将从其以后开始进行的单元格,必需是区域中的单个单元格。
查找时是从该单元格以后开始的,直到本方式绕回到指定的单元格时,才对其进行搜索。
若是未指定本参数,搜索将从区域的左上角单元格以后开始。
在本例中将After参数设置为A列的最后一个单元格,因此查找时从A1单元格开始搜索。
参数LookIn是可选的,信息类型。
参数LookAt是可选的,可为XlLookAt常量的xlWhole或xlPart之一。
参数SearchOrder是可选的,可为XlSearchOrder常量的xlByRows或xlByColumns之一。
参数SearchDirection是可选的,搜索的方向,可为XlSearchDirection常量的xlNext或xlPrevious之一。
参数MatchCase是可选的,假设为True,那么进行区分大小写的查找。
参数MatchByte是可选的,仅在选择或安装了双字节语言支持时利用。
假设为True,那么双字节字符仅匹配双字节字符。
假设为False,那么双字节字符可匹配其等价的单字节字符。
参数SerchFormat是可选的,搜索的格式。
每次利用Find方式后,参数LookIn、LookAt、SearchOrder和MatchByte的设置将保留。
若是下次挪用Find方式时不指定这些参数的值,就利用保留的值。
因此每次利用该方式时请明确设置这些参数。
若是工作表的A列中存在重复的数值,那么需要利用FindNext方式或FindPrevious方式进行重复搜索,如下面的代码所示。
#001SubRngFindNext()
#004DimFindAddressAsString
#005StrFind=InputBox("
#006IfTrim(StrFind)<
#007With("
#008SetRng=.Find(What:
#009After:
#010LookIn:
#011LookAt:
#012SearchOrder:
#013SearchDirection:
#014MatchCase:
#015IfNotRngIsNothingThen
#016FindAddress=
#017Do
#018=6
#019SetRng=.FindNext(Rng)
#020LoopWhileNotRngIsNothingAnd<
FindAddress
#021EndIf
#022EndWith
#023EndIf
#024EndSub
RngFindNext进程在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值,并将查到单元格底色设置成黄色。
第8行到第17行代码利用Find方式在工作表Sheet1的A列中查找。
第16行代码将查找到的第一个单元格地址赋给字符串变量FindAddress。
第18行代码将查找到的单元格底色设置成黄色。
第19行代码利用FindNext方式进行重复搜索。
FindNext方式继续执行用Find方式启动的搜索。
查找下一个匹配相同条件的单元格并返回代表单元格的Range对象,语法如下:
(After)
参数expression是必需的,返回一个Range对象。
参数After是可选的,指定一个单元格,查找将从该单元格以后开始。
第20行代码若是查找到的单元格地址等于字符串变量FindAddress所记录的地址,说明A列已搜索完毕,终止查找进程。
运行RngFindNext进程,在InputBox函数输入框中输入“”后结果如图51所示。
图51利用FindNext方式重复搜索
还能够利用FindPrevious方式进行重复搜索,FindPrevious方式的语法如下:
FindPrevious方式和FindNext方式唯一的区别是FindPrevious方式查找匹配相同条件的前一个单元格而FindNext方式是查找匹配相同条件的下一个单元格。
5-2利用Like运算符
利用Like运算符能够进行更为复杂的模式匹配查找,如下面的代码所示。
#001SubRngLike()
#003DimaAsInteger
#004a=1
#0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VBA 技术 详细 教程