<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Visual_Basic_for_Applications</id>
	<title>Visual Basic for Applications - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Visual_Basic_for_Applications"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Visual_Basic_for_Applications&amp;action=history"/>
	<updated>2026-06-26T15:55:05Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Visual_Basic_for_Applications&amp;diff=4726&amp;oldid=prev</id>
		<title>61.220.29.72：​地區詞處理</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Visual_Basic_for_Applications&amp;diff=4726&amp;oldid=prev"/>
		<updated>2025-02-14T09:25:02Z</updated>

		<summary type="html">&lt;p&gt;地區詞處理&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{NoteTA&lt;br /&gt;
|zh-cn:宏;zh-tw:巨集;&lt;br /&gt;
}}&lt;br /&gt;
{{Infobox programming language&lt;br /&gt;
| name = Visual Basic for Applications（VBA）&lt;br /&gt;
| logo =Microsoft_Visual_Basic_for_Applications_logo.svg&lt;br /&gt;
| paradigm = [[Multi-paradigm|Multi-paradigm編程語言]]&lt;br /&gt;
| year = 1993年&lt;br /&gt;
| designer =&lt;br /&gt;
| developer = [[Microsoft]]&lt;br /&gt;
| latest release = 7.1(Microsoft Office 2021)&lt;br /&gt;
| typing = 靜態/動態混合，強/弱混合&lt;br /&gt;
| implementations =&lt;br /&gt;
| dialects =&lt;br /&gt;
| influenced_by = [[QuickBASIC]], [[Visual Basic]]&lt;br /&gt;
| influenced =&lt;br /&gt;
| operating_system = [[Microsoft Windows]], [[Mac OS X]]&lt;br /&gt;
| license = [[專有軟件|專有]][[EULA]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;V&amp;#039;&amp;#039;&amp;#039;isual &amp;#039;&amp;#039;&amp;#039;B&amp;#039;&amp;#039;&amp;#039;asic for &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;pplications（&amp;#039;&amp;#039;&amp;#039;VBA&amp;#039;&amp;#039;&amp;#039;）是[[Visual Basic]]的一種[[宏|巨集]]語言，主要能用來擴展Windows的應用程式功能，特別是[[Microsoft Office]]軟體。也可說是一種應用程式視覺化的Basic Script。 1994年發行的[[Excel]] 5.0版本中，即具備了VBA的巨集功能。&lt;br /&gt;
&lt;br /&gt;
== 數據類型 ==&lt;br /&gt;
=== 基本數據類型===&lt;br /&gt;
即Primary Type Data，下述列表的括號內為字節數：&lt;br /&gt;
* Byte (1)：无符号类型，取值范围0-255&lt;br /&gt;
* Boolean (2)&lt;br /&gt;
* Integer (2)&lt;br /&gt;
* Long (4)&lt;br /&gt;
* Single (4)&lt;br /&gt;
* Double (8)&lt;br /&gt;
* Currency (8)&lt;br /&gt;
* Decimal (14)&lt;br /&gt;
* Date (8)&lt;br /&gt;
* String&lt;br /&gt;
* Object (4)&lt;br /&gt;
* Variant （根据分配确定）&lt;br /&gt;
&lt;br /&gt;
===自定义的数据类型===&lt;br /&gt;
相当于C语言的struct，例如：&lt;br /&gt;
 Type 自定义类型名&lt;br /&gt;
      元素名  As 类型&lt;br /&gt;
       …&lt;br /&gt;
      [元素名 As 类型]&lt;br /&gt;
 End Type &lt;br /&gt;
&lt;br /&gt;
===數組===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
Option Base 0 &amp;#039;數組索引值從0開始&lt;br /&gt;
Option Base 1 &amp;#039;數組索引值從1開始&lt;br /&gt;
Dim MyArray(10) &amp;#039;聲明一個數組變量，10是最大的可用的數組索引值&lt;br /&gt;
MyArray(5) = 101 &amp;#039;給數組的元素賦值&lt;br /&gt;
Dim Data(10,5) &amp;#039;聲明一個二維數組變量&lt;br /&gt;
Data(1,1) = &amp;quot;A001&amp;quot; &amp;#039;給數組元素賦值&lt;br /&gt;
Dim cArr(-11 To 20, 1 To 3) As String &amp;#039;聲明一個數組，定義數組索引值的上下界&lt;br /&gt;
Dim dArr() As String &amp;#039;聲明動態數組&lt;br /&gt;
ReDim dArr(0 To 5, 1 To 2) &amp;#039;改變動態數組的尺寸默認把原數據清除。如果保留原來的數據，必須加上參數Preserve。&lt;br /&gt;
                                &amp;#039;使用Preserve參數時只能改變最後一維的大小&lt;br /&gt;
If UBound(vTemp) = -1 Then&lt;br /&gt;
     &amp;#039;判斷數組變量vTemp是否為 空數組&lt;br /&gt;
End If&lt;br /&gt;
Erase MyArrar, Data &amp;#039;Erase語句清除數組元素，釋放變量佔用的空間&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== 常量==&lt;br /&gt;
日期常量由符号“#”将字符括起来，如#2012-1-1#。&lt;br /&gt;
&lt;br /&gt;
系统定义常量有3个：True、False和Null。&lt;br /&gt;
&lt;br /&gt;
固有常量是编程时引用的对象库定义的常量。所有固有常量都可以在宏或VBA代码中使用。通常，固有常量通过前两个字母来指明定义该常量。来自VB库的常量则以“vb”开头。来自Access的常量以“ac”开头。可以使用对象浏览器来查看所有对象库中的固有常量列表。&lt;br /&gt;
&lt;br /&gt;
可以自行定义常量。如：&lt;br /&gt;
 Global Const 符号常量名称 = 常量值&lt;br /&gt;
== 调用DLL ==&lt;br /&gt;
例如：&lt;br /&gt;
 Private Declare Function getFrequency Lib &amp;quot;kernel32&amp;quot; _ Alias &amp;quot;QueryPerformanceFrequency&amp;quot; (cyFrequency As Currency) As Long&lt;br /&gt;
 Private Declare Function getTickCount Lib &amp;quot;kernel32&amp;quot; _ Alias &amp;quot;QueryPerformanceCounter&amp;quot; (cyTickCount As Currency) As Long&lt;br /&gt;
== 控制結構==&lt;br /&gt;
=== if 語句===&lt;br /&gt;
 if 條件1 then&lt;br /&gt;
    語句1&lt;br /&gt;
 elseif 條件2 then&lt;br /&gt;
    語句2&lt;br /&gt;
 elseif ...&lt;br /&gt;
     ...&lt;br /&gt;
 else&lt;br /&gt;
    語句n&lt;br /&gt;
 end if&lt;br /&gt;
=== Select Case 語句 ===&lt;br /&gt;
 Select Case 表達式&lt;br /&gt;
    Case 表達式列表1&lt;br /&gt;
        語句1&lt;br /&gt;
    Case 表達式列表2&lt;br /&gt;
        語句2&lt;br /&gt;
        ...&lt;br /&gt;
    Case 表達式列表n&lt;br /&gt;
        語句n&lt;br /&gt;
 End Select &lt;br /&gt;
&lt;br /&gt;
其中的表達式列表可以为：&lt;br /&gt;
* 表达式                                           例： &amp;quot;A&amp;quot;&lt;br /&gt;
* 用逗号分隔的一组枚举表达式             例：2,4,6,8       &lt;br /&gt;
* 表达式1 To 表达式2                          例：60   To   100 &lt;br /&gt;
* Is 关系运算符表达式                          例：Is  &amp;lt; 60&lt;br /&gt;
=== Do...Loop 語句===&lt;br /&gt;
 Do While或Until 條件&lt;br /&gt;
    語句塊1&lt;br /&gt;
    Exit Do&lt;br /&gt;
    語句塊2&lt;br /&gt;
 Loop&lt;br /&gt;
&lt;br /&gt;
 Do&lt;br /&gt;
    語句塊1&lt;br /&gt;
    Exit Do&lt;br /&gt;
    語句塊2&lt;br /&gt;
 Loop While或Until 條件&lt;br /&gt;
&lt;br /&gt;
=== For...Next語句 ===&lt;br /&gt;
 For 循環控制變量=初值To 終值Step 步長&lt;br /&gt;
    語句塊 ‘Exit For語句可以跳出循環體&lt;br /&gt;
 Next&lt;br /&gt;
=== For Each … Next語句===&lt;br /&gt;
 For Each 循環控制變量 In 集合變量&lt;br /&gt;
    語句塊 &lt;br /&gt;
    Exit For語句可以跳出循環體&lt;br /&gt;
 Next 循環控制變量&lt;br /&gt;
===跳出本次循环的continue语句===&lt;br /&gt;
VBA没有类似C语言的continue语句。通常可如此写程序：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
 For 循環控制變量=初值 To 終值 Step 步長&lt;br /&gt;
    Do &amp;#039;用于模拟continue&lt;br /&gt;
        語句塊 &lt;br /&gt;
        If 条件 Then Exit Do &amp;#039;用于模拟continue&lt;br /&gt;
        語句塊 &lt;br /&gt;
    Loop While False &amp;#039;用于模拟continue&lt;br /&gt;
 Next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== With語句 ===&lt;br /&gt;
 With 對象引用&lt;br /&gt;
    語句塊&lt;br /&gt;
 End With&lt;br /&gt;
=== On Error語句===&lt;br /&gt;
 On Error Goto 出錯處理語句的label &amp;#039;跳轉到出錯處理語句&lt;br /&gt;
或&lt;br /&gt;
 On Error Resume Next &amp;#039;遇到錯誤，不管錯誤，繼續往下執行&lt;br /&gt;
=== 具有控制作用的函数===&lt;br /&gt;
* IIf(条件式,表达式1,表达式2)&lt;br /&gt;
* Switch(条件式1,表达式1,[条件式2,表达式2[,...,条件式n,表达式n]])&lt;br /&gt;
* Choose(索引式,选项1[,选项2,...[,选项n]]) &amp;#039;这是基于1的索引&lt;br /&gt;
==其他語句==&lt;br /&gt;
=== 註釋語句 ===&lt;br /&gt;
使用REM或者單引號開始的行。&lt;br /&gt;
=== 語句的連寫與續行===&lt;br /&gt;
如果一行包括多條語句，用冒號分割各個語句。跨多行的語句，在行末用“空格加下劃線”表示續行。&lt;br /&gt;
== 過程與函數==&lt;br /&gt;
 Sub 過程名(參數表)&lt;br /&gt;
     語句塊&lt;br /&gt;
     Exit Sub&lt;br /&gt;
     語句塊&lt;br /&gt;
 End Sub&lt;br /&gt;
 &lt;br /&gt;
 Function 函數名(參數表) As Type&lt;br /&gt;
    語句塊&lt;br /&gt;
    函數名=表達式&lt;br /&gt;
    Exit Function&lt;br /&gt;
 End Function&lt;br /&gt;
&lt;br /&gt;
可以是Private、Public、Friend、Static等修飾。&lt;br /&gt;
&lt;br /&gt;
调用函数/过程时，可以加括号或者不加括号。如果调用表达式作为一行的一部分，那么必须用参数，例如函数调用的返回值赋给变量。 调用过程时， 可以使用/不使用call关键字。使用call语句调用过程，如果无参数，则不加括号；如果有参数，必须加括号。如果调用时用括号包住单个参数，则该参数强行按值传递。需要特别注意，不用call不加括号的调用，形参与实参是传值(passed by value)而不是传引用(passed by reference)，这会导致一些对象的方法调用失败。例如：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
    Dim cn As ADODB.Connection&lt;br /&gt;
    Set cn = CurrentProject.Connection&lt;br /&gt;
    Dim rs As New ADODB.Recordset    &lt;br /&gt;
    rs.Open &amp;quot;SELECT * FROM myTable&amp;quot; , cn&lt;br /&gt;
&lt;br /&gt;
    Dim ExcelApp As New Excel.Application&lt;br /&gt;
    Dim ExcelWst As Worksheet&lt;br /&gt;
    Set ExcelWst = ExcelApp.Workbooks.Add.Worksheets(1)&lt;br /&gt;
&lt;br /&gt;
    ExcelWst.Range(&amp;quot;A2&amp;quot;).CopyFromRecordset(rs) &amp;#039;失败，无法执行该行&lt;br /&gt;
    ExcelWst.Range(&amp;quot;A2&amp;quot;).CopyFromRecordset rs  &amp;#039;可成功执行该行&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== 常用内置函数 ==&lt;br /&gt;
VBA的常用内置函数列表参见：[https://msdn.microsoft.com/en-us/library/jj692811.aspx] {{Wayback|url=https://msdn.microsoft.com/en-us/library/jj692811.aspx |date=20170203162526 }}&lt;br /&gt;
&lt;br /&gt;
*MsgBox&lt;br /&gt;
*InputBox&lt;br /&gt;
*舍入函数：Fix 向0取整,Int向下取整, Round四舍五入&lt;br /&gt;
*Rnd 返回0-1内的单精度随机数&lt;br /&gt;
*字符串函数：&lt;br /&gt;
**Filter：对字符串的一维数组的过滤&lt;br /&gt;
**InStr([Start, ]&amp;lt;Str1&amp;gt;,&amp;lt;Str2&amp;gt;[, Compare])与InStrRev： 查找子串&lt;br /&gt;
**Len 字符串长度&lt;br /&gt;
**Join：连接一维数组中的所有子字符串&lt;br /&gt;
**Left,Right,Mid 截取子字符串&lt;br /&gt;
**Space(数值) 生成空格字符串&lt;br /&gt;
**Ucase,Lcase 大小写转换函数&lt;br /&gt;
**Ltrim, Rtrim,Trim 删除首尾空格 &lt;br /&gt;
**Replace &lt;br /&gt;
**Split：分割一个字符串成为一维数组  &lt;br /&gt;
**StrComp：字符串比较&lt;br /&gt;
**StrConv：字符串转换&lt;br /&gt;
**String(number, character)：制定字符重复若干次&lt;br /&gt;
**StrReverse&lt;br /&gt;
*日期/时间有关函数：&lt;br /&gt;
**Year, Month, Day, WeekDay,Hour,Minute,Second 截取日期时间分量&lt;br /&gt;
**DateAdd 日期/时间增量函数&lt;br /&gt;
**DateDiff(&amp;lt;间隔类型&amp;gt;,&amp;lt;日期1&amp;gt;,&amp;lt;日期2&amp;gt;[,W1][,W2])日期/时间的距离函数&lt;br /&gt;
**DatePart(&amp;lt;分割类型&amp;gt;,&amp;lt;日期&amp;gt;[,w1][,w2])时间分割函数&lt;br /&gt;
**DateSerial(&amp;lt;表达式1&amp;gt;,&amp;lt;表达式2&amp;gt;,&amp;lt;表达式3&amp;gt;) 合成日期；DateValue(“字符串表达式”)返回日期；&lt;br /&gt;
**Date,Time,Now,Timer 返回日期时间&lt;br /&gt;
**DateValue  &lt;br /&gt;
**TimeSerial：由时间序列得到时间对象&lt;br /&gt;
**TimeValue：由时间字符串得到时间对象&lt;br /&gt;
**Weekday：获得日期的周几&lt;br /&gt;
**WeekdayName  &lt;br /&gt;
*转换函数：CBool、CByte、CCur、 CDate、 CDbl、CDec、CInt、 CLng、CLngLng、CLngPtr、CSng、CStr、CVar、CVErr、Asc(&amp;lt;字符串表达式&amp;gt;)返回第一个字符的Ascii编码值、Chr(ASCII码)返回字符、Hex、Oct、Str(&amp;lt;数值表达式&amp;gt;)返回字符串、Val(string)、Format、FormatCurrency、FormatDateTime、FormatNumber、FormatPercent、MonthName &lt;br /&gt;
*Nz(表达式或字段属性值[,规定值])如果是空，则返回0或者&amp;quot;&amp;quot;或者函数的第二个参数值&lt;br /&gt;
*验证函数：isNumeric、isDate、isNull、isEmpty IsArray、IsError、IsMissing、IsObject&lt;br /&gt;
*数学函数：Abs、Sqr、Tan、Atn（即atan）、Sin、Cos、Exp（e为基的指数）、Log自然对数     &lt;br /&gt;
*Array:构造一个Array对象  &lt;br /&gt;
*CallByName:  get or set a property, or invoke a method at run time using a string name.&lt;br /&gt;
*控制流：Choose:类似于C语言的select语句、IIf相当于IF-ELSE语句、Switch &lt;br /&gt;
*Command：获取命令行参数&lt;br /&gt;
*CreateObject：创建ActiveX对象&lt;br /&gt;
*CurDir：返回指定驱动器的当前工作路径&lt;br /&gt;
*由基本数学函数导出的函数：Sec、Cosec、Cotangent、Cotan、Arcsin、Arccos、Arcsec、Arccosec、Arccotan、HSin、HCos、HTan、HSec、HCosec、HCotan、HArcsin、HArccos、HArctan、HArcsec、HArccosec、HArccotan、LogN&lt;br /&gt;
*DoEvents：暂时把CPU控制权交回给系统。&lt;br /&gt;
*Environ：返回环境变量的值&lt;br /&gt;
*文件操作：&lt;br /&gt;
**Dir：返回满足条件的所有文件、目录的名字&lt;br /&gt;
**EOF&lt;br /&gt;
**FileAttr &lt;br /&gt;
**FileDateTime &lt;br /&gt;
**FileLen &lt;br /&gt;
**FreeFile Function&lt;br /&gt;
**GetAttr：返回文件、目录的属性值&lt;br /&gt;
** Input：读取文件 &lt;br /&gt;
**Loc：文件指针位置&lt;br /&gt;
**LOF：文件打开时的指针位置&lt;br /&gt;
**Seek：文件指针定位&lt;br /&gt;
**Spc：使用Print做position output&lt;br /&gt;
**Tab：用于Print函数&lt;br /&gt;
*Error:错误号对应的错误消息&lt;br /&gt;
*[[Windows Registry]]中的数据：GetAllSettings、SaveSetting、DeleteSetting、GetSetting &lt;br /&gt;
*GetObject：ActiveX组建的引用&lt;br /&gt;
*IMEStatus：返回当前Input Method Editor (IME)。&lt;br /&gt;
*Macintosh平台：MacID、MacScript&lt;br /&gt;
*金融函数：&lt;br /&gt;
**DDB：使用double-declining balance计算贬值&lt;br /&gt;
**FV:计算固定利率的年金 &lt;br /&gt;
** IPmt：计算利率&lt;br /&gt;
** IRR：计算利率  &lt;br /&gt;
** MIRR：计算利率&lt;br /&gt;
** NPer：计算周期数&lt;br /&gt;
** NPV：计算net present value &lt;br /&gt;
** Pmt：计算支付数&lt;br /&gt;
** PPmt：计算本金支付数&lt;br /&gt;
** PV：计算present value&lt;br /&gt;
** Rate：利息率&lt;br /&gt;
** SLN：straight-line depreciation&lt;br /&gt;
**SYD：计算sum-of-years&amp;#039; digits depreciation&lt;br /&gt;
*Partition：返回字符串，表示一个数值名字落在各个range内。常用于SQL select语句&lt;br /&gt;
*QBColor：颜色值&lt;br /&gt;
*RGB：颜色值 &lt;br /&gt;
*TypeName：得到变量的类型名&lt;br /&gt;
*VarType：得到变量的类型数&lt;br /&gt;
&lt;br /&gt;
==表达式==&lt;br /&gt;
比较特殊的运算符有指数运算^，浮点除法/，整数除法\，取模运算Mod，不等逻辑比较运算&amp;lt;&amp;gt;&lt;br /&gt;
== 參考文獻 ==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
{{refbegin}}&lt;br /&gt;
* [https://msdn.microsoft.com/en-us/library/dd941266(v=office.14).aspx VBA Language Reference for MS Office 2013] {{Wayback|url=https://msdn.microsoft.com/en-us/library/dd941266(v=office.14).aspx |date=20200614165406 }}&lt;br /&gt;
* [https://msdn.microsoft.com/zh-cn/library/office/gg264383.aspx Office VBA 語言參考中文版for MS Office 2013] {{Wayback|url=https://msdn.microsoft.com/zh-cn/library/office/gg264383.aspx |date=20170703035530 }}&lt;br /&gt;
* [https://web.archive.org/web/20151225071350/https://msdn.microsoft.com/ZH-CN/library/office/ff862474.aspx Office VBA 對像庫的引用for MS Office 2013]&lt;br /&gt;
* [http://www.jb51.net/shouce/vbs/vtoriVBScript.htm VBA &amp;amp; Visual Basic Scripting 中文版語言參考] {{Wayback|url=http://www.jb51.net/shouce/vbs/vtoriVBScript.htm |date=20200614165413 }}&lt;br /&gt;
{{refend}}&lt;br /&gt;
&lt;br /&gt;
== 外部連結 ==&lt;br /&gt;
{{wikibooks|Visual Basic for Applications|lang=en}}&lt;br /&gt;
*官方網站：&lt;br /&gt;
**[https://developer.microsoft.com/en-us/office/docs Docs - Office Dev Center] {{Wayback|url=https://developer.microsoft.com/en-us/office/docs |date=20210525071108 }}&lt;br /&gt;
**[https://developer.microsoft.com/zh-cn/office/docs 文档 - Office 开发人员中心] {{Wayback|url=https://developer.microsoft.com/zh-cn/office/docs |date=20210507010446 }}&lt;br /&gt;
&lt;br /&gt;
{{Microsoft Office}}&lt;br /&gt;
{{程序設計語言|Logo}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Microsoft Office]]&lt;br /&gt;
[[Category:程序設計語言]]&lt;br /&gt;
[[Category:1993年建立的程式語言]]&lt;/div&gt;</summary>
		<author><name>61.220.29.72</name></author>
	</entry>
</feed>