`

VBA语法

阅读更多
VBA语言基础
第一节 标识符 [/b]
一.定义
标识符是一种标识变量、常量、过程、函数、类等语言构成单位的符号,利用它可以完成对变量、常量、过程、函数、类等的引用。
二.命名规则
1) 字母打头,由字母、数字和下划线组成,如 A987b_23Abc
2) 字符长度小于40,(Excel2002以上中文版等,可以用汉字且长度可达254个字符)
3) 不能与VB保留字重名,如public, private, dim, goto, next, with, integer, single等
[b]第二节 运算符

定义:运算符是代表VB某种运算功能的符号。
1)赋值运算符 =
2)数学运算符 &、+ (字符连接符)、+(加)、-(减)、Mod(取余)、\(整除)、*(乘)、/(除)、-(负号)、^(指数)
3)逻辑运算符Not(非)、And(与)、Or(或)、Xor(异或)、Eqv(相等)、Imp(隐含)
4)关系运算符 = (相同)、<>(不等)、>(大于)、<(小于)、>=(不小于)、<=(不大于)、Like、Is
5)位运算符 Not(逻辑非)、And(逻辑与)、Or(逻辑或)、Xor(逻辑异或)、Eqv(逻辑等)、Imp(隐含)
第三节 数据类型
VBA共有12种数据类型,具体见下表,此外用户还可以根据以下类型用Type自定义数据类型。
数据类型 类型标识符 字节
字符串型 String $ 字符长度(0-65400)
字节型 Byte 无 1
布尔型 Boolean 无 2
整数型 Integer % 2
长整数型 Long & 4
单精度型 Single ! 4
双精度型 Double # 8
日期型 Date 无 8 公元100/1/1-9999/12/31
货币型 Currency @ 8
小数点型 Decimal 无 14
变体型 Variant 无 以上任意类型,可变
对象型 Object 无 4
第四节 变量与常量
1)VBA允许使用未定义的变量,默认是变体变量。
2)在模块通用说明部份,加入 Option Explicit 语句可以强迫用户进行变量定义。
3)变量定义语句及变量作用域
Dim 变量 as 类型 '定义为局部变量,如 Dim xyz as integer
Private 变量 as 类型 '定义为私有变量,如 Private xyz as byte
Public 变量 as 类型 '定义为公有变量,如 Public xyz as single
Global 变量 as 类型 '定义为全局变量,如 Globlal xyz as date
Static 变量 as 类型 '定义为静态变量,如 Static xyz as double
一般变量作用域的原则是,那部份定义就在那部份起作用,模块中定义则在该模块那作用。
4)常量为变量的一种特例,用Const定义,且定义时赋值,程序中不能改变值,作用域也如同变量作用域。如下定义:Const Pi=3.1415926 as single
第五节 数组
数组是包含相同数据类型的一组变量的集合,对数组中的单个变量引用通过数组索引下标进行。在内存中表现为一个连续的内存块,必须用Global或Dim语句来定义。定义规则如下:
Dim 数组名([lower to ]upper [, [lower to ]upper, ….]) as type ;Lower缺省值为0。二维数组是按行列排列,如XYZ(行,列)。
除了以上固定数组外,VBA还有一种功能强大的动态数组,定义时无大小维数声明;在程序中再利用Redim语句来重新改变数组大小,原来数组内容可以通过加preserve关键字来保留。如下例:
Dim array1() as double : Redim array1(5) : array1(3)=250 : Redim preserve array1(5,10)
第六节 注释和赋值语句
1)注释语句是用来说明程序中某些语句的功能和作用;VBA中有两种方法标识为注释语句。
ü 单引号 ’ ;如:’定义全局变量;可以位于别的语句之尾,也可单独一行
ü Rem ;如:Rem定义全局变量;只能单独一行
2)赋值语句是进行对变量或对象属性赋值的语句,采用赋值号 =,如X=123:Form1.caption=”我的窗口”
对对象的赋值采用:set myobject=object 或 myobject:=object
第七节 书写规范
1)VBA不区分标识符的字母大小写,一律认为是小写字母;
2)一行可以书写多条语句,各语句之间以冒号 : 分开;
3)一条语句可以多行书写,以空格加下划线 _ 来标识下行为续行;
4)标识符最好能简洁明了,不造成歧义。
第八节 判断语句
1)If…Then…Else语句
If condition Then [statements][Else elsestatements]
如1:If A>B And C<D Then A=B+2 Else A=C+2
如2:If x>250 Then x=x-100
或者,可以使用块形式的语法:
If condition Then
[statements]
[ElseIf condition-n Then
[elseifstatements] ...
[Else
[elsestatements]]
End If
如1:
If Number < 10 Then
Digits = 1
ElseIf Number < 100 Then
Digits = 2
Else
Digits = 3
End If
2)Select Case…Case…End Case语句
如1:
Select Case Pid
Case “A101”
Price=200
Case “A102”
Price=300
……
Case Else
Price=900
End Case
3)Choose 函数
choose(index, choce-1,choice-2,…,choice-n),可以用来选择自变量串列中的一个值,并将其返回,index 必要参数,数值表达式或字段,它的运算结果是一个数值,且界于 1 和可选择的项目数之间。choice 必要参数,Variant表达式,包含可选择项目的其中之一。如:
GetChoice = Choose(Ind, "Speedy", "United", "Federal")
4)Switch函数
Switch(expr-1, value-1[, expr-2, value-2 _ [, expr-n,value-n]])
switch函数和Choose函数类似,但它是以两个一组的方式返回所要的值,在串列中,最先为TRUE的值会被返回。 expr 必要参数,要加以计算的 Variant 表达式。value 必要参数。如果相关的表达式为 True,则返回此部分的数值或表达式,没有一个表达式为 True,Switch 会返回一个 Null值。
第九节 循环语句
1)For Next语句 以指定次数来重复执行一组语句
For counter = start To end [Step step] ' step 缺省值为1
[statements]
[Exit For]
[statements]
Next [counter]
如1:
For Words = 10 To 1 Step -1 ' 建立 10 次循环
For Chars = 0 To 9 ' 建立 10 次循环
MyString = MyString & Chars ' 将数字添加到字符串中
Next Chars ' Increment counter
MyString = MyString & " " ' 添加一个空格
Next Words
2)For Each…Next语句 主要功能是对一个数组或集合对象进行,让所有元素重复执行一次语句
For Each element In group
Statements
[Exit for]
Statements
Next [element]
如1:
For Each rang2 In range1
With range2.interior
.colorindex=6
.pattern=xlSolid
End with
Next
这上面一例中用到了 With…End With 语句,目的是省去对象多次调用,加快速度;语法为:
With object
[statements]
End With
3)Do…loop语句 在条件为true时,重复执行区块命令
Do {while |until} condition ' while 为当型循环,until为直到型循环,顾名思义,不多说啦
Statements
Exit do
Statements
Loop
或者使用下面语法
Do ' 先do 再判断,即不论如何先干一次再说
Statements
Exit do
Statements
Loop {while |until} condition
第十节 其他类语句和错误语句处理
一.其他循环语句
结构化程序使用以上判断和循环语句已经足够,建议不要轻易使用下面的语句,虽然VBA还支持。
1) Goto line 该语句为跳转到line语句行
2) On expression gosub destinatioinlist 或者 on expression goto destinationlist 语句为根据 exprssion表达式值来跳转到所要的行号或行标记
3) Gosub line…line…Return语句, Return 返回到 Gosub line行,如下例:
Sub gosubtry()
Dim num
Num=inputbox(“输入一个数字,此值将会被判断循环”)
If num>0 then Gosub Routine1 :Debug.print num:Exit sub
Routine1:
Num=num/5
Return
End sub
4) while…wend语句,只要条件为TRUE,循环就执行,这是以前VB老语法保留下来的,如下例:
while condition ‘while I<50
[statements] ‘I=I+1
wend ‘Wend
二.错误语句处理
执行阶段有时会有错误的情况发生,利用On Error语句来处理错误,启动一个错误的处理程序。语法如下:
On Error Goto Line ‘当错误发生时,会立刻转移到line行去
On Error Resume Next ‘当错误发生时,会立刻转移到发生错误的下一行去
On Erro Goto 0 ‘当错误发生时,会立刻停止过程中任何错误处理过程
第十一节 过程和函数
过程是构成程序的一个模块,往往用来完成一个相对独立的功能。过程可以使程序更清晰、更具结构性。VBA具有四种过程:Sub 过程、Function函数、Property属性过程和Event事件过程。
一.Sub过程
Sub 过程的参数有两种传递方式:按值传递(ByVal)和按地址传递(ByRef)。如下例:
Sub password (ByVal x as integer, ByRef y as integer)
If y=100 then y=x+y else y=x-y
x=x+100
End sub
Sub call_password ()
Dim x1 as integer
Dim y1 as integer
x1=12
y1=100
Call password (x1,y1) ‘调用过程方式:1. Call 过程名(参数1, 参数2…) ; 2. 过程名 参数1, 参数2…
debug.print x1,y1 ‘结果是12、112,y1按地址传递改变了值,而x1按值传递,未改变原值
End sub
二.Function函数
函数实际是实现一种映射,它通过一定的映射规则,完成运算并返回结果。参数传递也两种:按值传递(ByVal)和按地址传递(ByRef)。如下例:
Function password(ByVal x as integer, byref y as integer) as boolean
If y=100 then y=x+y else y=x-y
x=x+100
if y=150 then password=true else password=false
End Function
Sub call_password ()
Dim x1 as integer
Dim y1 as integer
x1=12
y1=100
if password then ‘调用函数:1. 作为一个表达式放在=右端 ; 2. 作为参数使用
debug.print x1
end if
End sub
三.Property属性过程和Event事件过程
这是VB在对象功能上添加的两个过程,与对象特征密切相关,也是VBA比较重要组成,技术比较复杂,可以参考相关书籍。
第十二节内部函数
在VBA程序语言中有许多内置函数,可以帮助程序代码设计和减少代码的编写工作。
一.测试函数
IsNumeric(x) ‘是否为数字, 返回Boolean结果,True or False
IsDate(x) ‘是否是日期, 返回Boolean结果,True or False
IsEmpty(x) ‘是否为Empty, 返回Boolean结果,True or False
IsArray(x) ‘指出变量是否为一个数组。
IsError(expression) ‘指出表达式是否为一个错误值
IsNull(expression) ‘指出表达式是否不包含任何有效数据 (Null)。
IsObject(identifier) ‘指出标识符是否表示对象变量
二.数学函数
Sin(X)、Cos(X)、Tan(X)、Atan(x) 三角函数,单位为弧度
Log(x) 返回x的自然对数
Exp(x)返回 ex
Abs(x) 返回绝对值
Int(number)、Fix(number) 都返回参数的整数部分,区别:Int 将 -8.4 转换成 -9,而 Fix 将-8.4 转换成 -8
Sgn(number) 返回一个 Variant (Integer),指出参数的正负号
Sqr(number) 返回一个 Double,指定参数的平方根
VarType(varname) 返回一个 Integer,指出变量的子类型
Rnd(x)返回0-1之间的单精度数据,x为随机种子
三.字符串函数
Trim(string) 去掉string左右两端空白
Ltrim(string) 去掉string左端空白
Rtrim(string) 去掉string右端空白
Len(string) 计算string长度
Left(string, x) 取string左段x个字符组成的字符串
Right(string, x) 取string右段x个字符组成的字符串
Mid(string, start,x) 取string从start位开始的x个字符组成的字符串
Ucase(string) 转换为大写
Lcase(string) 转换为小写
Space(x) 返回x个空白的字符串
Asc(string) 返回一个 integer,代表字符串中首字母的字符代码
Chr(charcode) 返回 string,其中包含有与指定的字符代码相关的字符
四.转换函数
CBool(expression) 转换为Boolean型
CByte(expression) 转换为Byte型
CCur(expression) 转换为Currency型
CDate(expression) 转换为Date型
CDbl(expression) 转换为Double型
CDec(expression) 转换为Decemal型
CInt(expression) 转换为Integer型
CLng(expression) 转换为Long型
CSng(expression) 转换为Single型
CStr(expression) 转换为String型
CVar(expression) 转换为Variant型
Val(string) 转换为数据型
Str(number) 转换为String
五.时间函数
Now 返回一个 Variant (Date),根据计算机系统设置的日期和时间来指定日期和时间。
Date 返回包含系统日期的 Variant (Date)。
Time 返回一个指明当前系统时间的 Variant (Date)。
Timer 返回一个 Single,代表从午夜开始到现在经过的秒数。
TimeSerial(hour, minute, second) 返回一个 Variant (Date),包含具有具体时、分、秒的时间。
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) 返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目
Second(time) 返回一个 Variant (Integer),其值为 0 到 59 之间的整数,表示一分钟之中的某个秒
Minute(time) 返回一个 Variant (Integer),其值为 0 到 59 之间的整数,表示一小时中的某分钟
Hour(time) 返回一个 Variant (Integer),其值为 0 到 23 之间的整数,表示一天之中的某一钟点
Day(date) 返回一个 Variant (Integer),其值为 1 到 31 之间的整数,表示一个月中的某一日
Month(date) 返回一个 Variant (Integer),其值为 1 到 12 之间的整数,表示一年中的某月
Year(date) 返回 Variant (Integer),包含表示年份的整数。
Weekday(date, [firstdayofweek]) 返回一个 Variant (Integer),包含一个整数,代表某个日期是星期几
第十三节 文件操作
1) 文件
Dir[(pathname[, attributes])] ;pathname 可选参数,用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串 (""); attributes 可选参数。常数或数值表达式,其总和用来指定文件属性。如果省略,则会返回匹配 pathname 但不包含属性的文件。
2) 删除
Kill pathname 从磁盘中删除文件, pathname 参数是用来指定一个文件名
RmDir pathname 从磁盘中删除删除目录,pathname 参数是用来指定一个文件夹
3) 打开
Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength] 能够对文件输入/输出 (I/O)。
pathname 必要。字符串表达式,指定文件名,该文件名可能还包括目录、文件夹及驱动器。
mode 必要。关键字,指定文件方式,有 Append、Binary、Input、Output、或 Random 方式。如果未指定方式,则以 Random 访问方式打开文件。
access 可选。关键字,说明打开的文件可以进行的操作,有 Read、Write、或 Read Write 操作。
lock 可选。关键字,说明限定于其它进程打开的文件的操作,有 Shared、Lock Read、Lock Write、和 Lock Read Write 操作。
filenumber 必要。一个有效的文件号,范围在 1 到 511 之间。使用 FreeFile 函数可得到下一个可用的文件号。 reclength 可选。小于或等于 32,767(字节)的一个数。对于用随机访问方式打开的文件,该值就是记录长度。对于顺序文件,该值就是缓冲字符数。
说明 对文件做任何 I/O 操作之前都必须先打开文件。Open 语句分配一个缓冲区供文件进行 I/O 之用,并决定缓冲区所使用的访问方式。如果 pathname 指定的文件不存在,那么,在用 Append、Binary、Output、或 Random 方式打开文件时,可以建立这一文件。如果文件已由其它进程打开,而且不允许指定的访问类型,则 Open 操作失败,而且会有错误发生。如果 mode 是 Binary 方式,则 Len 子句会被忽略掉。
重要 在 Binary、Input 和 Random 方式下可以用不同的文件号打开同一文件,而不必先将该文件关闭。在 Append 和 Output 方式下,如果要用不同的文件号打开同一文件,则必须在打开文件之前先关闭该文件。
4) 读入
Input #filenumber, varlist 从已打开的顺序文件中读出数据并将数据指定给变量
Get [#]filenumber, [recnumber], varname将一个已打开的磁盘文件读入一个变量之中。
5) 写入
Write #filenumber, [outputlist] 将数据写入顺序文件
Print #filenumber, [outputlist] 将格式化显示的数据写入顺序文件中
Put [#]filenumber, [recnumber], varname 将一个变量的数据写入磁盘文件中。
6) 关闭
Close [filenumberlist] 关闭 Open 语句所打开的输入/输出 (I/O) 文件
注意 如果今后想用 Input # 语句读出文件的数据,就要用 Write # 语句而不用 Print # 语句将数据写入文件。因为在使用 Write # 时,将数据域分界就可确保每个数据域的完整性,因此可用 Input # 再将数据读出来。使用 Write # 还能确保任何地区的数据都被正确读出。Write 与 Print # 语句不同,当要将数据写入文件时,Write # 语句会在项目和用来标记字符串的引号之间插入逗号。Write # 语句在将 outputlist 中的最后一个字符写入文件后会插入一个新行字符,即回车换行符,(Chr(13) + Chr(10))。
7) 其他文件函数
LOF(filenumber) 返回一个 Long,表示用 Open 语句打开的文件的大小,该大小以字节为单位。
EOF(filenumber) 返回一个 Integer,它包含 Boolean 值 True,表明已经到达为 Random 或顺序 Input 打开的文件的结尾。
Loc(filenumber) 返回一个 Long,在已打开的文件中指定当前读/写位置
Seek(filenumber) 返回一个 Long,在 Open 语句打开的文件中指定当前的读/写位置

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhanghao0722/archive/2008/09/06/2893300.aspx

資料出處:http://blog.excelhome.net/user1/sunxh/archives/2006/589.html
VBA語句集200句
我將學習VBA過程中常用的語句進行了歸納,希望能對Excel愛好者和VBA初學者有所幫助.
VBA語句集
(第1輯)
定製模塊行為
(1) Option Explicit '強制對模塊內所有變量進行聲明
Option Private Module '標記模塊為私有,僅對同一工程中其它模塊有用,在宏對話框中不顯示
Option Compare Text '字符串不區分大小寫
Option Base 1 '指定數組的第一個下標為1
(2) On Error Resume Next '忽略錯誤繼續執行VBA代碼,避免出現錯誤消息
(3) On Error GoTo ErrorHandler '當錯誤發生時跳轉到過程中的某個位置
(4) On Error GoTo 0 '恢復正常的錯誤提示
(5) Application.DisplayAlerts=False '在程序執行過程中使出現的警告框不顯示
(6) Application.ScreenUpdating=False '關閉屏幕刷新
Application.ScreenUpdating=True '打開屏幕刷新
(7) Application.Enable.CancelKey=xlDisabled '禁用Ctrl+Break中止宏運行的功能
工作簿
(8) Workbooks.Add() '創建一個新的工作簿
(9) Workbooks(「book1.xls」).Activate '激活名為book1的工作簿
(10) ThisWorkbook.Save '保存工作簿
(11) ThisWorkbook.close '關閉當前工作簿
(12) ActiveWorkbook.Sheets.Count '獲取活動工作薄中工作表數
(13) ActiveWorkbook.name '返回活動工作薄的名稱
(14) ThisWorkbook.Name 『返回當前工作簿名稱
ThisWorkbook.FullName 『返回當前工作簿路徑和名稱
(15) ActiveWindow.EnableResize=False 『禁止調整活動工作簿的大小
(16) Application.Window.Arrange xlArrangeStyleTiled 『將工作簿以平鋪方式排列
(17) ActiveWorkbook.WindowState=xlMaximized 『將當前工作簿最大化
工作表
(18) ActiveSheet.UsedRange.Rows.Count 『當前工作表中已使用的行數
(19) Rows.Count 『獲取工作表的行數(註:考慮向前兼容性)
(20) Sheets(Sheet1).Name= 「Sum」 '將Sheet1命名為Sum
(21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) '添加一個新工作表在第一工作表前
(22) ActiveSheet.Move After:=ActiveWorkbook. _
Sheets(ActiveWorkbook.Sheets.Count) '將當前工作表移至工作表的最後
(23) Worksheets(Array(「sheet1」,」sheet2」)).Select '同時選擇工作表1和工作表2
(24) Sheets(「sheet1」).Delete或 Sheets(1).Delete '刪除工作表1
(25) ActiveWorkbook.Sheets(i).Name '獲取工作表i的名稱
(26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines '切換工作表中的網格線顯示,這種方法也可以用在其它方面進行相互切換,即相當於開關按鈕
(27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings 『切換工作表中的行列邊框顯示
(28) ActiveSheet.UsedRange.FormatConditions.Delete 『刪除當前工作表中所有的條件格式
(29) Cells.Hyperlinks.Delete 『取消當前工作表所有超鏈接
(30) ActiveSheet.PageSetup.Orientation=xlLandscape
或ActiveSheet.PageSetup.Orientation=2 '將頁面設置更改為橫向
(31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName 『在頁面設置的表尾中輸入文件路徑
ActiveSheet.PageSetup.LeftFooter=Application.UserName 『將用戶名放置在活動工作表的頁腳
單元格/單元格區域
(32) ActiveCell.CurrentRegion.Select
或Range(ActiveCell.End(xlUp),ActiveCell.End(xlDown)).Select
'選擇當前活動單元格所包含的範圍,上下左右無空行
(33) Cells.Select 『選定當前工作表的所有單元格
(34) Range(「A1」).ClearContents '清除活動工作表上單元格A1中的內容
Selection.ClearContents '清除選定區域內容
Range(「A1:D4」).Clear '徹底清除A1至D4單元格區域的內容,包括格式
(35) Cells.Clear '清除工作表中所有單元格的內容
(36) ActiveCell.Offset(1,0).Select '活動單元格下移一行,同理,可下移一列
(37) Range(「A1」).Offset(ColumnOffset:=1)或Range(「A1」).Offset(,1) 『偏移一列
Range(「A1」).Offset(Rowoffset:=-1)或Range(「A1」).Offset(-1) 『向上偏移一行
(38) Range(「A1」).Copy Range(「B1」) '複製單元格A1,粘貼到單元格B1中
Range(「A1:D8」).Copy Range(「F1」) '將單元格區域複製到單元格F1開始的區域中
Range(「A1:D8」).Cut Range(「F1」) '剪切單元格區域A1至D8,複製到單元格F1開始的區域中
Range(「A1」).CurrentRegion.Copy Sheets(「Sheet2」).Range(「A1」) '複製包含A1的單元格區域到工作表2中以A1起始的單元格區域中
註:CurrentRegion屬性等價於定位命令,由一個矩形單元格塊組成,周圍是一個或多個空行或列
(39) ActiveWindow.RangeSelection.Value=XX '將值XX輸入到所選單元格區域中
(40) ActiveWindow.RangeSelection.Count '活動窗口中選擇的單元格數
(41) Selection.Count '當前選中區域的單元格數
(42) GetAddress=Replace(Hyperlinkcell.Hyperlinks(1).Address,mailto:,」」) 『返回單元格中超級鏈接的地址並賦值
(43) TextColor=Range(「A1」).Font.ColorIndex 『檢查單元格A1的文本顏色並返回顏色索引
Range(「A1」).Interior.ColorIndex 『獲取單元格A1背景色
(44) cells.count 『返回當前工作表的單元格數
(45) Selection.Range(「E4」).Select 『激活當前活動單元格下方3行,向右4列的單元格
(46) Cells.Item(5,」C」) 『引單元格C5
Cells.Item(5,3) 『引單元格C5
(47) Range(「A1」).Offset(RowOffset:=4,ColumnOffset:=5)
或 Range(「A1」).Offset(4,5) 『指定單元格F5
(48) Range(「B3」).Resize(RowSize:=11,ColumnSize:=3)
Rnage(「B3」).Resize(11,3) 『創建B3:D13區域
(49) Range(「Data」).Resize(,2) 『將Data區域擴充2列
(50) Union(Range(「Data1」),Range(「Data2」)) 『將Data1和Data2區域連接
(51) Intersect(Range(「Data1」),Range(「Data2」)) 『返回Data1和Data2區域的交叉區域
(52) Range(「Data」).Count 『單元格區域Data中的單元格數
Range(「Data」). Columns.Count 『單元格區域Data中的列數
Range(「Data」). Rows.Count 『單元格區域Data中的行數
(53) Selection.Columns.Count 『當前選中的單元格區域中的列數
Selection.Rows.Count 『當前選中的單元格區域中的行數
(54) Selection.Areas.Count 『選中的單元格區域所包含的區域數
(55) ActiveSheet.UsedRange.Row 『獲取單元格區域中使用的第一行的行號
(56) Rng.Column 『獲取單元格區域Rng左上角單元格所在列編號
(57) ActiveSheet.Cells.SpecialCells(xlCellTypeAllFormatConditions) 『在活動工作表中返回所有符合條件格式設置的區域
(58) Range(「A1」).AutoFilter Field:=3,VisibleDropDown:=False 『關閉由於執行自動篩選命令產生的第3個字段的下拉列表
名稱
(59) Range(「A1:C3」).Name=「computer」 『命名A1:C3區域為computer
或Range(「D1:E6」).Name=「Sheet1!book」 『命名局部變量,即Sheet1上區域D1:E6為book
或 Names(「computer」).Name=「robot」 『將區域computer重命名為robot
(60) Names(「book」).Delete 『刪除名稱
(61) Names.Add Name:=「ContentList」,_
RefersTo:=「=OFFSET(Sheet1!A2,0,0,COUNTA(Sheet2!$A:$A))」 『動態命名列
(62) Names.Add Name:=「Company」,RefersTo:=「CompanyCar」 『命名字符串CompanyCar
(63) Names.Add Name:=「Total」,RefersTo:=123456 『將數字123456命名為Total。注意數字不能加引號,否則就是命名字符串了。
(64) Names.Add Name:=「MyArray」,RefersTo:=ArrayNum 『將數組ArrayNum命名為MyArray。
(65) Names.Add Name:=「ProduceNum」,RefersTo:=「=$B$1」,Visible:=False 『將名稱隱藏
(66) ActiveWorkbook.Names(「Com」).Name 『返回名稱字符串
公式與函數
(67) Application.WorksheetFunction.IsNumber(「A1」) '使用工作表函數檢查A1單元格中的數據是否為數字
(68) Range(「A:A」).Find(Application.WorksheetFunction.Max(Range(「A:A」))).Activate
'激活單元格區域A列中最大值的單元格
(69) Cells(8,8).FormulaArray=「=SUM(R2C[-1]:R[-1]C[-1]*R2C:R[-1]C)」 『在單元格中輸入數組公式。注意必須使用R1C1樣式的表達式
圖表
(70) ActiveSheet.ChartObjects.Count '獲取當前工作表中圖表的個數
(71) ActiveSheet.ChartObjects(「Chart1」).Select 『選中當前工作表中圖表Chart1
(72) ActiveSheet.ChartObjects(「Chart1」).Activate
ActiveChart.ChartArea.Select 『選中當前圖表區域
(73) WorkSheets(「Sheet1」).ChartObjects(「Chart2」).Chart. _
ChartArea.Interior.ColorIndex=2 『更改工作表中圖表的圖表區的顏色
(74) Sheets(「Chart2」).ChartArea.Interior.ColorIndex=2 『更改圖表工作表中圖表區的顏色
(75) Charts.Add 『添加新的圖表工作表
(76) ActiveChart.SetSourceData Source:=Sheets(「Sheet1」).Range(「A1:D5」), _
PlotBy:=xlColumns 『指定圖表數據源並按列排列
(77) ActiveChart.Location Where:=xlLocationAsNewSheet 『新圖表作為新圖表工作表
(78) ActiveChart.PlotArea.Interior.ColorIndex=xlNone 『將繪圖區顏色變為白色
(79) WorkSheets(「Sheet1」).ChartObjects(1).Chart. _
Export FileName:=「C:MyChart.gif」,FilterName:=「GIF」 『將圖表1導出到C盤上並命名為MyChart.gif
窗體
(80) MsgBox 「Hello!」 '消息框中顯示消息Hello
(81) Ans=MsgBox(「Continue?」,vbYesNo) '在消息框中點擊「是」按鈕,則Ans值為vbYes;點擊「否」按鈕,則Ans值為vbNo。
If MsgBox(「Continue?」,vbYesNo)<>vbYes Then Exit Sub '返回值不為「是」,則退出
(82) Config=vbYesNo+vbQuestion+vbDefaultButton2 '使用常量的組合,賦值組Config變量,並設置第二個按鈕為缺省按鈕
(83) MsgBox 「This is the first line.」 & vbNewLine & 「Second line.」 '在消息框中強制換行,可用vbCrLf代替vbNewLine。
(84) MsgBox "the average is :"&Format(Application.WorksheetFunction.Average(Selection),"#,##0.00"),vbInformation, "selection count average" & Chr(13) '應用工作表函數返回所選區域的平均值並按指定格式顯示
(85) Userform1.Show 『顯示用戶窗體
(86) Load Userform1 『加載一個用戶窗體,但該窗體處於隱藏狀態
(87) Userform1.Hide 『隱藏用戶窗體
(88) Unload Userform1 或 Unload Me 『卸載用戶窗體
(89) (圖像控件).Picture=LoadPicture(「圖像路徑」) 『在用戶窗體中顯示圖形
(90) UserForm1.Show 0 或 UserForm1.Show vbModeless 『將窗體設置為無模式狀態
(91) Me.Height=Int(0.88*ActiveWindow.Height) 『窗體高度為當前活動窗口高度的0.88
Me.Width=Int(0.88*ActiveWindow.Width) 『窗體寬度為當前活動窗口高度的0.88
事件
(92) Application.EnableEvents=False '禁用所有事件
Application.EnableEvents=True '啟用所有事件
註:不適用於用戶窗體控件觸發的事件
對象
(93) Set ExcelSheet = CreateObject("Excel.Sheet") 『創建一個Excel工作表對象
ExcelSheet.Application.Visible = True '設置 Application 對象使 Excel 可見
ExcelSheet.Application.Cells(1, 1).Value = "Data" '在表格的第一個單元中輸入文本
ExcelSheet.SaveAs "C:\TEST.XLS" '將該表格保存到C:\test.xls 目錄
ExcelSheet.Application.Quit '關閉 Excel
Set ExcelSheet = Nothing '釋放該對象變量
(94) 『聲明並創建一個Excel對象引用
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.WorkSheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
(95) 『創建並傳遞一個 Excel.Application 對象的引用
Call MySub (CreateObject("Excel.Application"))
(96) Set d = CreateObject(Scripting.Dictionary) 『創建一個 Dictionary 對象變量
(97) d.Add "a", "Athens" '為對象變量添加關鍵字和條目
其他
(98) Application.OnKey 「^I」,」macro」 '設置Ctrl+I鍵為macro過程的快捷鍵
(99) Application.CutCopyMode=False 『退出剪切/複製模式
(100) Application.Volatile True '無論何時工作表中任意單元格重新計算,都會強制計算該函數
Application.Volatile False '只有在該函數的一個或多個參數發生改變時,才會重新計算該函數
By fanjy in 2006-6-4
http://fanjy.blog.excelhome.net/user1/fanjy/archives/2006/477.html
user1/fanjy/archives/2006/493.html
VBA語句集100句(第2輯)
VBA語句集
(第2輯)
*******************************************************
定製模塊行為
(101) Err.Clear 『清除程序運行過程中所有的錯誤
*******************************************************
工作簿
(102) ThisWorkbook.BuiltinDocumentProperties(「Last Save Time」)
或Application.Caller.Parent.Parent.BuiltinDocumentProperties(「Last Save Time」) 『返回上次保存工作簿的日期和時間
(103) ThisWorkbook.BuiltinDocumentProperties("Last Print Date")
或Application.Caller.Parent.Parent.BuiltinDocumentProperties(「Last Print Date」) 『返回上次打印或預覽工作簿的日期和時間
(104) Workbooks.Close 『關閉所有打開的工作簿
(105) ActiveWorkbook.LinkSources(xlExcelLinks)(1) 『返回當前工作簿中的第一條鏈接
(106) ActiveWorkbook.CodeName
ThisWorkbook.CodeName  『返回工作簿代碼的名稱
(107) ActiveWorkbook.FileFormat
ThisWorkbook.FileFormat  『返回當前工作簿文件格式代碼
(108) ThisWorkbook.Path
ActiveWorkbook.Path 『返回當前工作簿的路徑(注:若工作簿未保存,則為空)
(109) ThisWorkbook.ReadOnly
   ActiveWorkbook.ReadOnly 『返回當前工作簿的讀/寫值(為False)
(110) ThisWorkbook.Saved
ActiveWorkbook.Saved 『返回工作簿的存儲值(若已保存則為False)
(111) Application.Visible = False 『隱藏工作簿
   Application.Visible = True 『顯示工作簿
   注:可與用戶窗體配合使用,即在打開工作簿時將工作簿隱藏,只顯示用戶窗體.可設置控制按鈕控制工作簿可見
*******************************************************
工作表
(112) ActiveSheet.Columns("B").Insert 『在A列右側插入列,即插入B列
ActiveSheet.Columns("E").Cut
  ActiveSheet.Columns("B").Insert  『以上兩句將E列數據移至B列,原B列及以後的數據相應後移
ActiveSheet.Columns("B").Cut
  ActiveSheet.Columns("E").Insert 『以上兩句將B列數據移至D列,原C列和D列數據相應左移一列
(113) ActiveSheet.Calculate 『計算當前工作表
(114) ThisWorkbook.Worksheets(「sheet1」).Visible=xlSheetHidden 『正常隱藏工作表,同在Excel菜單中選擇「格式——工作表——隱藏」操作一樣
ThisWorkbook.Worksheets(「sheet1」).Visible=xlSheetVeryHidden 『隱藏工作表,不能通過在Excel菜單中選擇「格式——工作表——取消隱藏」來重新顯示工作表
ThisWorkbook.Worksheets(「sheet1」).Visible=xlSheetVisible 『顯示被隱藏的工作表
(115) ThisWorkbook.Sheets(1).ProtectContents 『檢查工作表是否受到保護
(116) ThisWorkbook.Worksheets.Add Count:=2, _
Before:=ThisWorkbook.Worksheets(2)
或 ThisWorkbook.Workshees.Add ThisWorkbook.Worksheets(2), , 2  『在第二個工作表之前添加兩個新的工作表
(117) ThisWorkbook.Worksheets(3).Copy 『複製一個工作表到新的工作簿
(118) ThisWorkbook.Worksheets(3).Copy ThisWorkbook.Worksheets(2) 『複製第三個工作表到第二個工作表之前
(119) ThisWorkbook.ActiveSheet.Columns.ColumnWidth = 20 『改變工作表的列寬為20
  ThisWorkbook.ActiveSheet.Columns.ColumnWidth = _
ThisWorkbook.ActiveSheet.StandardWidth 『將工作表的列寬恢復為標準值
ThisWorkbook.ActiveSheet.Columns(1).ColumnWidth = 20 『改變工作表列1的寬度為20
(120) ThisWorkbook.ActiveSheet.Rows.RowHeight = 10 『改變工作表的行高為10
  ThisWorkbook.ActiveSheet.Rows.RowHeight = _
ThisWorkbook.ActiveSheet.StandardHeight 『將工作表的行高恢復為標準值
ThisWorkbook.ActiveSheet.Rows(1).RowHeight = 10 『改變工作表的行1的高度值設置為10
(121) ThisWorkbook.Worksheets(1).Activate 『當前工作簿中的第一個工作表被激活
(122) ThisWorkbook.Worksheets("Sheet1").Rows(1).Font.Bold = True 『設置工作表Sheet1中的行1數據為粗體
(123) ThisWorkbook.Worksheets("Sheet1").Rows(1).Hidden = True 『將工作表Sheet1中的行1隱藏
ActiveCell.EntireRow.Hidden = True 『將當前工作表中活動單元格所在的行隱藏
註:同樣可用於列。
(124) ActiveSheet.Range(「A:A」).EntireColumn.AutoFit 『自動調整當前工作表A列列寬
(125) ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlTextValues) 『選中當前工作表中常量和文本單元格
ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlErrors+xlTextValues) 『選中當前工作表中常量和文本及錯誤值單元格
*******************************************************
公式與函數
(126) Application.MacroOptions Macro:=」SumPro」,Category:=4 『將自定義的SumPro函數指定給Excel中的「統計函數」類別
(127) Application.MacroOptions Macro:=」SumPro」, _
Description:=」First Sum,then Product」 『為自定義函數SumPro進行了功能說明
(128) Application.WorksheetFunction.CountA(Range(「A:A」))+1 『獲取A列的下一個空單元格
(129) WorksheetFunction.CountA(Cell.EntireColumn) 『返回該單元格所在列非空單元格的數量
WorksheetFunction.CountA(Cell.EntireRow) 『返回該單元格所在行非空單元格的數量
(130) WorksheetFunction.CountA(Cells) 『返回工作表中非空單元格數量
(131) ActiveSheet.Range(「A20:D20」).Formula=「=Sum(R[-19]C:R[-1]C」』對A列至D列前19個數值求和
*******************************************************
圖表
(132) ActiveWindow.Visible=False
或 ActiveChart.Deselect 『使圖表處於非活動狀態
(133) TypeName(Selection)=」Chart」 『若選中的為圖表,則該語句為真,否則為假
(134) ActiveSheet.ChartObjects.Delete 『刪除工作表上所有的ChartObject對象
  ActiveWorkbook.Charts.Delete 『刪除當前工作簿中所有的圖表工作表
*******************************************************
窗體和控件
(135) UserForms.Add(MyForm).Show 『添加用戶窗體MyForm並顯示
(136)TextName.SetFocus 『設置文本框獲取輸入焦點
(137) SpinButton1.Value=0 『將數值調節鈕控件的值改為0
(138) TextBox1.Text=SpinButton1.Value 『將數值調節鈕控件的值賦值給文本框控件
   SpinButton1.value="/Val(TextBox1.Text)" 『將文本框控件值賦給數值調節鈕控件
   CStr(SpinButton1.Value)=TextBox1.Text 『數值調節鈕控件和文本框控件相比較
(139) UserForm1.Controls.Count 『顯示窗體UserForm1上的控件數目
(140) ListBox1.AddItem 「Command1」 『在列表框中添加Command1
(141) ListBox1.ListIndex 『返回列表框中條目的值,若為-1,則表明未選中任何列表框中的條目
(142) RefEdit1.Text 『返回代表單元格區域地址的文本字符串
   RefEdit1.Text=ActiveWindow.RangeSelection.Address 『初始化RefEdit控件顯示當前所選單元格區域
   Set FirstCell=Range(RefEdit1.Text).Range(「A1」) 『設置某單元格區域左上角單元格
(143) Application.OnTime Now + TimeValue("00:00:15"), "myProcedure" 『等待15秒後運行myProcedure過程
(144) ActiveWindow.ScrollColumn=ScrollBarColumns.Value 『將滾動條控件的值賦值給ActiveWindow對象的ScrollColumn屬性
ActiveWindow.ScrollRow=ScrollBarRows.Value 『將滾動條控件的值賦值給ActiveWindow對象的ScrollRow屬性
(145) UserForm1.ListBox1.AddItem Sheets(「Sheet1」).Cells(1,1) 『將單元格A1中的數據添加到列表框中
ListBox1.List=Product 『將一個名為Product數組的值添加到ListBox1中
ListBox1.RowSource=」Sheet2!SumP」 『使用工作表Sheet2中的SumP區域的值填充列表框
(146) ListBox1.Selected(0) 『選中列表框中的第一個條目(註:當列表框允許一次選中多個條目時,必須使用Selected屬性)
(147) ListBox1.RemoveItem ListBox1.ListIndex 『移除列表框中選中的條目
*******************************************************
對象
Application對象
(148) Application.UserName 『返回應用程序的用戶名
(149) Application.Caller 『返回代表調用函數的單元格
(150) Application.Caller.Parent.Parent 『返回調用函數的工作簿名稱
(151) Application.StatusBar=」請等待……」 『將文本寫到狀態欄
  Application.StatusBar=」請等待……」 & Percent & 「% Completed」 『更新狀態欄文本,以變量Percent代表完成的百分比
  Application.StatusBar=False 『將狀態欄重新設置成正常狀態
(152) Application.Goto Reference:=Range(「A1:D4」) 『指定單元格區域A1至D4,等同於選擇「編輯——定位」,指定單元格區域為A1至D4,不會出現「定位」對話框
(153) Application.Dialogs(xlDialogFormulaGoto).Show 『顯示「定位」對話框,但定位條件按鈕無效
(154) Application.Dialogs(xlDialogSelectSpecial).Show 『顯示「定位條件」對話框
(155) Application.Dialogs(xlDialogFormatNumber).show 『顯示「單元格格式」中的「數字」選項卡
  Application.Dialogs(xlDialogAlignment).show 『顯示「單元格格式」中的「對齊」選項卡
Application.Dialogs(xlDialogFontProperties).show 『顯示「單元格格式」中的「字體」選項卡
Application.Dialogs(xlDialogBorder).show 『顯示「單元格格式」中的「邊框」選項卡
Application.Dialogs(xlDialogPatterns).show 『顯示「單元格格式」中的「圖案」選項卡
Application.Dialogs(xlDialogCellProtection).show 『顯示「單元格格式」中的「保護」選項卡
註:無法一次顯示帶選項卡的「單元格格式」對話框,只能一次顯示一個選項卡。
(156) Application.Dialogs(xlDialogFormulaGoto).show Range("b2"), True 『顯示「引用位置」的默認單元格區域並顯示引用使其出現在窗口左上角(註:內置對話框參數的使用)
(157) Application.CommandBars(1).Controls(2).Controls(16).Execute 『執行「定位」話框,相當於選擇菜單「編輯——定位」命令
(158) Application.Transpose(Array(「Sun」,」Mon」,」Tur」,」Wed」,」Thu」,」Fri」,」Sat」)) 『返回一個垂直的數組
(159) Application.Version 『返回使用的Excel版本號
(160) Application.Cursor = xlNorthwestArrow 『設置光標形狀為北西向箭頭
Application.Cursor = xlIBeam 『設置光標形狀為Ⅰ字形
Application.Cursor = xlWait 『設置光標形狀為沙漏(等待)形
Application.Cursor = xlDefault 『恢復光標的默認設置
(161) Application.WindowState 『返回窗口當前的狀態
   Application.WindowState = xlMinimized 『窗口最小化
Application.WindowState = xlMaximized 『窗口最大化
Application.WindowState = xlNormal 『窗口正常狀態
(162) Application.UsableHeight 『獲取當前窗口的高度
Application.UsableWidth 『獲取當前窗口的寬度
(163) Application.ActiveCell.Address 『返回活動單元格的地址(注:返回的是絕對地址)
(164) Application.ActivePrinter 『返回當前打印機的名稱
(165) Application.ActiveSheet.Name 『返回活動工作表的名稱
(166) Application.ActiveWindow.Caption 『返回活動窗口的標題
(167) Application.ActiveWorkbook.Name 『返回活動工作簿的名稱
(168) Application.Selection.Address 『返回所選區域的地址
(169) Application.ThisWorkbook.Name 『返回當前工作簿的名稱
(170) Application.CalculationVersion 『返回Excel計算引擎版本(右邊四位數字)及Excel版本(左邊兩位數字)
(171) Application.MemoryFree 『以字節為單位返回Excel允許使用的內存數(不包括已經使用的內存)
(172) Application.MemoryUsed 『以字節為單位返回Excel當前使用的內存數
(173) Application.MemoryTotal 『以字節為單位返回Excel可以使用的內存數(包括已使用的內存,是MemoryFree和MemoryUsed的總和)
(174) Application.OperatingSystem 『返回所使用的操作系統的名稱和版本
(175) Application.OrganizationName 『返回Excel產品登記使用的組織機構的名稱
(176) Application.FindFormat 『查找的格式種類
   Application.ReplaceFormat 『替換查找到的內容的格式種類
ActiveSheet.Cells.Replace What:=」 「, _
Replacement:=」 「,SearchFormat:=True,ReplaceFormat:=True 『替換查找到的格式
(177) Application.Interactive=False 『忽略鍵盤或鼠標的輸入
(178) Application.Evaluate("Rate") 『若在工作表中定義了常量0.06的名稱為」Rate」,則本語句將返回值0.06
(179) Application.OnUndo 「Undo Option」,「Undo Procedure」 『選擇UndoOption後,將執行Undo Procedure過程
*******************************************************
Range對象
(180) Range(A1:A10).value="/Application.WorksheetFunction.Transpose(MyArray)" 『將一個含有10個元素的數組轉置成垂直方向的工作表單元格區域(A1至A10)
註:因為當把一維數組的內容傳遞給某個單元格區域時,該單元格區域中的單元格必須是水平方向的,即含有多列的一行。若必須使用垂直方向的單元格區域,則必須先將數組進行轉置,成為垂直的。
(181) Range(「A65536」).End(xlUp).Row+1 『返回A列最後一行的下一行
(182) rng.Range(「A1」) 『返回區域左上角的單元格
(183) cell.Parent.Parent.Worksheets 『訪問當前單元格所在的工作簿
(184) Selection.Font.Bold=Not Selection.Font.Bold 『切換所選單元格是否加粗
(185) ActiveSheet.Range("A:B").Sort Key1:=Columns("B"), Key2:=Columns("A"), _
Header:=xlYes 『兩個關鍵字排序,相鄰兩列,B列為主關鍵字,A列為次關鍵字,升序排列
(186) cell.Range(「A1」).NumberFormat 『顯示單元格或單元格區域中的第一個單元格的數字格式
(187) cell.Range(「A1」).HasFormula 『檢查單元格或單元格區域中的第一個單元格是否含有公式
或cell.HasFormula 『工作表中單元格是否含有公式
(188) Cell.EntireColumn 『單元格所在的整列
   Cell.EntireRow 『單元格所在的整行
(189) rng.Name.Name 『顯示rng區域的名稱
(190) rng.Address 『返回rng區域的地址
(191) cell.Range(「A1」).Formula 『返回包含在rng區域中左上角單元格中的公式。
註:若在一個由多個單元格組成的範圍內使用Formula屬性,會得到錯誤;若單元格中沒有公式,會得到一個字符串,在公式欄中顯示該單元格的值。
(192) Range(「D5:D10」).Cells(1,1) 『返回單元格區域D5:D10中左上角單元格
(193) ActiveCell.Row 『活動單元格所在的行數
   ActiveCell.Column 『活動單元格所在的列數
(194) Range("A1:B1").HorizontalAlignment = xlLeft 『當前工作表中的單元格區域數據設置為左對齊
(195) ActiveSheet.Range(「A2:A10」).NumberFormat=」#,##0」 『設置單元格區域A2至A10中數值格式
(196) rng.Replace 「 「,」0」  『用0替換單元格區域中的空單元格
*******************************************************
Collection與object
(197) Dim colMySheets As New Collection
Public colMySheets As New Collection  『聲明新的集合變量
(198) Set MyRange=Range(「A1:A5」) 『創建一個名為MyRange的對象變量
(199) <object>.Add Cell.Value CStr(Cell.Value) 『向集合中添加惟一的條目(即將重複的條目忽略)
*******************************************************
Windows API
(200) Declare Function GetWindowsDirectoryA Lib 「kernel32」 _
(ByVal lpBuffer As String,ByVal nSize As Long) As Long 『API函數聲明。返回安裝Windows所在的目錄名稱,調用該函數後,安裝Windows的目錄名稱將在第一個參數lpBuffer中,該目錄名稱的字符串長度包含在第二個參數nSize中
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics