#Const 指令

��� [image] ���

用來定義在 Visual Basic 中的條件式編譯常數。

語法

#Const constname = expression

#Const 編譯指令的語法具有以下幾個單元：

單元	說明
constname	必要引數；Variant (String)。常數；名稱須遵循變數的命名慣例。
Expression	必要引數。文字、其他的條件式編譯常數，或是包含除了 Is 以外的算術或邏輯運算子之任意組合。
請注意

通常條件式編譯常數在其出現的模組中是 Private的。利用 #Const 指令並沒有辦法產生 Public的編譯常數。Public 編譯常數只能利用使用者介面來產生。

在 expression 中只能使用編譯常數及文字。使用一個用 Const 定義的一個標準常數，或者使用一個未定義的常數，就會發生錯誤。反過來說，用關鍵字#Const 所定義的常數也只能在條件編譯時使用。

條件式編譯常數通常是用在模組層次，而不須考慮它們在程式中的位置。


#If...Then...#Else 指令

��� [image] ���

條件式編譯所選取的 Visual Basic 程式碼區段。

語法

#If expression Then

statements

[#ElseIf expression-n Then

[elseifstatements]]

[#Else

[elsestatements]]

#End If

#If...Then...#Else 指令的語法具有以下幾個單元：

單元	說明
expression	必要引數。任何一個運算式，由一或多個條件式編譯常數，文字，及運算子所組成，可能為 True 或 False。
Statements	必要引數。Visual Basic 程式列或是指令，在 expression為 True 時才會被執行。
Expression-n	選擇性引數。任何一個運算式，由一或多個條件式編譯常數、文字，及運算子所組成，可能為 True 或 False。
elseifstatements	選擇性引數。 一或多個程式列或是編譯指令，在 expression-n 為 True 時才會被執行。
elsestatements	選擇性引數。一或多個程式行或是指令， 在之前的expression 或 expression-n 當中沒有一個為 True 的時候才會被執行。
請注意

指令 #If...Then...#Else 的作用與陳述式 If...Then...Else 相同，其差異在於 #If、#Else、#ElseIf，及 #End If 指令並沒有單獨成行的形式，也就是說，在指令所在的那一行，不能有其他的程式碼出現。條件式編譯通常用來編譯同一個程式在各種不同平台上的版本，也可以用來避免偵錯程式碼出現在可執行程式中。條件式編譯時被排除的程式碼，在最後的可執行檔中會被完全忽略掉，所以不會對程式大小及功能有任何的影響。

無論結果如何，所有的運算式都會被列為判斷的條件。所以，在運算式中的所有常數都必需加以定義，任何未定義的常數都會被當成 Empty。

附註   Option Compare 陳述式並不會影響 #If 及  #ElseIf 陳述中的運算式。條件式編譯指令中的運算式通常只適用 Option Compare Text。


#Const 指令範例

本範例使用 #Const 指令宣告條件式編譯器常數，以便在 #If...#Else...#End If 中使用。

#Const DebugVersion = 1	' DebugVersion 常數在 #If 區塊中便會產生 TRUE 的結果。


#If...Then...#Else Directive 範例

本範例在 #If...Then...#Else 裏引用條件式編譯器常數，來決定編譯那部份的陳述式。

' 如果 Mac 常數為 true，則編譯 #If 之後的陳述式：

#If Mac Then

'. 將 Mac 專屬的陳述式寫在此處。

'.

'.

' 否則，如果是一個 32-位元視窗程式，則編譯以下陳述式：

#ElseIf Win32 Then

'. 將 32-位元視窗程式專屬的陳述式寫在此處。

'.

'.

' 再否則，則編譯以下陳述式：

#Else

'. 將其它作業平台適用的陳述式寫在此處。

'.

'.

#End If


Visual Basic 常數

���

Visual Basic for Applications 定義的一些常數使得程式設計變得更為簡易。下列的常數可使用於程式碼中的任何地方，以用來代替實際值：

Calendar 常數

CallType 常數

色彩常數

Comparison 常數

編譯器常數

Date 常數

Date Format常數

Dir、GetAttr、和 SetAttr 常數

DriveType 常數

File Attribute常數

File Input/Output 常數

Form 常數

IMEStatus 常數

Keycode 常數

其它常數

MsgBox 常數

QueryClose 常數

Shell 常數SpecialFolder 常數

StrConv 常數

系統色彩常數Tristate 常數

VarType 常數

Visual Basic 常數


QueryClose 常數

���

以下常數可用於您程式碼的任何地方，以用來代替實際值：

常數	值	說明
vbFormControlMenu	0	使用者從 [控制] 功能表選取 [關閉] 指令。
vbFormCode	1	由程式中呼叫 Unload 陳述式。
vbAppWindows	2	目前的 Microsoft Windows 作業系統對話結束。
vbAppTaskManager	3	Windows [工作管理員] 正在關閉應用程式。


Calendar 常數

���

以下常數可用於您程式碼的任何地方，以用來代替實際值：

常數	值	說明
vbCalGreg	0	表示使用 Gregorian 曆。
vbCalHijri	1	表示使用 Hijri 曆。


編譯器常數

���

Visual Basic for Applications 定義了一些不能與 #If...Then...#Else 指令一起使用的常數。這些常數除了範圍是屬於全域，並可應用於專案中的每個地方之外，在功能上與 #If...Then...#Else 指令定義的常數都是相同的。

在 16 位元發展平台上，編譯器常數的定義如下：

常數	值	說明
Win16	True	發展環境是 16 位元。
Win32	False	發展環境不是 32 位元。
在 32-位元發展平台上，編譯器常數定義如下：

常數	值	說明
Vba6	True	指出指出發展環境是 Visual Basic for Applications (6.0 版)。
Vba6	False	指出發展環境不是 Visual Basic for Applications (6.0 版)。
Win16	False	指出發展環境不是 16 位元。
Win32	True	指出發展環境是 32 位元。
附註   這些常數是由 Visual Basic 所提供，所以您不能在任何層次中，以相同名稱來定義自己的常數。


Date 常數

���

以下的常數可使用於程式碼中的任何地方，以用來代替實際值：

引數值

firstdayofweek 引數有以下這些值：

常數	值	說明
vbUseSystem	0	使用 NLS API 設定。
vbSunday	1	星期日 (預設)
vbMonday	2	星期一
vbTuesday	3	星期二
vbWednesday	4	星期三
vbThursday	5	星期四
vbFriday	6	星期五
vbSaturday	7	星期六
firstdayofyear 引數有以下這些可能的值：

常數	值	說明
vbUseSystem	0	使用 NLS API 設定。
VbUseSystem DayOfWeek	0	使用系統設定中為星期的第一天指定的星期數。
VbFirstJan1	1	由 1 月 1 日所在的那個星期開始 (預設)。
vbFirstFourDays	2	由新的一年中第一個至少有 4 天的星期開始。
vbFirstFullWeek	3	由一年中第一個完整的星期開始。
傳回值

常數	值	說明
vbSunday	1	星期日
vbMonday	2	星期一
vbTuesday	3	星期二
vbWednesday	4	星期三
vbThursday	5	星期四
vbFriday	6	星期五
vbSaturday	7	星期六


Dir、GetAttr，和 SetAttr 常數

���

以下的常數可使用於程式碼中的任何地方，以用來代替實際值：

常數	值	說明
vbNormal	0	正常的 (Dir 和 SetAttr 的預設值)。
vbReadOnly	1	唯讀的。
vbHidden	2	隱藏的。
vbSystem	4	系統檔案。
vbVolume	8	磁碟標籤。
vbDirectory	16	目錄或資料夾。
vbArchive	32	檔案自上一次備份後已經改變。


IMEStatus 常數

���

以下的常數可使用於程式碼中的任何地方，以用來代替實際值。

日文地區的常數值如下所示：

常數	值	說明
vbIMEModeNoControl	0	不能控制 IME (預設)
vbIMEModeOn	1	開啟 IME。
vbIMEModeOff	2	關閉 IME。
vbIMEModeDisable	3	無效的 IME。
vbIMEModeHiragana	4	全寬度 Hiragana 模式
vbIMEModeKatakana	5	全寬度 Katakana 模式
vbIMEModeKatakanaHalf	6	半寬度 Katakana 模式
vbIMEModeAlphaFull	7	全寬度 Alphanumeric 模式
vbIMEModeAlpha	8	半寬度 Alphanumeric 模式
韓國地區的常數如下所示：

常數	值	說明
VbIMEModeAlphaFull	7	全寬度 Alphanumeric 模式
vbIMEModeAlpha	8	半寬度 Alphanumeric 模式
VbIMEModeHangulFull	9	全寬度 Hangul 模式
vbIMEModeHangul	10	半寬度 Hangul 模式
在中文地區的常數的常數如下：

常數	值	說明
vbIMEModeNoControl	0	不能控制 IME (預設)
vbIMEModeOn	1	IME 開啟
vbIMEModeOff	2	IME 關閉


Comparison 常數

���

以下的常數是由 Visual Basic for Applications 中的型態程式庫所定義，可使用於程式碼中的任何地方，以用來代替實際值：

常數	值	說明
vbUseCompareOption	-1	使用Option Compare陳述句設定執行比較。
vbBinaryCompare	0	執行二進位的比較。
vbTextCompare	1	執行文字的比較。
vbDatabaseCompare	2	用於 Microsoft Access (Windows only)，執行以資料庫所含資訊為基礎的比較。


Miscellaneous 常數

���

以下的常數是由 Visual Basic for Applications 中的型態程式庫所定義，可使用於程式碼中的任何地方，以用來代替實際值：

常數	等於	說明
vbCrLf	Chr(13) + Chr(10)	結合換行字元與復位字元。
vbCr	Chr(13)	復位字元。
vbLf	Chr(10)	換行字元。
vbNewLine	Chr(13) + Chr(10)	作業平台所指定的新換行字元，其中任何一個皆適用目前的作業平台。
vbNullChar	Chr(0)	字元的值為 0。
vbNullString	字串的值為 0。	通常用來呼叫外部程序；與長度為零的字串("")不一樣。
vbObjectError	-2147221504	使用者定義的錯誤號碼應該比此值大。例如： Err.Raise Number = vbObjectError + 1000
vbTab	Chr(9)	定位點字元。
vbBack	Chr(8)	退格字元。
vbFormFeed	Chr(12)	在 Microsoft Windows中沒有作用。
vbVerticalTab	Chr(11)	在 Microsoft Windows中沒有作用。


MsgBox 常數

���

以下的常數可使用於程式碼中的任何地方，以用來代替實際值：

MsgBox 引數

常數	值	說明
vbOKOnly	0	只有 OK 按鈕 (預設值)。
vbOKCancel	1	OK 和 Cancel 按鈕。
vbAbortRetryIgnore	2	Abort、Retry，和 Ignore 按鈕。
vbYesNoCancel	3	Yes、No，和 Cancel 按鈕。
vbYesNo	4	Yes 和 No 按鈕。
vbRetryCancel	5	Retry 和 Cancel 按鈕。
vbCritical	16	錯誤訊息。
vbQuestion	32	警告詢問。
vbExclamation	48	警告訊息。
vbInformation	64	通知訊息。
vbDefaultButton1	0	第一個按鈕是預設的 (預設值)。
vbDefaultButton2	256	第二個按鈕是預設的。
vbDefaultButton3	512	第三個按鈕是預設的。
vbDefaultButton4	768	第四個按鈕是預設的。
vbApplicationModal	0	應用程式形態的訊息方塊 (預設值)。
vbSystemModal	4096	系統強制回應的訊息方塊。
vbMsgBoxHelpButton	16384	將 Help按鈕新增到訊息方塊中。
VbMsgBoxSetForeground	65536	指定訊息方塊視窗作為前景視窗。
vbMsgBoxRight	524288	文字靠右對齊。
vbMsgBoxRtlReading	1048576	指定在希伯來和阿拉伯語系統中，文字應當顯示為從右到左讀。
MsgBox 傳回值

常數	值	說明
vbOK	1	按下 OK 按鈕。
vbCancel	2	按下 Cancel 按鈕。
vbAbort	3	按下 Abort 按鈕。
vbRetry	4	按下 Retry 按鈕。
vbIgnore	5	按下 Ignore 按鈕。
vbYes	6	按下 Yes 按鈕。
vbNo	7	按下 No 按鈕。


Shell 常數

���

以下的常數可使用於程式碼中的任何地方，以用來代替實際值：

常數	值	說明
vbHide	0	視窗是隱藏的，並且駐點被傳遞給隱藏的視窗。
vbNormalFocus	1	視窗擁有駐點，並且恢復為原來的大小與位置。
vbMinimizedFocus	2	視窗顯示為圖示並擁有駐點。
vbMaximizedFocus	3	視窗最大化並擁有駐點。
vbNormalNoFocus	4	視窗被恢復為最近一次的大小與位置。目前使用中的視窗依然保持在使用狀態。
vbMinimizedNoFocus	6	視窗以圖示來顯示。目前使用中的視窗依然保持在使用狀態。


StrConv 常數

���

以下的常數可使用於程式碼中的任何地方，以用來代替實際值：

Constant	值	說明
vbUpperCase	1	將字串轉換成大寫。
vbLowerCase	2	將字串轉換成小寫。
vbProperCase	3	將字串中每個字的第一個字母轉換成大寫。
vbWide	4	轉換字串中窄的(單位元)字元為寬的(雙位元)字元；適用於遠東地區。
vbNarrow	8	轉換字串中寬的(雙位元)字元為窄的(單位元)字元；適用於遠東地區。
vbKatakana	16	轉換字串中的 Hiragana 字元為 Katakana 字元；只適用於日文地區。
vbHiragana	32	轉換字串中的 Katakana 字元為 Hiragana 字元；只適用於日文地區。
vbUnicode	64	利用系統預設的字元碼對應頁將字串轉換為 Unicode。
vbFromUnicode	128	將字串由 Unicode 轉換為系統預設的字元碼對應頁。


VarType 常數

���

以下的常數可使用於程式碼中的任何地方，以用來代替實際值：

常數	值	說明
vbEmpty	0	未初始化(預設值)。
vbNull	1	不含任何有效值。
vbInteger	2	Integer。
vbLong	3	長整數。
vbSingle	4	單精度浮點數。
vbDouble	5	倍精度浮點數。
vbCurrency	6	Currency。
vbDate	7	Date。
vbString	8	String。
vbObject	9	物件。
vbError	10	錯誤。
vbBoolean	11	Boolean。
vbVariant	12	Variant (只能使用於 Variants 中的陣列型態)。
vbDataObject	13	資料存取物件。
vbDecimal	14	Decimal。
vbByte	17	Byte。
vbUserDefinedType	36	包含使用者定義型態的變數。
vbArray	8192	陣列。


色彩常數

���

以下常數可用於您程式碼的任何地方，以用來代替實際值：

常數	值	說明
vbBlack	0x0	黑
vbRed	0xFF	紅
vbGreen	0xFF00	綠
vbYellow	0xFFFF	黃
vbBlue	0xFF0000	藍
vbMagenta	0xFF00FF	紫紅
vbCyan	0xFFFF00	藍綠
vbWhite	0xFFFFFF	白


Keycode 常數

���

以下常數可用於您程式碼的任何地方，以用來代替實際值：

常數	值	說明
vbKeyLButton	0x1	左滑鼠鍵
vbKeyRButton	0x2	右滑鼠鍵
vbKeyCancel	0x3	CANCEL 鍵
vbKeyMButton	0x4	中滑鼠鍵
vbKeyBack	0x8	BACKSPACE 鍵
vbKeyTab	0x9	TAB 鍵
vbKeyClear	0xC	CLEAR 鍵
vbKeyReturn	0xD	ENTER 鍵
vbKeyShift	0x10	SHIFT 鍵
vbKeyControl	0x11	CTRL 鍵
vbKeyMenu	0x12	MENU 鍵
vbKeyPause	0x13	PAUSE 鍵
vbKeyCapital	0x14	CAPS LOCK 鍵
vbKeyEscape	0x1B	ESC 鍵
vbKeySpace	0x20	SPACEBAR 鍵
vbKeyPageUp	0x21	PAGE UP 鍵
vbKeyPageDown	0x22	PAGE DOWN 鍵
vbKeyEnd	0x23	END 鍵
vbKeyHome	0x24	HOME 鍵
vbKeyLeft	0x25	左方向鍵
vbKeyUp	0x26	上方向鍵
vbKeyRight	0x27	右方向鍵
vbKeyDown	0x28	下方向鍵
vbKeySelect	0x29	SELECT 鍵
vbKeyPrint	0x2A	PRINT SCREEN 鍵
vbKeyExecute	0x2B	EXECUTE 鍵
vbKeySnapshot	0x2C	SNAPSHOT 鍵
vbKeyInsert	0x2D	INSERT 鍵
vbKeyDelete	0x2E	DELETE 鍵
vbKeyHelp	0x2F	HELP 鍵
vbKeyNumlock	0x90	NUM LOCK 鍵
A 到 Z 鍵分別表示 ASCII 的 A - Z:

常數	值	說明
vbKeyA	65	A 鍵
vbKeyB	66	B 鍵
vbKeyC	67	C 鍵
vbKeyD	68	D 鍵
vbKeyE	69	E 鍵
vbKeyF	70	F 鍵
vbKeyG	71	G 鍵
vbKeyH	72	H 鍵
vbKeyI	73	I 鍵
vbKeyJ	74	J 鍵
vbKeyK	75	K 鍵
vbKeyL	76	L 鍵
vbKeyM	77	M 鍵
vbKeyN	78	N 鍵
vbKeyO	79	O 鍵
vbKeyP	80	P 鍵
vbKeyQ	81	Q 鍵
vbKeyR	82	R 鍵
vbKeyS	83	S 鍵
vbKeyT	84	T 鍵
vbKeyU	85	U 鍵
vbKeyV	86	V 鍵
vbKeyW	87	W 鍵
vbKeyX	88	X 鍵
vbKeyY	89	Y 鍵
vbKeyZ	90	Z 鍵
0 到 9 鍵分別表示 ASCII 的 0 - 9:

常數	值	說明
vbKey0	48	0 鍵
vbKey1	49	1 鍵
vbKey2	50	2 鍵
vbKey3	51	3 鍵
vbKey4	52	4 鍵
vbKey5	53	5 鍵
vbKey6	54	6 鍵
vbKey7	55	7 鍵
vbKey8	56	8 鍵
vbKey9	57	9 鍵
以下常數表示數字鍵台上的按鍵：

常數	值	說明
vbKeyNumpad0	0x60	0 鍵
vbKeyNumpad1	0x61	1 鍵
vbKeyNumpad2	0x62	2 鍵
vbKeyNumpad3	0x63	3 鍵
vbKeyNumpad4	0x64	4 鍵
vbKeyNumpad5	0x65	5 鍵
vbKeyNumpad6	0x66	6 鍵
vbKeyNumpad7	0x67	7 鍵
vbKeyNumpad8	0x68	8 鍵
vbKeyNumpad9	0x69	9 鍵
vbKeyMultiply	0x6A	乘號 (*) 鍵
vbKeyAdd	0x6B	加號 (+) 鍵
vbKeySeparator	0x6C	ENTER 鍵
vbKeySubtract	0x6D	減號 (-) 鍵
vbKeyDecimal	0x6E	小數點 (.) 鍵
vbKeyDivide	0x6F	除號 (/) 鍵
以下常數代表功能鍵：

常數	值	說明
vbKeyF1	0x70	F1 鍵
vbKeyF2	0x71	F2 鍵
vbKeyF3	0x72	F3 鍵
vbKeyF4	0x73	F4 鍵
vbKeyF5	0x74	F5 鍵
vbKeyF6	0x75	F6 鍵
vbKeyF7	0x76	F7 鍵
vbKeyF8	0x77	F8 鍵
vbKeyF9	0x78	F9 鍵
vbKeyF10	0x79	F10 鍵
vbKeyF11	0x7A	F11 鍵
vbKeyF12	0x7B	F12 鍵
vbKeyF13	0x7C	F13 鍵
vbKeyF14	0x7D	F14 鍵
vbKeyF15	0x7E	F15 鍵
vbKeyF16	0x7F	F16 鍵


系統色彩常數

���

以下常數可用於您程式碼的任何地方：

常數	值	說明
vbScrollBars	0x80000000	捲軸色彩
vbDesktop	0x80000001	桌面色彩
vbActiveTitleBar	0x80000002	現用視窗標題列色彩
vbInactiveTitleBar	0x80000003	非現用視窗標題列色彩
vbMenuBar	0x80000004	功能表背景色彩
vbWindowBackground	0x80000005	視窗背景色彩
vbWindowFrame	0x80000006	功能表邊框色彩
vbMenuText	0x80000007	功能表文字色彩
vbWindowText	0x80000008	視窗文字色彩
vbTitleBarText	0x80000009	標題文字色彩
vbActiveBorder	0x8000000A	現用視窗邊框色彩
vbInactiveBorder	0x8000000B	非現用視窗邊框色彩
vbApplicationWorkspace	0x8000000C	多重文件介面 (MDI) 應用程式背景色彩
vbHighlight	0x8000000D	控制項選取項目色彩
vbHighlightText	0x8000000E	控制項選取項目文字色彩
vbButtonFace	0x8000000F	指令按鈕表面陰影色彩
vbButtonShadow	0x80000010	指令按鈕邊線陰影色彩
vbGrayText	0x80000011	灰色 (暫止) 文字
vbButtonText	0x80000012	按鈕文字色彩
vbInactiveCaptionText	0x80000013	非現用標題文字色彩
vb3DHighlight	0x80000014	3-D 顯示元素醒目提示色彩
vb3DDKShadow	0x80000015	3-D 顯示元素陰影色彩
vb3DLight	0x80000016	僅次於 vb3Dhighlight 的3-D 色彩
vbInfoText	0x80000017	工具提示文字色彩
vbInfoBackground	0x80000018	工具提示背景色彩


CallType 常數

��� [image] ���

以下常數可用於您程式碼的任何地方，來取代實際的數值：

常數	值	描述

vbMethod	1	指出已呼叫方法。

vbGet	2	指出 Property Get 程序。

vbLet	4	指出 Property Let 程序。

vbSet	8	指出 Property Set 程序。


表單常數

��� [image] ���

以下常數可用於您程式碼的任何地方，來取代實際的數值：

常數	值	描述

vbModeless	0	UserForm 為非強制回應。

vbModal	1	UserForm 為強制回應 (預設值)。


Call 陳述式範例

下列範例示範如何使用 Call 陳述式來將程式碼執行權轉移到 Sub 程序、內建函數、和動態連結程式庫 (DLL) 內的程序。DLL 不能在 Macintosh 上使用。

' 呼叫一個 Sub 程序。

Call PrintToDebugWindow("Hello World")

' 上面的陳述式將程式碼執行權轉移到下面的 Sub 程序。

Sub PrintToDebugWindow(AnyString)

Debug.Print AnyString	' 在「即時運算」視窗中顯示。

End Sub

' 呼叫一個內建函數，函數的傳回值被忽略不處理。

Call Shell(AppName, 1)	' AppName 為要執行的程式的全路徑名稱。

' 呼叫一個 Microsoft Windows DLL 內的程序。宣告該程序的陳述式必需放在「物件類別模組」中，且為 Private，但不可放在「一般模組」中。

Private Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

Sub CallMyDll()

Call MessageBeep(0)	' 呼叫 Windows DLL 內的程序。

MessageBeep 0	' 再呼叫一次，但這次沒有使用 Call 這個關鍵字。

End Sub


Choose 函數範例

本範例使用 Choose 函數來顯示對應於參數 Ind 之值所代表之名稱。

Function GetChoice(Ind As Integer)

GetChoice = Choose(Ind, "Speedy", "United", "Federal")

End Function


DoEvents 函數範例

下列範例在迴圈中使用 DoEvents 函數，當迴圈每執行 1000 次時，將程式碼執行權讓給作業系統。DoEvents 的傳回值是所有用 Visual Basic 執行的程式所開啟的表單個數。

' 建立一個變數來儲存 Visual Basic 載入之可見表單的個數。

Dim I, OpenForms

For I = 1 To 150000	' 迴圈開始。

If I Mod 1000 = 0 Then 	' 如果迴圈執行了 1000 次。

OpenForms = DoEvents	' 將程式碼執行權讓給作業系統。

End If

Next I	' 將迴圈計數器加一。


Do...Loop 陳述式範例

本範例示範如何使用 Do...Loop 陳述式。內層的 Do...Loop 陳述式在執行到第 10 次時將旗標值設成 False，並使用 Exit Do 陳述式來強制離開內層迴圈。外層迴圈則在檢查到旗標值為 False 時，馬上結束。

Dim Check, Counter

Check = True: Counter = 0	' 設定變數初始值。

Do	' 外層迴圈。

Do While Counter < 20	' 內層迴圈。

Counter = Counter + 1	' 計數器加一。

If Counter = 10 Then	' 如果條件成立。

Check = False	' 將旗標值設成 False。

Exit Do	' 離開內層迴圈。

End If

Loop

Loop Until Check = False	' 結束外層迴圈。


End 陳述式範例

本範例使用 End 陳述式，在使用者輸入錯誤密碼時結束程式的執行。

Sub Form_Load

Dim Password, Pword

PassWord = "Swordfish"

Pword = InputBox("Type in your password")

If Pword <> PassWord Then

MsgBox "Sorry, incorrect password"

End

End If

End Sub


Exit 陳述式範例

本範例使用 Exit 陳述式來跳離一個 For...Next 迴圈、Do...Loop 迴圈及一個 Sub 程序。

Sub ExitStatementDemo()

Dim I, MyNum

Do	' 開始無窮迴圈。

For I = 1 To 1000	' 執行 1000 次。

MyNum = Int(Rnd * 1000)	' 產生一亂數碼。

Select Case MyNum	' 檢查亂數碼。

Case 7: Exit For	' 如果是 7，跳離 For...Next迴圈。

Case 29: Exit Do	' 如果是 29，離開 Do...Loop 迴圈。

Case 54: Exit Sub	' 如果是 54，離開 Sub 程序。

End Select

Next I

Loop

End Sub


For Each...Next 陳述式範例

本範例使用 For Each...Next 陳述式來對集合物件裏所有成員的 Text 屬性進行搜尋，尋找 「Hello」 字串。範例中，MyObject 是一個和文字相關的物件，並且是 MyCollection 集合物件的成員，這兩個名字只是用來作示範說明的通用名稱而已。

Dim Found, MyObject, MyCollection

Found = False	' 設定變數初始值。

For Each MyObject In MyCollection	' 對集合物件裏的成員作一次迴圈執行。

If MyObject.Text = "Hello" Then	' 如果 Text 屬性值等於「Hello」。

Found = True	' 將變數 Found 的值設成 True。

Exit For	' 離開迴圈。

End If

Next


For...Next 陳述式範例

本範例使用 For...Next 陳述式來建立一個字串，其內容為由 0 到 9 的十個數字所組成的字串，每個字串之間用空格隔開。外層迴圈使用一個變數當作迴圈計數器，其計數方式是由大到小遞減的。

Dim Words, Chars, MyString

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


GoSub...Return 陳述式範例

本範例使用 GoSub 來呼叫一個在 Sub 程序裏的一段副程式。Return 陳述式則將程式執行步驟跳回 GoSub 的下一個陳述式。Exit Sub 陳述式則是用來避免意外進入該副程式的情形發生。

Sub GosubDemo()

Dim Num

' 由使用者輸入一個數字。

Num = InputBox("Enter a positive number to be divided by 2.")

' 如果使用者輸入一個正整數，才會執行副程式。

If Num > 0 Then GoSub MyRoutine

Debug.Print Num

Exit Sub	' 使用 Exit 指令來避免錯誤發生。

MyRoutine:

Num = Num/2	' 將數目除以 2。

Return	' 將執行步驟跳回 GoSub 之後的陳述式。

End Sub


GoTo 陳述式範例

本範例使用 GoTo 陳述式在一個程序內的不同程式段間作流程控制，不同程式段用不同的「程式標籤」來區隔。

Sub GotoStatementDemo()

Dim Number, MyString

Number = 1 	' 設定變數起始值。

' 判斷 Number 的值以決定要執行那一個程式區段 (以「程式標籤」來表示)。

If Number = 1 Then GoTo Line1 Else GoTo Line2

Line1:

MyString = "Number equals 1"

GoTo LastLine	' 執行最後一行。

Line2:

' 下列的陳述式根本不會被執行。

MyString = "Number equals 2"

LastLine:

Debug.Print MyString	' 將 ["Number equals 1"] 顯示在「即時運算」視窗。

End Sub


If...Then...Else 陳述式範例

本範例示範 If...Then...Else 陳述式的兩種格式：「區塊格式」及「單行格式」，也示範了 If TypeOf...Then...Else 的用法。

Dim Number, Digits, MyString

Number = 53	' 設定變數起始值。

If Number < 10 Then

Digits = 1

ElseIf Number < 100 Then

' 若判斷結果為 True，則執行下一行陳述式。

Digits = 2

Else

Digits = 3

End If

' 使用「單行格式」語法來設定變數值。

If Digits = 1 Then MyString = "One" Else MyString = "More than one"

利用 If TypeOf 可以判斷傳入程序的控制項是否為一文字方塊。

Sub ControlProcessor(MyControl As Control)

If TypeOf MyControl Is CommandButton Then

Debug.Print "You passed in a " & TypeName(MyControl)

ElseIf TypeOf MyControl Is CheckBox Then

Debug.Print "You passed in a " & TypeName(MyControl)

ElseIf TypeOf MyControl Is TextBox Then

Debug.Print "You passed in a " & TypeName(MyControl)

End If

End Sub


IIf 函數範例

本範例使用 IIf 函數來判斷 CheckIt 程序之 TestMe 參數的值，如果參數值大於 1000 則傳回「Large」；否則傳回「Small」。

Function CheckIt (TestMe As Integer)

CheckIt = IIf(TestMe > 1000, "Large", "Small")

End Function


On...GoSub 及 On...GoTo 陳述式範例

本範例使用 On...GoSub 及 On...GoTo 陳述式來執行不同的副程式或程式區段。

Sub OnGosubGotoDemo()

Dim Number, MyString

Number = 2	' 設定變數初值。

' Branch to Sub2.

On Number GoSub Sub1, Sub2	' 在 On...GoSub 結束後，程式會回到此處來繼續執行。

On Number GoTo Line1, Line2	' 執行 Line2 標記之區段。

' 在 On...GoTo 結束之後，程式不會回到此處來。

Exit Sub

Sub1:

MyString = "In Sub1" : Return

Sub2:

MyString = "In Sub2" : Return

Line1:

MyString = "In Line1"

Line2:

MyString = "In Line2"

End Sub


Partition 函數範例

本範例假設您有一個 Orders 資料表，且裏頭含有一個 Freight 欄位。程式建立一個「選取」來計算運費落在某些範圍內的訂單數量。Partition 函數是用來確定這些範圍，然後呼叫 SQL Count 函數來計算在每個範圍內的訂單數量。本範例中，Partition 函數的引數值為 start = 0，stop = 500，interval = 50。第一個範圍會是 0：49，每隔 50 一個範圍，依次而下直到運費為 500 為止。

SELECT DISTINCTROW Partition([freight],0, 500, 50) AS Range,

Count(Orders.Freight) AS Count

FROM Orders

GROUP BY Partition([freight],0,500,50);


Select Case 陳述式範例

本範例使用 Select Case 陳述式來判斷變數的值。範例中第二個 Case 子句因子包含了此變數值，故只有此區塊內的陳述式會被執行到。

Dim Number

Number = 8	' 設定變數初值。

Select Case Number	' 判斷 Number 的值。

Case 1 To 5	' Number 的值在 1 到 5 之間，是非排它性的。

Debug.Print "Between 1 and 5"

' 下一個 Case 子句是本範例中唯一判斷值為 True 的子句。

Case 6, 7, 8	' Number 的值在 6 到 8 之間。

Debug.Print "Between 6 and 8"

Case 9 To 10	' Number 的值為 9 或 10。

Debug.Print "Greater than 8"

Case Else	' 其它數值。

Debug.Print "Not between 1 and 10"

End Select


Shell 函數範例

本範例使用 Shell 函數來執行一個使用者指定的應用程式。在 MacIntosh 上，預設的磁碟機名是「HD」，路徑名部分由冒號取代反斜線進行分隔。同樣，您可以指定 Macintosh 資料夾取代 \Windows。

' 將第二個引數值設成 1，可讓該程式以正常大小的視窗執行，並且擁有駐點。

Dim RetVal

RetVal = Shell("C:\WINDOWS\CALC.EXE", 1)	' 執行Calculator。


Stop 陳述式範例

本範例使用 Stop 陳述式來暫停 For...Next 迴圈裏的每一次執行。

Dim I

For I = 1 To 10	' 開始 For...Next 迴圈。

Debug.Print I	' 將 I 的值顯示到「即時運算」視窗。

Stop	' 每一次的執行都會在此暫停。

Next I


Switch 函數範例

本範例使用 Switch 函數來傳回和城市名稱相符合的語言名稱。

Function MatchUp (CityName As String)

Matchup = Switch(CityName = "London", "English", CityName _

= "Rome", "Italian", CityName = "Paris", "French")

End Function


While...Wend 陳述式範例

本範例使用 While...Wend 陳述式來增加計數變數的值。如果條件判斷值為 True，則迴圈內的陳述式將一直執行下去。

Dim Counter

Counter = 0	' 設定變數初值。

While Counter < 20	' 判斷計數器的值。

Counter = Counter + 1	' 將計數器的值加一。

Wend	' 當 Counter > 19 時則迴圈終止。

Debug.Print Counter	' 在「即時運算」視窗中顯示數字 20。


With 陳述式範例

本範例使用 With 陳述式對某單一物件執行一系列的陳述式，物件名稱 MyObject 及它的各屬性均為示範用之通用名稱而已。

With MyObject

.Height = 100	' 和 MyObject.Height = 100 的結果一樣。

.Caption = "Hello World"	' 和 MyObject.Caption = "Hello World" 的結果一樣。

With .Font

.Color = Red	' 和 MyObject.Font.Color = Red 的結果一樣。

.Bold = True	' 和 MyObject.Font.Bold = True 的結果一樣。

End With

End With


Call 陳述式

��� [image] ���

將程式控制權轉移到一個 Sub 程序，Function 程序，或動態連結資料庫 (DLL) 程序。

語法

[Call] name [argumentlist]

Call 陳述式的語法具有以下幾個單元：

單元	描述
Call	選擇性的關鍵字；如果指定這個引數，則 argumentlist 必須加上括號，例如：
	Call MyProc(0)
name	必要引數，此為要呼叫的程序名稱。
argumentlist	選擇性引數，指的是用來傳遞給程序的變數、陣列、或運算式串列，各引數間要以逗號隔開。每個 argumentlist 都可以加上關鍵字 ByVal 或 ByRef，來設定被呼叫的程序要如何來處理引數。不過，ByVal 和 ByRef 只能使用在：當 Call 呼叫一個 DLL 程序。
請注意

當您要呼叫一個程序時，並不一定要使用 Call 關鍵字。但如果您使用Call 關鍵字來呼叫一個需要引數的程序，那麼 argumentlist 也必須要加上括號。如果省略了 Call 關鍵字，那麼也必須要省略括號。如果您使用 Call 語法來呼叫內建函數或使用者定義函數，則函數的傳回值將會無法傳回。

若要將整個陣列傳給一個程序，請使用陣列名稱，然後在陣列名稱後加上空括號。


Choose 函數

��� [image] ���

從引數串列中選擇並傳回一個值。

語法

Choose(index, choice-1[, choice-2, ... [, choice-n]])

Choose 函數的語法具有以下幾個單元：

單元	描述
index	必要引數，此為數值運算式或欄位，它的運算結果是一個數值，且介在 1 和可選擇的項目數之間。
choice	必要引數，此為 Variant 運算式，包含一個以上的選擇項目。
請注意

Choose 會根據 index 的值來傳回串列中的第幾個選擇項。如果 index 是 1 ，則 Choose 會傳回串列中的第 1 個選擇項。如果 index 是 2，則 Choose 會傳回串列中的第 2 個選擇項，以此類推。

您可以使用 Choose 來查閱一個串列中的項目。例如，如果 index 所指定的值為 3 ，而 choice-1 = "one" 、 choice-2 = "two" 、且 choice-3 = "three" ，那麼 Choose 將傳回 "three" 。當 index 可代表一群選項中的值時，則這項功能將會特別有用。

Choose 會計算串列中的每個選擇項，即使它只傳回一個選項值。所以您應該注意這項副作用，例如，當您在每個選擇項中使用了 MsgBox 函數作為運算式的一部分，那麼每計算一個選擇項，就會顯示一次訊息方塊。

如果 index 小於 1，或大於可選擇的項目個數時，則 Choose 函數會傳回一個 Null。

如果 index 不是整數，則會先換算為與其最接近的整數。


DoEvents 函數

��� [image] ���

暫停執行，以便讓作業系統可以處理其它的事件。

語法

DoEvents( )

請注意

DoEvents 函數會傳回一個Integer，以代表 Visual Basic 的單一版本中所開啟的表單個數，例如， Visual Basic專業版。在其它的應用版本中，DoEvents 會傳回 0。

DoEvents 會將控制權傳給作業系統，然後當作業系統處理完佇列中的事件，並且在 SendKeys 佇列中的所有 Key 都已送出後，控制權會再傳回。

DoEvents 常用於可讓使用者取消一段處理序，例如搜尋檔案。對於一段需花費較長時間的動作而言，使用 Timer 來處理或交由一個 ActiveX EXE 元件會比較好。以後者而言，這個工作可不依靠應用程式而獨立進行，作業系統會以多工方式處理。

注意   請確定以 DoEvents 來放棄控制權的程序，在第一次 DoEvents 傳回之前，不能再度執行，否則會產生不可預期的結果。此外，如果其它的應用程式在您放出控制權時，可能會和您的程序產生互動，那麼也儘量不要使用 DoEvents。


Do...Loop 陳述式

��� [image] ���

當條件式為 True 或直到條件式變為 True 時，重複執行一段陳述式區塊中的指令。

語法

Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]

Loop

或者您可以使用底下這個語法：

Do
[statements]
[Exit Do]
[statements]

Loop [{While | Until} condition]

Do Loop 陳述式的語法具有以下幾個單元：

單元	描述
condition	選擇性引數，此為數值運算式或字串運算式，其值為True 或 False。如果 condition 是 Null，則 condition 會當作 False。
statements	一行或多行的指令行。
請注意

在 Do�Loop 中可以放置任何個數的 Exit Do 陳述式，以便離開 Do�Loop，Exit Do 通常與條件式共同使用，例如 If�Then。當執行到 Exit Do 陳述式時，程式控制權會轉移到 Loop 指令之後的陳述式。

如果 Exit Do 使用在巢狀的 Do�Loop 陳述式，則 Exit Do 會將控制權轉移到高於一層 Exit Do 所在位置的迴圈。


End 陳述式

��� [image] ���

結束一個程序或區塊。

語法

End

End Function

End If

End Property

End Select

End Sub

End Type

End With

End 陳述式的語法有以下幾種形式：

陳述式	描述
End	停止執行，可以放在程序中的任何位置，它可以關閉以 Open 陳述式所開啟的檔案，且可以清除變數。
End Function	結束一個 Function 陳述式
End If	結束一個 If�Then�Else 陳述式
End Property	結束一個 Property Let、Property Get，或 Property Set 程序
End Select	結束一個 Select Case 陳述式
End Sub	結束一個 Sub 陳述式
End Type	結束一個使用者自訂型態定義 (Type 陳述式 )。
End With	結束一個 With 陳述式
請注意

當執行到 End 陳述式時，陳述式會重新設定在所有模組中的所有模組層次變數以及所有靜態區域變數。若要保留這些變數的值，請使用 Stop 陳述式來取代 End ，然後您可以在稍後繼續執行。

附註���End 陳述式可以強制程式碼終止，無須經過 Unload、QueryUnload，或 Terminate 事件，或任何其它的 Visual Basic 程式碼。Unload、QueryUnload，表單與物件類別模組的 Terminate 事件都不會執行。由物件類別模組所建立的物件會被破壞、以 Open 陳述式開啟的檔案會被關閉，程式所佔用的記憶體空間也會被釋放。

End 陳述式是一種強制程式停止執行的方式。一般要結束 Visual Basic 程式前，都必須先載出所有表單，確定沒有其它程式引用到其中的物件，且沒有執行中的程式碼，才能結束。


Exit 陳述式

��� [image] ���

離開 Do�Loop、For...Next、Function、Sub，或 Property 程式碼區塊。

語法

Exit Do

Exit For

Exit Function

Exit Property

Exit Sub

Exit 陳述式的語法有以下幾種形式：

陳述式	描述
Exit Do	用來離開 Do...Loop 陳述式，只能使用在 Do...Loop 陳述式中。Exit Do 會將控制權轉移到 Loop 之後的陳述式。如果 Exit Do 使用在巢狀的 Do...Loop 陳述式，則 Exit Do 會將控制權轉移到高於一層 Exit Do 所在位置的迴圈。
Exit For	用來離開 For 迴圈，只能使用在 For...Next 或 For Each...Next 迴圈中。Exit For 會將控制權轉移到 Next 之後的陳述式。如果 Exit For 使用在巢狀的 For 迴圈，則 Exit For 會將控制權轉移到高於一層 Exit For 所在位置的迴圈。
Exit Function	立即離開 Function 程序， 程式會從呼叫 Function 陳述式之後的指令行繼續執行。
Exit Property	立即離開 Property 程序，程式會從呼叫 Property 程序的陳述式之後的指令行繼續執行。
Exit Sub	立即離開 Sub 程序，程式會從呼叫 Sub 程序的陳述式之後的指令行繼續執行。
請注意

請不要將 Exit 陳述式與 End 陳述式搞混了，Exit 並不會終止一段程式結構。


For Each...Next 陳述式

��� [image] ���

針對一個陣列或集合中的所有元素，重複執行一段陳述式。

語法

For Each element In group
[statements]
[Exit For]
[statements]

Next [element]

For...Each...Next 陳述式的語法具有以下幾個單元：

單元	描述
element	必要引數，用來表示集合或陣列中所有元素的變數，對於集合來說，元素可以是一個 Variant 變數、一 般物件變數、或特定的物件變數。對於陣列而言，元素只能是一個 Variant 變數。
Group	必要引數，物件集合或陣列的名稱 ( 除了使用者自訂型態的陣列之外 )。
statements	選擇性引數，一或多行的指令行。
請注意

如果集合或陣列中至少有一個元素，則 For...Each 區塊就會進入執行。一旦進入迴圈，便會先針對群組中第一個元素，執行迴圈中的所有陳述式。如果群組中還有其它的元素，則會針對其餘的元素執行迴圈中的陳述式，當群組中的所有元素都執行完了，便會離開迴圈，然後從 Next 陳述式之後的指令行繼續執行。

在迴圈中可以放置任意個 Exit For 陳述式，以用來離開迴圈，Exit For 通常與條件式共同使用，例如 If�Then，並會將控制權轉移到 Next 之後的陳述式。

您可以將一個 For...Each...Next 迴圈放在另一個之中來造成巢狀式 For...Each...Next 迴圈，但是每個迴圈元素必須是唯一的。

附註   如果您省略 Next 陳述式中的元素，仍可以執行迴圈，但如果 Next 陳述式比它相對應的 For 陳述式先執行，則會產生錯誤。

您不能在 For...Each...Next 陳述式中使用使用者自訂型態陣列，因為 Variant 不能包含使用者自訂型態。


For...Next 陳述式

��� [image] ���

以特定次數來重複執行一段陳述式。

語法

For counter = start To end [Step step]
[statements]
[Exit For]
[statements]

Next [counter]

For�Next 陳述式的語法具有以下幾個單元：

單元	描述
Counter	必要引數，此為用做迴圈計數器的數值變數，這個變數不能是一個 Boolean，也不能是一個陣列元素。
Start	必要引數，計數器的初始值。
End	必要引數，計數器的終值。
Step	選擇性引數，讓計數器每次改變的間隔值，如果沒有指定，則 step 的預設值為 1。
Statements	選擇性引數，放在 For 和 Next 之間的一行或多行指令。
請注意

step 引數可以是正數或負數，此 step 引數值會決定迴圈的執行情形，如下所述：

值	迴圈會執行，如果
正數或 0	counter <= end
負數	counter >= end
當所有迴圈中的陳述式都執行後，step 的值會加到 counter 中，此時，迴圈中的陳述式可能會再執行 ( 根據計數器的正負值與終值的關係 )，也可能是結束迴圈，然後從 Next 陳述式之後的指令行繼續執行。

提示   在迴圈中改變計數器的值，將會使您的程式碼不容易閱讀和除錯。

在迴圈中可以放置任意個 Exit For 陳述式，以用來離開迴， Exit For 通常與條件式共同使用，例如 If...Then ，並會將控制權轉移到 Next 之後的陳述式。

您可以將一個 For...Next 迴圈放置在另一個 For...Next 迴圈中，以造成巢狀迴圈，不過在每個迴圈中的計數器，要使用不同的變數名稱，例如底下的架構是正確的：

For I = 1 To 10

For J = 1 To 10

For K = 1 To 10

...

Next K

Next J

Next I

附註   如果您省略 Next 陳述式中的計數器，仍可以執行迴圈，但如果 Next 陳述式比它相對應的 For 陳述式先執行，則會產生錯誤。


GoSub...Return 陳述式

��� [image] ���

在一個程序中跳到另一個副程式中執行，執行後再回來。

語法

GoSub line
...
line
...

Return

line 引數可以是任何的行標籤或行號。

請注意

您可以在程序中的任何地方使用 GoSub 和 Return ，但是 GoSub 與它相對應的 Return 陳述式必須放在相同的程序中，一個副程式中可以包含一個以上的 Return 陳述式，但是當碰到第一個 Return 陳述式時，程式就會從 GoSub 指令行之後的陳述式繼續執行。

附註   您不能使用 GoSub...Return 來進入或離開 Sub 程序。

提示   建立個別的程序，並使用 GoSub...Return 來呼叫，可以讓您的程式更具結構化。


GoTo 陳述式

��� [image] ���

無條件跳到程序中的某標記或行號。

語法

GoTo line

line 引數是必要的，它可以是任何的行標籤或行號。

請注意

GoTo 只能跳到它所在程序中的行號或標記。

附註   太多的 GoTo 陳述式，會使得程式碼不容易閱讀及除錯，請儘可能使用結構化的控制項陳述式 (Do...Loop、For...Next、If...Then...Else、Select Case)。


If...Then...Else 陳述式

��� [image] ���

根據某運算式的值來決定要執行哪些部份的陳述式。

語法

If condition Then [statements][Else elsestatements]

或者，您可以使用區塊形式語法：

If condition Then
[statements]

[ElseIf condition-n Then
[elseifstatements]...

[Else
[elsestatements]]

End If

If...Then...Else 陳述式的語法具有以下幾個單元：:

單元	描述
Condition	必要引數，一個或多個具有底下兩種型態的運算式：
	數值運算式或字串運算式，其運算結果為 True 或 False ，如果 condition 為 Null，則 condition 會視為 False 。
	以 TypeOf objectname Is objecttype. 形式存在的運算式，其中的 objectname 是任何的物件引用，而 objecttype 則是任何有效的物件型態，如果 objectname 是 objecttype 所指定的一種物件型態，則運算式為 True，否則為False。
Statements	在區塊形式中是選擇性引數。但是在單行形式中、且沒有 Else 子句時，則為必要引數，在單行形式中，也可以有多行陳述式，各陳述式要以冒號分開。
Condition-n	選擇性引數，與 condition 同。
Elseifstatements	選擇性引數，如果相關的 condition-n 為 True，則執行此部份的陳述式。
Elsestatements	選擇性引數，如果所有的條件式都不成立時，則執行此部份的陳述式。
請注意

您可以使用單行形式 ( 第一種語法 ) 來簡化程式碼，但是，區塊形式 ( 第二種語法 ) 則提供結構化與彈性的功能，而且也較容易閱讀、維護、 及除錯。

附註   在單行形式中，也可以放上多行的陳述式，只要在這些陳述式間加上冒號即可，如底下這行陳述式所示：

   If A > 10 Then A = A + 1 : B = B + A : C = C + B

在區塊形式中， If 陳述式必須是第一行指令行，而其中的 Else, ElseIf, 和 End If 部份可以在之前加上行號或行標籤，而區塊式 If 必須在最後加上一個 End If 陳述式。

要決定某個陳述式是否為一個區塊 If，可檢查 Then 關鍵字之後是什麼，如果在 Then 同一行之後，還有其它非註解的字串，則此陳述式就是單行形式的 If 陳述式。

Else 和 ElseIf子句都是可有可無。在區塊式 If 中，您可以放置多個 ElseIf 子句，但是都必須在 Else 子句之前，區塊式 If 陳述式也可以是巢狀。

當程式執行到一個區塊式 If ( 第二種語法 ) 時，則條件式會加以測試，如果條件式為 True ，則在 Then 之後的陳述式會被執行。如果條件式為 False ，則 每個 ElseIf 部份的條件式 ( 如果有的話 ) 會輪流地計算並加以測試， 如果找到某個為 True 的條件式時，則其 Then 部份的陳述式會被執行。萬一都沒有一個 ElseIf 條件式為 True ( 或是根本就沒有 ElseIf 子句 )，則程式會執行 Else 部份的陳述式。而在執行完後，會從 End If.之後的陳述式繼續執行。

提示   對於根據單一運算式來執行多種可能的動作時，Select Case 應該會更為有用，不過，TypeOf objectname Is objecttype 子句並不能使用在 Select Case 陳述式中。

附註   TypeOf 不能用於 Object 以外，諸如 Long, Integer 等資料型態。


IIf Function
IIf 函數

��� [image] ���

根據某運算式的值，來傳回兩部份中的其中一個。

語法

IIf(expr, truepart, falsepart)

IIf 函數的語法含有底下這些指名引數：

單元	描述
expr	必要引數，用來評估真偽的運算式。
true單元	必要引數，如果 expr 為 True，則傳回這部份的值。
false單元	必要引數，如果 expr 為 False，則傳回這部份的值。
請注意

由於 IIf 會計算 truepart 以及 falsepart，雖然它只傳回其中的一個，所以您應該要留意這項副作用，例如，如果 falsepart 會產生除以零的錯誤，那麼程式就會發生錯誤，即使 expr 為 True。


On...GoSub，On...GoTo 陳述式

��� [image] ���

根據某運算式的值，來跳到特定行號執行。

語法

On expression GoSub destinationlist

On expression GoTo destinationlist

On...GoSub 和 On...GoTo 陳述式的語法具有以下幾個單元：

單元	描述
expression	必要引數，此為數值運算式，其運算結果應該是一個介在 0 到 255 之間的整數， 如果 expression 的計算結果不是一個整數，則它會先換算為與它最接近的整數
destinationlist	必要引數，行號或行標記的串列，之間要以逗號隔開。
請注意

運算式的值會決定跳到 destinationlist.串列中的哪一個行號處執行，如果這個值小於1或大於串列的項目個數，則會產生底下的情形：

如果運算式的值是	則
等於 0	控制權會轉移到 On...GoSub 或 On...GoTo.之後的陳述式。
大於串列的項目個數	控制權會轉移到 On...GoSub 或 On...GoTo.之後的陳述式。
負數	會發生錯誤。
大於 255	會發生錯誤。
您可以在 On...GoSub...和 On...GoTo.的串列中混合使用行號和標記，也可隨意使用任意個行號和標記，但是，如果您使用太多的行號和標記，以至於在一行中放不下，那麼您就必須在一行後使用行接續字元來銜接到下一行。

提示   若要執行多重分支，Select Case 提供一種更結構化與彈性的方法。


Partition 函數

��� [image] ���

傳回一個數值範圍中的第幾個出現的 Variant (String) 。

語法

Partition(number, start, stop, interval)

Partition 函數的語法含有底下這些指名引數：

單元	描述
number	必要引數，此為整數，用來指定從範圍中取出哪一段範圍。
start	必要引數，數值範圍的開始值，這個數值不能小於 0。
stop	必要引數，數值範圍的結束值，這個數值不能等於或小於 start。
請注意

Partition 函數會根據 number 值指出特定的範圍，並傳回一個 Variant (String) 來表示這個範圍。Partition 函數通常特別有用於查詢上，您可以建立用來查詢訂單範圍的情形，例如，訂單數量從 1 到 1000、1001 到 2000，以此類推。

The底下的表格使用三組 start，stop 以及 interval 部份，來顯示範圍的設定情行，第一個範圍和最後範圍欄位顯示 Partition 的可能傳回值，此範圍是以 「低值：高值」 表示，兩個值之間以冒號分開。

start	stop	interval	Before First	First Range	Last Range	After Last
0	99	5	"   :-1"	"      0:  4"	"     95: 99"	"   100:   "
20	199	10	"   :  19"	"    20:  29"	"   190: 199"	"   200:   "
100	1010	20	"   :   99"	"  100:  119"	" 1000: 1010"	" 1011:   "
從上面的表格中得知，在第三列中，由 start 和 stop 所定義的數值範圍不能以 interval 來均分，所以其最後範圍只能有 11 個數。

如果必要的話，Partition 會在傳回值範圍中加上足夠的空白，以便讓傳回值有等長的字元數，如此可確保當您要使用 Partition 與其它的數值作運算時，所得的字串，可以在之後的排序動作中得到正確的結果。

如果 interval 是 1，則範圍便是 number:number，而不管 start 和 stop 引數為何。比如說，如果 interval 是1， number 是 100，而 stop 是 1000，則 Partition 會傳回 "  100:  100"。

如果任何單元都是 Null，則 Partition 會傳回一個 Null。


Select Case 陳述式

��� [image] ���

根據某運算式的值，來決定要執行哪段陳述式。

語法

Select Case testexpression
[Case expressionlist-n
[statements-n]] ...
[Case Else
[elsestatements]]

End Select

Select Case 陳述式的語法具有以下幾個單元：

單元	描述
testexpression	必要引數，此為任何的數值運算式或字串運算式。
expressionlist-n	如果 Case 出現，則為必要引數，其形式可為以下多種情形：運算式，運算式 To 運算式，Is 比較運算式。To 關鍵字可用來指定數值範圍，如果您使用 To 關鍵字，則較小的數值要出現在 To 之前，使用 Is 關鍵字時，則可以配合比較運算子 ( 除 Is 和Like 之外 ) 來指定數值範圍，如果沒有題供，則 Is 關鍵字會自動插入。
statements-n	選擇性引數，如果 testexpression 合乎某部份的expressionlist-n，則會執行相對應的陳述式。
elsestatements	選擇性引數，如果 testexpression 都不合乎任何的 Case 子句，則會執行這部份的陳述式。
請注意

如果 testexpression 合乎某個 Case expressionlist 運算式， 則在 Case 子句之後的陳述式會被執行，直到下一個 Case 子句，如果是最後一個子句，則會執行到 End Select 。 然後控制權會轉移到 End Select 之後的陳述式，如果 有一個以上的 Case 子句中的 expressionlist 運算式合乎 testexpression 的條件，則只有最先的那一段之中的陳述式會被執行。

當 testexpression和所有的 Case 子句中的 expressionlist 都不合乎時，則會執行 Case Else 子句中的指令，雖然 Case Else 不是必要的，但是在您的 Select Case區塊中，最好還是加上 Case Else 陳述式來處理特別的 testexpression 值。如果沒有 Case expressionlist 合乎 testexpression ，而且也沒有 Case Else 陳述式，則程式會從 End Select 之後的陳述式繼續執行。

您可以在每個 Case 子句中使用多重運算式或使用範圍，例如，底下的陳述式是正確的：

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

附註   Is 比較運算元和使用在 Select Case 陳述式中的 Is 關鍵字並不相同。

您也可以針對字串指定範圍和多重運算式，在底下的例子中， Case 所合乎的字串為：等於 everything 、按英文字母排列的從 nuts 到 soup 之間的字串、以及 TestItem 所代表的現值。

Case "everything", "nuts" To "soup", TestItem

Select Case 陳述式也可以是巢狀，但每個 Select Case 陳述式必須要有相對的 End Select 陳述式。


Shell 函數

��� [image] ���

R執行一個執行檔程式，如果成功的話，會傳回一個 Variant (Double) 來代表這個程式的 task ID，若不成功，則會傳回 0。

語法

Shell(pathname[,windowstyle])

Shell 函數的語法含有底下這些指名引數：

單元	描述
pathname	必要引數，Variant (String)，要執行的程式名稱，以及任何必要的引數或命令列變數，同可時加上目錄或檔案夾名稱，以及磁碟機名稱。
Windowstyle	選擇性引數，此為 Variant (Integer)，表示在程式執行時，視窗的呈現型態，如果 windowstyle 省略，則程式是以最小化來執行。
windowstyle 指名引數有以下這些值：

常數	值	描述
vbHide	0	視窗會被隱藏，且駐點會移到隱藏的視窗。
VbNormalFocus	1	視窗具有駐點，且會還原到它原來的大小和位置。
VbMinimizedFocus	2	視窗會以一個圖示來顯示，並具有駐點。
VbMaximizedFocus	3	視窗會最大化，並具有駐點。
VbNormalNoFocus	4	視窗會被還原到前一次的大小和位置，而目前使用中的視窗仍然維持使用中。
VbMinimizedNoFocus	6	視窗會以一個圖示來顯示，而目前使用中的視窗仍然維持使用中。
請注意

如果 Shell 函數可以成功地執行所要的執行檔，則它會傳回啟始程式的 task ID，task ID 是一個唯一的數值，用來指名執行中的程式，如果 Shell 函數無法開啟指名的程式，則會產生錯誤。

附註   預設情況為 Shell 函數是以非同時方式來執行其它程式，也就是說，用 Shell 所啟動的程式，可能還沒執行完全，就執行到 Shell 函數之後的陳述式。


Stop 陳述式

��� [image] ���

暫停並懸置執行。

語法

Stop

請注意

您可以在程序中的任何地方放置 Stop 陳述式，使用 Stop 陳述式，就相當於在程式碼中設定中斷點。

Stop 陳述式會暫停程式的執行，但是它不像 End，因為 Stop 不會關閉任何檔案，或清除變數，除非它是以編譯後的執行檔 (.EXE) 方式來執行。


Switch 函數

��� [image] ���

計算一組運算式串列的值，然後傳回與運算式串列中最先為 True 所相聯的 Variant 數值或運算式。

語法

Switch(expr-1, value-1[, expr-2, value-2 _ [, expr-n,value-n]])

Switch 函數的語法具有以下幾個單元：

單元	描述
expr	必要引數，要加以計算的 Variant 運算式。
value	必要引數，如果相聯的運算式為 True，則傳回此部份的數值或運算式。
請注意

Switch 函數的引數串列包含多對的運算式和數值，運算式是由左至右加以計算，而數值則會在相聯的運算式為 True 時傳回。如果其中有部份沒有成對，則會產生一個執行中錯誤。如果 expr-1 為 True 則 Switch 傳回 value-1 ，如果 expr-1 為 False，但 expr-2 為 True，則 Switch 傳回 value-2 ，以此類推。

Switch 會傳回一個 Null 值，如果：

•	沒有一個運算式為 True.

•	第一個為 True 的運算式，其相對應得值為 Null。

Switch 會計算所有的運算式，雖然它只會傳回其中的一個值，因此您應該留意所產生的副作用，例如，有某個運算式會導致除以零，那麼就會發生錯誤。


While...Wend 陳述式

��� [image] ���

只要指定的條件式為 True ，則會重複執行一系列的陳述式。

語法

While condition
[statements]

Wend

While...Wend 陳述式的語法具有以下幾個單元：

單元	描述
condition	必要引數，數值運算式或字串運算式，其計算結果為 True 或 False.，如果 condition 為 Null ，則 condition 會視為 False。
statements	選擇性引數，一行或多行的陳述式。
請注意

如果條件式為 True，則所有的陳述式都會執行，一直執行到 Wend 陳述式。然後再回到 While 陳述式，並再一次檢查條件式，如果條件式還是為 True，則重複此步驟，如果條件式不為 True，則程式會從 Wend 陳述式之後的指令行繼續執行。

While...Wend 迴圈也可以是多層的巢狀結構，每個 Wend 都要有相對應的 While 陳述式。

提示   Do...Loop 陳述式提供一種更結構化與彈性的方法來執行迴圈。


With 陳述式

��� [image] ���

在一個單一物件或一個使用者自訂型態上執行一系列的陳述式。

語法

With object
[statements]

End With

With 陳述式的語法具有以下幾個單元：

單元	描述
object	必要引數，一個物件或使用者自訂型態的名稱
statements	選擇性引數，要執行在物件上的一行或多行陳述式。
請注意

With 陳述式可讓您對某個物件執行一系列的陳述式，而不用重複指出物件的名稱，例如，要改變一個物件的多個屬性，可以在 With 控制權結構中加上指定屬性的陳述式，這時後只要再第一行指名物件名稱，而之後的指定屬性陳述式中就不用再加上物件名稱。底下的例子說明如何使用 With 陳述式來在同一物件上指定值給其多個屬性。

With MyLabel

.Height = 2000

.Width = 2000

.Caption = "This is MyLabel"

End With

附註   當程式一旦進入 With 區塊，物件就不能改變，所以您不能用一個 With 陳述式來設定多個不同的物件。

您可以將一個 With 區塊放在另一個之中，而產生巢狀的 With 陳述式，但是，由於外部的 With 區塊會遮罩住內層的 With 區塊，所以您必須在內層的 With 區塊中，使用完整的物件引用來指出在外層的 With 區塊中的物件成員。

附註   在一般情況下，建議您不要跳入或跳出 With 區塊。如果在 With 區塊中的陳述式被執行，但是 With 或 End With 陳述式並沒有執行，則一個包含對該物件引用的昝時變數將保留在記憶體中，直到您結束該程序。


Asc 函數範例

本範例使用 Asc 函數來傳回字串第一個字母的字元值(ASCII 值)。

Dim MyNumber

MyNumber = Asc("A")	' 傳回 65。

MyNumber = Asc("a")	' 傳回 97。

MyNumber = Asc("Apple")	' 傳回 65。


CBool 函數範例

本範例使用 CBool 函數來將一運算式轉成 Boolean 值。如果運算式的結果為非零的值，CBool 傳回 True；否則傳回 False。

Dim A, B, Check

A = 5: B = 5	' 設定變數初值。

Check = CBool(A = B)	' Check 的值為 True。

A = 0	' Define variable.

Check = CBool(A)	' Check 的值為 False。


CByte 函數範例

本範例使用 CByte 函數將一運算式轉成 Byte。

Dim MyDouble, MyByte

MyDouble = 125.5678	' MyDouble 為 Double。

MyByte = CByte(MyDouble)	' MyByte 值為 126。


CDate 函數範例

本範例使用 CDate 函數將字串轉成 Date。一般而言，直接將慣用的日期與時間內容以字串來表示 (如範例中所示) 並不好。較好的做法是使用日期表示式和時間表示式，如 #2/12/1969#和#4:45:23 PM#。

Dim MyDate, MyShortDate, MyTime, MyShortTime

MyDate = "February 12, 1969"	' 定義日期。

MyShortDate = CDate(MyDate)	' 轉換成 Date 資料型態。

MyTime = "4:35:47 PM"	' 定義時間。

MyShortTime = CDate(MyTime)	' 轉換成 Date 資料型態。


CCur 函數範例

本範例使用 CCur 函數將運算式轉成 Currency。

Dim MyDouble, MyCurr

MyDouble = 543.214588	' MyDouble 為 Double 型態。

MyCurr = CCur(MyDouble * 2)	' 將 MyDouble * 2 的結果

' (1086.429176)轉換成 Currency (1086.4292)。


CDbl 函數範例

本範例使用 CDbl 函數將運算式轉換成 Double 型態的數值。

Dim MyCurr, MyDouble

MyCurr = CCur(234.456784)	' MyCurr 為 Currency 型態。

MyDouble = CDbl(MyCurr * 8.2 * 0.01)	' 將結果轉換成 Double 型態之數值。


CInt 函數範例

本範例使用 CInt 函數將一數值轉換成 Integer。

Dim MyDouble, MyInt

MyDouble = 2345.5678	' MyDouble 為 Double 型態。

MyInt = CInt(MyDouble)	' MyInt 的值為 2346。


CLng 函數範例

本範例使用 CLng 函數將一數值轉換成 Long。

Dim MyVal1, MyVal2, MyLong1, MyLong2

MyVal1 = 25427.45: MyVal2 = 25427.55	' MyVal1、MyVal2 均為 Double 型態。

MyLong1 = CLng(MyVal1)	' MyLong1 的值為 25427。

MyLong2 = CLng(MyVal2)	' MyLong2 的值為 25428。


CSng 函數範例

本範例使用 CSng 函數將一數值轉換成 Single。

Dim MyDouble1, MyDouble2, MySingle1, MySingle2

' MyDouble1、MyDouble2 均為 Double 型態。

MyDouble1 = 75.3421115: MyDouble2 = 75.3421555

MySingle1 = CSng(MyDouble1)	' MySingle1 的值為 75.34211。

MySingle2 = CSng(MyDouble2)	' MySingle2 的值為 75.34216。


CStr 函數範例

本範例使用 CStr 函數將一數值轉換成 String。

Dim MyDouble, MyString

MyDouble = 437.324	' MyDouble 為 Double 型態。

MyString = CStr(MyDouble)	' MyString 的內容為 [437.324]。


CVar 函數範例

本範例使用 CVar 函數將運算式轉換成 Variant。

Dim MyInt, MyVar

MyInt = 4534	' MyInt 為 Integer 型態。

MyVar = CVar(MyInt & "000")	' MyVar 的內容為字串 [4534000]。


CVErr 函數範例

本範例使用 CVErr 函數來傳回一 Variant 型態之結果，其 VarType 為 vbError (10)。如果傳進去的引數不是一個數字，使用者自訂函數 CalculateDouble 將會傳回錯誤訊息。您可以使用 CVErr 來傳回使用者自訂程序所傳回之自訂錯誤碼，或改變執行時期錯誤狀況的處理方式。IsError 函數可讓您檢查傳回值是否代表錯誤狀況的發生。

' 呼叫 CalculateDouble，且傳入一會產生錯誤的引數。

Sub Test()

Debug.Print CalculateDouble("345.45robert")

End Sub

' 定義 CalculateDouble 函數程序。

Function CalculateDouble(Number)

If IsNumeric(Number) Then

CalculateDouble = Number * 2	' 傳回結果。

Else

CalculateDouble = CVErr(2001)	' 傳回一自訂之錯誤代碼。

End If

End Function


Val 函數範例

本範例使用 Val 函數來傳回字串中所含的數值。

Dim MyValue

MyValue = Val("2457")	' 傳回 2457。

MyValue = Val(" 2 45 7")	' 傳回 2457。

MyValue = Val("24 and 57")	' 傳回 24。


CDec 函數範例

本範例使用 CDec 函數把數值轉換成Decimal。

Dim MyDecimal, MyCurr

MyCurr = 10000000.0587	' MyCurr is a Currency.

MyDecimal = CDec(MyCurr) 	' MyDecimal is a Decimal.


轉換函數

Asc 函數

CBool 函數

CByte 函數

CCur 函數

CDate 函數

CDec 函數

CDbl 函數

Chr 函數

CInt 函數

CLng 函數

CSng 函數

CStr 函數

CVar 函數

CVErr 函數

Format 函數

Hex 函數

Oct 函數

Str 函數

Val 函數


Asc 函數

��� [image] ���

傳回一個 Integer，為字串中第一個字母的字元碼。

語法

Asc(string)

string 引數是任何可用的字串運算式。若是 string 中沒有包含任何字元，則會產生執行階段錯誤。

請注意

在非雙位元組字元集系統下，其傳回範圍為 0 到 255。 若在雙位元組字元集系統下，則為 -32768 到 32767。

附註    AscB 函數是用來處理包含位元組資料的字串，AscB 會傳回第一個位元組，而非第一個字元的字元碼。AscW 函數會傳回 Unicode 字元碼，若平台不支援 Unicode，則與Asc函數功能相同。


CVErr 函數

��� [image] ���

傳回含有 Error 次型態的 Variant，包含使用者指定的錯誤代碼。

語法

CVErr(errornumber)

errornumber 引數是任何可用的錯誤號碼。

請注意

您可在使用者自訂程序中，使用 CVErr 函數來建立使用者自訂的錯誤。例如建立一個函數，它可以接受數個引數，且正常傳回一個字串，您可以經由函數來判斷輸入的引數，確定引數是否在正確的範圍內。如不在正確範圍 ，此函數將不會傳回所要的字串。在這種情況下，CVErr 可傳回一個錯誤代碼，並告訴您該採取的行動。

請注意，Error 間接轉換是不被允許的。例如，您無法指定 CVErr 的傳回數值至一個非 Variant 的變數。然而，您可以經由 CVErr 與指定適當的資料型態變數，將傳回數值做直接轉換(使用 CInt、CDbl 等等)。


Val 函數

��� [image] ���

傳回包含於字串內的數字。

語法

Val(string)

string 引數是任何可用的字串運算式。

請注意

當字串內的第一個字元不是數字時，Val 函數將會停止讀取字串。至於常用來表示數字值的符號和字元，如貨幣別與逗號，也都無法辨認。但是函數可以辨認進位符號 &O (八進位) 與 &H (十六進位)、空白、定位點、與換行符號。

下列傳回值為 1615198：

Val("    1615 198th Street N.E.")

在下列的程式碼，Val 內顯示十六進位數值，其傳回值為十進位數值-1。

Val("&HFFFF")

附註    Val 函數只會將句點(.)視為可使用的小數點分隔符號。當使用不同的小數點分隔符號，如在全球性應用程式中，應使用 CDbl 來取代字串轉換為數字。


型態轉換函數

��� [image] ���

這些函數可強制一個運算式轉成特定的資料型態。

語法

CBool(expression)

CByte(expression)

CCur(expression)

CDate(expression)

CDbl(expression)

CDec(expression)

CInt(expression)

CLng(expression)

CSng(expression)

CStr(expression)

CVar(expression)

CStr(expression)

expression 引數為任何字串運算式或數值運算式。

傳回型態

下列顯示函數對應的傳回型態：

函數	傳回型態	expression 引數範圍
CBool	Boolean	任何可使用的字串或數值運算式。
CByte	Byte	0 至 255。
CCur	Currency	-922,337,203,685,477.5808至922,337,203,685,477.5807。
CDate	Date	任何可使用的日期運算式。
CDbl	Double	負數從 -1.79769313486231E308至-4.94065645841247E-324；正數從4.94065645841247E-324至1.79769313486232E308。
CDec	Decimal	+/-79,228,162,514,264,337,593,543,950,335，無小數位數。對於 28 位數的數值範圍則為  +/-7.9228162514264337593543950335；最小的可能非零值是 0.0000000000000000000000000001。
CInt	Integer	-32,768 至 32,767；小數部份將被轉換。
CLng	Long	-2,147,483,648 至 2,147,483,647；小數部份將被轉換。
CSng	Single	負數為 -3.402823E38 至 -1.401298E-45；正數為 1.401298E-45 至 3.402823E38。
CStr	String	字串 CStr 傳回值是依據 express 引數。
CVar	Variant	若為數值，則範圍與Double 相同；若非數值，其範圍與 String 相同。
請注意

若 expression 超出此函數的資料型態允許的範圍，則會發生錯誤。

通常，您可以使用資料型態轉換函數，以特定的資料型態，取代預設的資料型態運算結果。例如，使用 CCur 來強制執行貨幣運算，無論是單精數、倍精數、或整數運算，都可以正常執行。

您最好使用資料型態轉換函數來取代 Val，以讓任何一個資料型態可轉換至其他語言版本。例如，當您使用 CCur，不同的小數點分隔符號、千分位分隔符號，和不同的貨幣選項，會依據您系統的地區設定來做適當的確認。.

當小數部分恰好為 0.5 時，Cint 和 CLng 函數會將它轉換成最接近的偶數值。例如，0.5 轉換成 0、1.5 轉換成 2。Cint 和 CLng 函數不同於 Fix 和 Int 函數，Fix 和 Int 會將小數部分去除，然後轉回整數值。

使用 IsDate 函數，可判斷 date 是否可以被轉換成日期或時間。CDate 可用來識別短式日期，轉換數字為日期時，整個數字部分將轉換成日期，數字中的小數部分將轉換為時間，自午夜起算。

CDate 是以您所在地的系統設定來決定日期的格式。若提供的格式為不可辨識的日期設定，則無法判斷日、月、年的順序。此外，含有星期字串的長日期格式也無法辨識。

CVDate 函數同樣也是用來與早期的 Visual Basic 版本相容。CVDate 函數的語法與 CDate 函數完全相同，不過，CVDate 是傳回 Variant，其次型態是Date ，而非真正的 Date 型態。因為現在已有 Date 型態，因此不再需要 CVDate。轉換一個運算式成為 Date，再指定它至一個 Variant，也可以達到相同的效果。您也可以使用這種技巧將其他資料型態轉換至對等的 Variant 次型態。

附註    CDec 函數不會傳回其他的資料型態，而會傳回一個 Variant，它的值會被轉換成一個 Decimal 次型態。


$TCStr 傳回值

若 expression is	CStr 傳回
Boolean	含有 True或 False 的字串
Date	含有系統中短日期格式日期的字串
Null	一個執行階段錯誤
Empty	一個零長度字串 ("")
Error	包含單字 Error 以及錯誤代碼的字串
其他數值	含有數字的字串


Boolean 資料型態

��� [image] ���

Boolean 變數係以 16 位元(2 個位元組) 數字的形式儲存，但只能是 True 或是 False。Boolean 變數的值不是 True 就是 False (在使用 Print 的時候)，或是 #TRUE# 和 #FALSE# (在使用 Write # 的時候)。使用關鍵字 True 與 False 可將 Boolean 變數指定為這兩個狀態中的一個。

當轉換其他的數值型態為 Boolean 時，0 會轉成 False，而所有其他的值則變成 True。當轉換 Boolean 值為其他的資料型態,時，False 成為 0 ，而 True 成為 -1。


Byte 資料型態

��� [image] ���

Byte 變數係以範圍在 0 至 255 之單精度、無正負號、8 位元 ( 1個位元組 ) 數字的形式儲存。

Byte 資料型態適用於二進位的資料。


Currency 資料型態

��� [image] ���

Currency 變數係以 64 位元 (8 個位元組) 整數格式的數字形式儲存，在小數點左邊有 15 位數，右邊 4 位數的數字。這種表示法的範圍可以從 -922,337,203,685,477.5808 到 922,337,203,685,477.5807。Currency 的型態宣告字元為 @。

Currency 資料型態適用於精確度特別重要的貨幣與固定點計算。


資料型態摘要

���

以下表格顯示所支援的資料型態，以及儲存空間大小與範圍。

資料型態	儲存空間大小	範圍
Byte	1 個位元組	0 到 255
Boolean	2 個位元組	True 或 False
Integer	2 個位元組	-32,768 到 32,767
Long (long integer)	4 個位元組	-2,147,483,648 到 2,147,483,647
Single  (單精度浮點數)	4 個位元組	負數時從 -3.402823E38 到 -1.401298E-45；正數時從 1.401298E-45 到 3.402823E38
Double   (雙精度浮點數)	8 個位元組	負數時從 -1.79769313486231E308 到  -4.94065645841247E-324；正數時從4.94065645841247E-324 到 1.79769313486232E308
Currency   (大範圍的整數)	8 個位元組	從 -922,337,203,685,477.5808 到 922,337,203,685,477.5807
Decimal	14 個位元組	沒有小數點時為 +/-79,228,162,514,264,337,593,543,950,335，而小數點右邊有 28 位數時為 +/-7.9228162514264337593543950335；最小的非零值為 +/-0.0000000000000000000000000001。
Date	8 個位元組	January 1, 100 到 December 31, 9999
Object	4 個位元組	任何 Object 引用
String  (可變長度字串)	10 位元組加字串長度	0 到大約 20 億
String (固定長度字串)	字串長度	1 到大約 65,400
Variant (數值)	16 個位元組	任何數值，最大可達 Double 的範圍
Variant (字元)	22 個位元組 加字串長度	與變動長度 String 有相同的範圍
使用者定義 (利用 Type)	元件所需數目	每個元件的範圍與它本身的資料資料型態的範圍相同。
附註   任何資料型態的陣列需要 20 個位元組的記憶體空間、陣列維數佔 4 個位元組，再加上資料本身所佔的空間。資料所佔的記憶體空間可以資料元件數目乘上每個元件的大小加以計算。例如，以 4 個 2 位元組之 Integer 資料元件所組成之一維陣列中的資料，每個佔 8 個位元組。此資料所需之 8 個位元組加上額外之 24 位元組，使得這個陣列所需總記憶體空間為 32 個位元組。

有一陣列的 Variant 比單獨的一個陣列需要多 12 個位元組。

備註���使用 StrConv 函數將一字串資料型態轉換為另一種型態。


Date 資料型態

��� [image] ���

Date 變數係以 IEEE 64 位元(8 個位元組) 浮點數字的形式儲存，其可以表示的範圍從 1 January 100 到 31 December 9999，而時間可以從 0:00:00 到 23:59:59。任何可辨認的文字日期都可以指定給 Date 變數。短式日期須以數字符號 (#) 包住，例如，#January 1, 1993# 或 #1 Jan 93#。

Date 變數會根據電腦中的短日期格式來顯示；時間則根據電腦的時間格式 (12 或 24 小時制) 來顯示。

當其他的數值型態要轉換成 Date，小數點左邊的值表示日期資訊，而小數點右邊的值則表示時間。午夜為 0 而中午為 0.5。負整數表示 30 December 1899 之前的日期。


Decimal 資料型態

��� [image] ���

Decimal 變數係以 96 位元 ( 12 個位元組 ) 有正負號的整數形式來儲存。10 的指數以小數點右邊的位元數來調整，範圍從 0 到 28。在沒有小數位數的情形下，最大的可能值為 +/-79,228,162,514,264,337,593,543,950,335。而在有 28 個小數位置的情形下，最大值為 +/-7.9228162514264337593543950335，而最小的非零值為 +/-0.0000000000000000000000000001。

附註   此時，Decimal 資料型態只能在 Variant中使用，也就是，您並不能宣告一變數為 Decimal 的型態。不過您可用 Cdec 函數，建立一個副型態為 Decimal 的 Variant。


Double 資料型態

��� [image] ���

Double (雙精度浮點數) 變數係以 IEEE 64 位元 (8 個位元組) 浮點數字的形式儲存，它的範圍在負數的時候是從 -1.79769313486231E308 到 -4.94065645841247E-324，而正數的時候是從 4.94065645841247E-324 到 1.79769313486232E308。Double 的型態宣告字元是數字符號(#)。


Integer 資料型態

��� [image] ���

Integer 變數係以範圍為 -32,768 到 32,767 之 16 位元 (2 個位元組) 數字的形式儲存。Integer 的型態宣告字元是百分比符號(%)。

您可以用 Integer 變數來表示列舉的值。列舉值可代表一個唯一的整數，並具有其特殊意義，可讓您在已知的選項中很快做出選擇。例如，black = 0，white = 1 等等。較好的程式做法是使用 Const 陳列式將每個列舉值定義成常數。


Long 資料型態

��� [image] ���

Long (長整數) 變數係以範圍從 -2,147,483,648 到 2,147,483,647 之 32 位元 (4 個位元組) 有號數字形式儲存。Long 的型態宣告字元為 &。


Object 資料型態

��� [image] ���

Object 變數係以參考到物件之 32 位元(4 個位元組)的位址形式儲存。利用 Set 陳述式宣告的 Object 的變數，可引用任何物件。

附註   雖然以 Object 型態宣告的變數在引用物件時較有彈性，而變數引用物件總是在後面的階段 (執行期連結)。要強迫在前面階段連結 (編譯期連結) 的話，須將物件指定給宣告為特定物件類別名稱之引用變數。


Single 資料型態

��� [image] ���

Single (單精度浮點數) 變數係以 IEEE 32 位元 (4 個位元組) 浮點數字的形式儲存，它的範圍在負數的時候是從 -3.402823E38 到 -1.401298E-45，而在正數的時候是從 1.401298E-45 到 3.402823E38。Single 的型態宣告字元為 !。


String 資料型態

��� [image] ���

字串有兩種：可變長度與固定長度的字串。

•	可變長度字串最多可有大約 20 億 ( 2^31)個字元。

•	固定長度的字串可有 1 到大約 64K ( 2^16 ) 個字元。

附註    Public之固定長度字串不能在物件類別模組中使用。

String之字元碼的範圍從 0 到 255。字元集的前 128 個字元 ( 0 到 127 ) 對應於標準的 U.S 鍵盤上的字元與符號。這前 128 字元與 ASCII 字元集中所定義的相同。後 128 字元 (128 到 255) 則代表特殊字元，例如國際字元，重音符號，貨幣符號及分數。String 的型態宣告字元為 $。


使用者自訂資料型態

��� [image] ���

任何用 Type 陳述式定義的資料型態。使用者自訂型態可包含一或多個某種資料型態的元件，陣列，或一個先前定義的使用者自訂型態。例如：

Type MyType

MyName As String	' String variable stores a name.

MyBirthDate As Date	' Date variable stores a birthdate.

MySex As Integer	' Integer variable stores sex (0 for

End Type	' female, 1 for male).


Variant 資料型態

��� [image] ���

Variant 資料型態是所有沒被明確宣告為其他型態 (用如 Dim、Private、Public 或 Static 的陳述式) 之變數的資料型態。Variant 資料型態並沒有型態宣告字元。

Variant 是一種特殊的資料型態，除了固定長度 String的資料及使用者自訂型態外，也可以包含任何種類的資料。Variant 也可以包含 Empty、Error、Nothing 及 Null 等特殊值。您可以用 VarType 函數或 TypeName 函數來決定如何處理 Variant 中的資料。

數值資料可以是任何整數或實數值，負數時範圍從
-1.797693134862315E308 到 -4.94066E-324，正數時則從 4.94066E-324 到 1.797693134862315E308。通常，數值 Variant 資料維持在其 Variant 中原來的資料型態。例如，如果您指定一 Integer 給 Variant，則接下來的運算會把此 Variant 當成一 Integer 來處理。然而，如果一算術運數針對含 Byte、Integer、Long 或 Single 之一Variant 執行，而當結果超過原來資料型態的正常範圍時，則在 Variant 中的結果會提升到較大的資料型態。如 Byte 則提升到 Integer，Integer 提升到 Long，而 Long 及 Single 則提升為 Double。當 Variant 變數中有 Currency、Decimal及 Double 值超過它們個別的範圍時，會發生錯誤。

您可以用 Variant 資料型態來取代任何的資料型態，以更有彈性的方式來運算。如果 Variant 變數的內容是數字，它可以用字串來表示數字或是用它實際的值來表示，由內容來決定，例如︰

Dim MyVar As Variant

MyVar = 98052

在前面的例子中，MyVar 內有一值 98052 的數字表示。算術運算子將內有數值或字串資料的 Variant 變數視為一數字。如果您用 + 運算子來將 MyVar 與其他含有數字或的數字型態變數的 Variant 相加，結果便是一算術和。

Empty 值用來標記尚未初始化(指定一初始值)的 Variant 變數。內含 Empty 之 Variant 在數字的上下文中表示 0，如果是用在字串的上下文中則表示是長度為零的字串("")。

不應將 Empty 與 Null 弄混。Null 是表示 Variant 變數刻意的含有無效資料。

在 Variant 中，Error 是用來指示在程序中出現錯誤情形的特別值。然而，不像其他種類的錯誤，普通的應用程式層次的錯誤處理常式並不會發生。這可以讓您，或應用程式本身，根據此錯誤值採取另外的行動。可以用 CVErr 函數將實數轉換成錯誤值來產生 Error 值。


Date 函數範例

本範例使用 Date 函數來傳回系統目前的日期。

Dim MyDate

MyDate = Date	' MyDate 的值為系統目前的日期。


Date 陳述式範例

本範例使用 Date 陳述式來設定系統日期。在開發環境中，日期會依您電腦的地區設定，以短式日期的格式顯示出。

Dim MyDate

MyDate = #February 12, 1985#	' 指定某個日期。

Date = MyDate	' 改變系統日期。


DateAdd 函數範例

本範例先取得一個日期，再用 DateAdd 函數來計算離該日期數個月後的日期，並將之顯示出。

Dim FirstDate As Date	' 宣告變數。

Dim IntervalType As String

Dim Number As Integer

Dim Msg

IntervalType = "m"	' "m" 指定以「月份」當間隔單位。

FirstDate = InputBox("Enter a date")

Number = InputBox("Enter number of months to add")

Msg = "New date: " & DateAdd(IntervalType, Number, FirstDate)

MsgBox Msg


DateDiff 函數範例

本範例使用 DateDiff 函數來計算某個日期到今天之間相差幾天，並將結果顯示出。

Dim TheDate As Date	' 宣告變數。

Dim Msg

TheDate = InputBox("Enter a date")

Msg = "Days from today: " & DateDiff("d", Now, TheDate)

MsgBox Msg


DatePart 函數範例

本範例先取得一個日期，然後使用 DatePart 函數計算該日期是該年的哪一季。

Dim TheDate As Date	' 宣告變數。

Dim Msg

TheDate = InputBox("Enter a date:")

Msg = "Quarter: " & DatePart("q", TheDate)

MsgBox Msg


DateSerial 函數範例

本範例使用 DateSerial 函數來將已知的年份、月份及日數轉換成一 Date 型態之表示式。

Dim MyDate

' MyDate 的值為 February 12，1969 之 Date 型態之表示式。

MyDate = DateSerial(1969, 2, 12)	' 傳回日期。


DateValue 函數範例

本範例使用 DateValue 函數將一字串內容轉換成日期。您也可以使用短式日期格式直接指定日期給一個 Variant 或 Date 型態之變數，例如：MyDate = #2/12/69#。

Dim MyDate

MyDate = DateValue("February 12, 1969")	' 傳回日期。


Day 函數範例

本範例使用 Day 函數來得知某個日期變數所記載的日期是該月的第幾天。在開發環境中，日期會依您電腦的地區設定，以短式日期的格式顯示出來。

Dim MyDate, MyDay

MyDate = #February 12, 1969#	' 指定一日期。

MyDay = Day(MyDate)	' MyDay 的值為 12。


Hour 函數範例

本範例使用 Hour 函數來得知某個時間變數所記錄時間之小時數。在開發環境中，時間會依您電腦的地區設定，以短式日期的格式顯示出來。

Dim MyTime, MyHour

MyTime = #4:35:17 PM#	' 指定一時間。

MyHour = Hour(MyTime)	' MyHour 的值為 16。


Minute 函數範例

本範例使用 Minute 函數來得知某個時間變數所記錄時間之分鐘數。在開發環境中，時間(日期亦同)會依您電腦的地區設定，以短式日期的格式顯示出來。

Dim MyTime, MyMinute

MyTime = #4:35:17 PM#	' 指定一時間。

MyMinute = Minute(MyTime)	' MyMinute 的值為 35。


Month 函數範例

本範例使用 Month 函數來得知某個日期變數所記載的日期之月份。在開發環境中，日期會依您電腦的地區設定，以短式日期的格式顯示出來。

Dim MyDate, MyMonth

MyDate = #February 12, 1969#	' 指定一日期。

MyMonth = Month(MyDate)	' MyMonth 的值為 2。


Now 函數範例

本範例使用 Now 函數來傳回目前的系統日期與時間。

Dim Today

Today = Now	' 將目前的系統日期與時間給變數。


Second 函數範例

本範例使用 Second 函數來傳回某個時間變數所記錄時間之秒數。在開發環境中，時間(日期亦同)會依您電腦的地區設定，以短式日期的格式顯示出來。

Dim MyTime, MySecond

MyTime = #4:35:17 PM#	' 指定一時間。

MySecond = Second(MyTime)	' MySecond 的值為 17。


Time 函數範例

本範例使用 Time 函數來傳回目前的系統時間。

Dim MyTime

MyTime = Time	' 傳回目前的系統時間。


Time 陳述式範例

本範例使用 Time 陳述式來設定系統時間。

Dim MyTime

MyTime = #4:35:17 PM#	' 指定一時間。

Time = MyTime	' 將 MyTime 的內容設定給系統時間。


Timer 函數範例

本範例使用 Timer 函數來讓應用程式暫停。範例中在暫停時使用到 DoEvents 來將程式執行權讓給其它程式。

Dim PauseTime, Start, Finish, TotalTime

If (MsgBox("Press Yes to pause for 5 seconds", 4)) = vbYes Then

PauseTime = 5	' 設定暫停時間。

Start = Timer	' 設定開始暫停的時刻。

Do While Timer < Start + PauseTime

DoEvents	' 將程式執行權讓給其它程式。

Loop

Finish = Timer	' 讀取現在時刻。

TotalTime = Finish - Start	' 計算暫停所經過的時間。

MsgBox "Paused for " & TotalTime & " seconds"

Else

End

End If


TimeSerial 函數範例

本範例使用 TimeSerial 函數來將已知的時數、分鐘數及秒數轉換成一時間表示式。

Dim MyTime

MyTime = TimeSerial(16, 35, 17)	' MyTime 的值為 4:35:17 PM 之時間表示式。


TimeValue 函數範例

本範例使用 TimeValue 函數將一字串內容轉換成時間表示式。您也可以使用短式日期格式，來直接指定時間給一個 Variant 或 Date 型態之變數(例如：MyTime = #4:35:17 PM#)。

Dim MyTime

MyTime = TimeValue("4:35:17 PM")	' 傳回一時間表示式。


Weekday 函數範例

本範例使用 Weekday 函數來傳回某一日期為星期幾。

Dim MyDate, MyWeekDay

MyDate = #February 12, 1969#	' 指定一日期。

MyWeekDay = Weekday(MyDate)	' MyWeekDay 的值為 4，因為 MyDate 是星期四。


Year 函數範例

本範例使用 Year 函數來傳回某個日期變數所記載的日期之年份。在開發環境中，日期會依您電腦的地區設定，以短式日期的格式顯示出。

Dim MyDate, MyYear

MyDate = #February 12, 1969#	' 指定一日期。

MyYear = Year(MyDate)	' MyYear 的值為 1969。


Date 函數

��� [image] ���

傳回一 Variant (Date)，內容為系統日期 (電腦所記錄的現在日期)。

語法

Date

請注意

若要設定系統日期，請使用 Date 陳述式。

Date 且如果日曆是 Gregorian，則 Date$ 行為不會為 Calendar 屬性設定所改變。如果日曆是 Hijri，則 Date$ 會傳回形式為 mm-dd-yyyy 的 10 個字元之字串，其中 mm (01-12)、dd (01-30) 和 yyyy (1400-1523) 為 Hijri 的月份、日和年份。同樣的 Gregorian 範圍為 1980 年 1 月 1 日到 2099 年 12 月 21 日。


Date 陳述式

��� [image] ���

設定系統日期。

語法

Date = 日期

如果您的電腦使用 Microsoft Windows 95，要設定的日期必須介於西元 1980 年 一月一日到 2099 年十二月三十一日之間。如果您的電腦使用 Microsoft Windows NT，要設定的日期必須介於西元 1980 年 一月一日到 2079 年十二月三十一日之間。


DateAdd 函數

��� [image] ���

傳回值為一 Variant (Date)，內容為某個基準日期加上特定時間間隔單位後的日期。

語法

DateAdd(interval, number, date)

DateAdd 函數語法中有下列的指名引數：

單元	說明
interval	必要引數。字串運算式，表示所要加上去之時間間隔單位。
number	必要引數。數值運算式，表示要加上之時間間隔單位的次數。其數值可以為正數 (可得未來日期)，亦可以為負數 (可得過去的日期)。
date	必要引數。可為型態為Variant (Date) 之變數或正確表示出日期之字串，代表基準日期，將此基準日期加上 number 次的 interval 後，即為傳回值之日期。
設定

interval 引數的設定值如下：

設定	說明
yyyy	西元年
q	季
m	月
y	一年的日數
d	日
w	一週的日數
ww	週
h	時
n	分
s	秒
請注意

DateAdd 函數可以計算基準日期加上或減去您所指定的時間間隔後的結果。例如，您可以用 DateAdd 來計算從今天起三十天後或三十天前的日期是那一天；或者計算距離現在 45 分鐘前或 45 分鐘後的時間。

如果時間間隔是以 [天] 來計算，interval 引數可以是 [一年的日數] ("y")，[日] ("d")，或 [一週的日數] ("w")。

DateAdd 函數所傳回的日期一定是有效的。下面的範例以一月三十一日為基準日，計算加上三十日後的結果。

DateAdd("m", 1, "31-Jan-95")

上例中，DateAdd 傳回 28-Feb-95，而不是 31-Feb-95。如果基準日 date 是 31-Jan-96，傳回值則是 29-Feb-96，因為 DateAdd 函數知道 1996 年是閏年。

如果減去的年度超過基準日的年份，就會產生程式錯誤。

如果 number 引數不是一個 Long 值，計算時會取最接近的整數值來計算。

附註   DateAdd 傳回值的格式由 Control Panel設定決定，而不是傳遞到 date引數的格式決定。

備註���對於 date，如果 Calendar 屬性的設定為 Gregorian，則提供的日期必須是 Gregorian。如果日曆是 Hijri，則提供的日期必須是 Hijri。如果月份值為名稱，則名稱必須與目前的 Calendar 屬性設定一致。若要使月份名稱與目前 Calendar 屬性設定的衝突降到最小，請輸入數字月份值 (短式日期格式)。


DateDiff 函數

��� [image] ���

傳回一 Variant (Long) 的值，表示兩個日期間相差的時間間隔單位數目。

語法

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

DateDiff 函數語法中有下列指名引數：

單元	說明
Interval	必要引數。字串運算式，表示用來計算date1 和 date2 之時間差的時間間隔單位。
Date1﹐date2	必要引數。Variant (Date)。若要計算兩個日期之時間差，計算的順序是從 date1 到 date2。
Firstdayofweek	選擇性引數。常數，表示一星期的第一天。如果省略此引數，則以星期日為第一天。
firstweekofyear	選擇性引數。常數，表示一年的第一週。如果省略此引數，則以包含一月一日的星期為第一週。
設定

interval 引數的設定值如下：

設定	說明
yyyy	年
q	季
m	月
y	一年的日數
d	日
w	一週的日數
ww	週
h	時
n	分
s	秒
firstdayofweek 引數之設定值如下：

常數	值	說明
vbUseSystem	0	使用NLS API 設定。
vbSunday	1	星期日 (預設值)。
vbMonday	2	星期一。
vbTuesday	3	星期二。
vbWednesday	4	星期三。
vbThursday	5	星期四。
vbFriday	6	星期五。
vbSaturday	7	星期六。
常數	值	說明
vbUseSystem	0	使用NLS API 設定。
vbFirstJan1	1	包含一月一日的星期 (預設值)。
vbFirstFourDays	2	第一個至少包含四天年假的星期。
vbFirstFullWeek	3	第一個無跨年的星期。
請注意

DateDiff 函數可用來決定兩個日期之間的時間間隔單位數目。例如，您可以使用 DateDiff 來計算某兩個日期之間相隔幾日，或計算從今天起到年底還有多少個星期。

如果想知道 date1 與 date2 相差的 [日] 數，interval 可以是 [一年的日數] ("y") 或 [日] ("d")。如果 interval 是 [一週的日數] ("w")，DateDiff 傳回兩日期間相差的週數。如果 date1 是星期一，DateDiff 計算到 date2 為止之星期一的個數。包含 date2 但不包含 date1。不過，如果 interval 是 [週] ("ww")，DateDiff 函數傳回兩日期間的 [日歷週] 數，由計算 date1 與 date2 之間星期日的個數而得。如果 date2 剛好是星期天，則 date2 也會被加進計數結果中；但不論 date1 是否為星期天，它都不會被算進去。

如果 date1 比 date2 來得晚，DateDiff 函數傳回值為負數。

如果 interval 引數為 [w] 或 [ww]，firstdayofweek 引數會影響其計算結果。

如果以短式日期的格式傳入日期引數，引數內的年份資料若有給定，則該日期便是固定的。但是，若日期以雙引號括起來，且年份資料並未給定，則現在的年份便會自動加入在該日期引數中。如此程式便可適用於不同年份而無須更改程式碼。

若計算十二月三十一日和來年的一月一日的年份差，DateDiff 會傳回 1 表示相差一個年份，雖然實際上只相差一天而已。

備註���對於 date1 和 date2，如果 Calendar 屬性的設定為 Gregorian，則提供的日期必須是 Gregorian。如果日曆是 Hijri，則提供的日期必須是 Hijri。


DatePart 函數

��� [image] ���

傳回一個 Variant (Integer)，內容為指定日期的某個時間部份，以指定的時間間隔單位計算。

語法

DatePart(interval, date[,firstdayofweek[, firstweekofyear]])

DatePart 函數語法中有下列指名引數：

單元	說明
interval	必要引數。字串運算，指定的時間間隔單位。
date	必要引數。Variant (Date) 所指定的日期。
Firstdayofweek	選擇性引數。常數，表示一星期的第一天。如果省略此引數，則以星期日為第一天。
firstweekofyear	選擇性引數。 常數，表示一年的第一週。如果省略此引數，則以包含一月一日的星期為第一週。
設定

interval 引數的設定值如下：

設定	說明
yyyy	年
q	季
m	月
y	一年的日數
d	日
w	一週的日數
ww	週
h	時
n	分
s	秒
firstdayofweek 引數之設定值如下：

常數	值	說明
vbUseSystem	0	使用NLS API 設定。
vbSunday	1	星期日 (預設值)。
vbMonday	2	星期一。
vbTuesday	3	星期二。
vbWednesday	4	星期三。
vbThursday	5	星期四。
vbFriday	6	星期五。
vbSaturday	7	星期六。
firstweekofyear 引數之設定值如下：

常數	值	說明
vbUseSystem	0	使用NLS API 設定。
vbFirstJan1	1	包含一月一日的星期 (預設值)。
vbFirstFourDays	2	第一個至少包含四天年假的星期。
VbFirstFullWeek	3	第一個非跨年的星期。
請注意

您可以使用 DatePart 函數來得知某個日期的特定時間單位。 例如，您可以使用 DatePart 來得知某個日期是星期幾。

如果 interval 引數為 [w] 或 [ww]，firstdayofweek 引數會影響其計算結果。

如果以短式日期的格式傳入日期引數，引數內所的年份資料若有給定，則該日期便是固定的。但是，若日期以雙引號括起來，且年份資料並未給定，則現在的年份便會自動加入在該日期引數中。如此程式便可適用於不同年份而無須更改程式碼。

備註   對於 date，如果 Calendar 屬性的設定為 Gregorian，則提供的日期必須是 Gregorian。如果日曆是 Hijri，則提供的日期必須是 Hijri。

傳回的日期部分是以目前 Arabic 日曆的時間間隔單位計算。例如，目前的日曆如果是 Hijri 而且要傳回的日期部分為年份，則該年份值為一 Hijri 年份。


DateSerial 函數

��� [image] ���

傳回一 Variant (Date)，內容為指定的年、月、日之日期表示式。

語法

DateSerial(year, month, day)

DateSerial 函數語法有下列的指名引數：

單元	說明
year	必要引數；Integer。從 100 到 9999 間的整數，或一數值運算式，表示年份。
month	必要引數；Integer。任何數值運算式，表示月份。
day	必要引數；Integer。任何數值運算式，表示日數
請注意

要表示某個日期，如 1991 年 12 月 31 日，DateSerial 函數中的每個引數值必須落在合理的範圍內；即，1-31 為合理之 [日]，而  1-12  為合理之 [月]。不過，您也可以計算和某個基準日相差某年某月某日的日期。此時所傳入的引數可以是任何數值運算式，表示相差的年、月、或日數。

下面的範例就是用數值運算式來計算和某個基準日相差某個時間的日期，而不是求某個日期的日期表示式。 範例中計算 1990 年 8 月 1 日之前 10 年 (1990 - 10) 兩個月 (8 - 2) 又 1 天 (1 - 1) 的日期；換句話說，即 1980 年 5 月 31 日。

DateSerial(1990 - 10, 8 - 2, 1 - 1)

在 Windows 98 或 Windows 2000 中，會根據使用者自訂的機器設定來解譯兩位數的 year 引數。若預設值為介於 0 到 29 的數值 (包含 0 和 29)，則當成是 2000 到 2029。若預設值介於 30 到 99 之間，則當成是 1930 到 1999。如要指定其它年份，請用四位數字表示 (如，1800)。

Windows 的稍早版本會根據上述的預設值來解譯兩位數的年份。若要確保此函數傳回正確的值，請使用四位數的年份。

當某個引數超過其合理範圍時，會自動進位到下一個較大的時間單位。例如，如果您指定 35 天在 day 引數中，則這個引數值會被解釋成一個月加上多出來的日數，多出的日數將會由其年份與月份引數來決定。 如果任何一個引數值超出 -32,768 到 32,767 的範圍，會產生程式錯誤。如果計算結果的日期超出作業系統接受的範圍，也會產生程式錯誤。

備註   對於 year、month 和 day，如果 Calendar 屬性的設定為 Gregorian，則提供的值會假定是 Gregorian。如果 Calendar 屬性的設定為 Hijri，則提供的值會假定是 Hijri。

傳回的日期部分是以目前 Visual Basic 日曆的時間間隔單位計算。例如，目前的日曆如果是 Hijri 而且要傳回的日期部分為年份，則該年份值為一 Hijri 年份。對於引數 year，介於 0 和 99 之間的值 (包含 0 和 99) 會解譯為 1400-1499。對於所有其它 year 值，請使用完整的四位數年份 (例如，1520)。


DateValue 函數

��� [image] ���

傳回一 Variant (Date) 型態的日期表示式。

語法

DateValue(date)

必要引數 date 通常是字串運算式，表示從西元 100 年 1 月 1 日到西元 9999  年 12 月 31 日間的某個日期。然而，date 也可以是其它型態的運算式，只要其所代表的日期或時間是落在上述範圍內即可。

請注意

如果 date 是個字串，且其內容只有數字及日期分隔符號，DateValue 會依照您的作業系統所選定的短式日期格式來決定月、日、年在字串中的順序。DateValue 也接受以正確無誤的英文月份名稱代替月份數字所表示的日期，全名或縮寫均可。例如，除了可用 12/30/1991 和 12/30/91 外，DateValue 也接受 December 30, 1991 和 Dec 30, 1991 來表示同一日期。

如果 date 中的年份省略，DateValue 會使用系統時間裏的現在年份。

如果 date 中包含日期與時刻的資料，DateValue 會把時刻部份捨去。但若 date包含錯誤的刻資料 (如 "89:98")，會產生程式錯誤。

備註   對於 date，如果 Calendar 屬性的設定為 Gregorian，則提供的日期必須是 Gregorian。如果日曆是 Hijri，則提供的日期必須是 Hijri。如果提供的日期是 Hijri，則引數 date 為一 String，代表從 1/1/100 (Gregorian Aug 2, 718) 到 4/3/9666 (Gregorian Dec 31, 9999) 之間的日期。


Day 函數

��� [image] ���

傳回一 Variant (Integer)，其值從 1到 31，表示一個月中的某一日。

語法

Day(date)

必要引數 date 可以是任何 Variant，數值運算式，字串運算式，或其組合，只要能夠表示一個合理的日期即可。如果 date 是 Null，則傳回 Null。

備註   如果 Calendar 屬性的設定為 Gregorian，則為 date 引數傳回的整數代表 Gregorian 的月份日期。如果日曆為 Hijri，則為 date 引數傳回的整數代表 Hijri 的月份日期。


Hour 函數

��� [image] ���

傳回一 Variant (Integer)，其值從 0 到 23，表示一天之中的某個 [時]。

語法

Hour(time)

必要引數 time 可以是任何 Variant，數值運算式，字串運算式，或其組合，只要可以表示出合理的時刻即可。如果 time 是 Null，則傳回 Null。


Minute 函數

��� [image] ���

傳回一 Variant (Integer)，其值從 0 到 59，表示一小時中的某個 [分]。

語法

Minute(time)

必要引數 time 可以是任何 Variant，數值運算式，字串運算式，或其組合，只要可以表示出合理的時刻即可。如果 time 是 Null，則傳回 Null。


Month 函數

��� [image] ���

傳回一 Variant (Integer)，其值從 1 到 12，表示一年中的某個 [月]。

語法

Month(date)

必要引數 date 可以是任何 Variant，數值運算式，字串運算式，或其組合，只要能夠表示一個合理的日期即可。如果 date 是 Null，則傳回 Null。

備註   如果 Calendar 屬性的設定為 Gregorian，則為 date 引數傳回的整數代表 Gregorian 一週中的日期。如果日曆是 Hijri，則為 date 引數傳回的整數代表 Hijri 一週中的日期。對於 Hijri 日期，引數 number 為任意數值運算式，可以代表從 1/1/100 (Gregorian Aug 2, 718) 到 4/3/9666 (Gregorian Dec 31, 9999) 之間的日期和 (或) 時間。


Now 函數

��� [image] ���

傳回一 Variant (Date)，內容為電腦現在所記錄的日期與時刻。

語法

Now


Second 函數

��� [image] ���

傳回一 Variant (Integer)，其值從 0 到 59，表示一分鐘之中的某個 [秒]。

語法

Second(time)

必要引數 time 可以是任何 Variant，數值運算式，字串運算式，或其組合，只要可以表示出合理的時刻即可。如果 time 是 Null，則傳回 Null。


Time 函數

��� [image] ���

傳回一 Variant (Date)，內容為系統時間 (電腦所記錄的現在時刻)。

語法

Time

請注意

若要設定系統時間，請使用 Time 陳述式。


Time 陳述式

��� [image] ���

設定系統時間。

語法

Time = time

必要引數 time 可以是任何 數值運算式，字串運算式，或其組合，只要可以表示出合理的時刻即可。

請注意

如果 time 是一字串，Time 會試著依據系統選定的時間表示法將字串解譯成合理時間。如果無法解譯，則會產生程式錯誤。


Timer 函數

��� [image] ���

傳回一 Single，其內容為從前一個午夜算起到現在所經過的秒數。

語法

Timer

請注意

在 Microsoft Windows中， Timer函數傳回一秒的小數部分。


TimeSerial 函數

��� [image] ���

傳回一 Variant (Date)，內容為指定之時、分、秒的日期表示式。

語法

TimeSerial(hour, minute, second)

TimeSerial 函數語法有下列的指名引數：

單元	說明
hour	必要引數；Variant (Integer)。其值從 0 (12:00 A.M.) 到 23 (11:00 P.M.)，或一數值運算式。表示 [時]。
minute	必要引數；Variant (Integer)。任何數值運算式。表示 [分]。
second	必要引數；Variant (Integer)。任何數值運算式。表示 [秒]。
請注意

要表示某個時刻，如 11:59:59，TimeSerial 函數的各個引數值必需各落在其合理的範圍內。也就是， [時] 必需介於 0-23，而 [分] 與 [秒] 則必需介於 0-59。不過，您也可以在傳遞引數時使用數值運算式來得知對應於某基準時刻的相對時間。下列範例便是使用運算式來求得相對時間，而不是直接求得某個時刻的日期表示式。範例中 TimeSerial 函數將傳回正午之前六小時 (12 - 6) 又十五分 (-15) 的時間，即 5:45:00 A.M.

TimeSerial(12 - 6, -15, 0)

當有任何一個引數值超出其合理範圍時，函數會自動將其進位到下一個更大的時間單位中。例如，如果 [分] 的引數值為 75( 75 分鐘) ，函數會將它解譯成一小時又十五分。如果任何一個引數值超出 -32,768 到 32,767 的範圍，會產生程式錯誤。如果計算結果的時間會超出作業系統所接受的時間或日期範圍，亦會產生程式錯誤。


TimeValue 函數

��� [image] ���

傳回一 Variant (Date) 的時間表示式。

語法

TimeValue(time)

必要引數 time 可以是任何 字串運算式，或其它運算式，只要可以表示出合理的時刻 0:00:00 (12:00:00 A.M.) 到 23:59:59 (11:59:59 P.M.) 即可。如果 time 是 Null，則傳回 Null。

請注意

您可以使用 12 小時制或 24 小時制的時間格式。例如，"2:24PM" and "14:24" 均是合理的時間表示式。

如果 time 引數內容包含日期資料，TimeValue 會捨去日期資料。然而，若 time 只有日期資料，則會產生程式錯誤。


Weekday 函數

��� [image] ���

傳回一 Variant (Integer)，其內容為一整數，代表某個日期是星期幾。

語法

Weekday(date,[firstdayofweek])

Weekday 函數語法有下列的指名引數：

單元	說明
date	必要引數。Variant，數值運算式，字串運算式，或其組合，只要可以表式一合理日期即可。如果 date 是Null，則傳回 Null。
Firstdayofweek	選擇性引數。常數，表示一星期的第一天。如果省略此引數，則以 vbSunday(星期日)為預設值。
設定

firstdayofweek 引數有以下的設定值：

常數	值	說明
vbUseSystem	0	使用 NLS API 設定。
VbSunday	1	星期日 (預設值)。
vbMonday	2	星期一。
vbTuesday	3	星期二。
vbWednesday	4	星期三。
vbThursday	5	星期四。
vbFriday	6	星期五。
vbSaturday	7	星期六。
傳回值

Weekday 函數的傳回值如下表所示：

常數	值	說明
vbSunday	1	星期日。
vbMonday	2	星期一。
vbTuesday	3	星期二。
vbWednesday	4	星期三。
vbThursday	5	星期四。
vbFriday	6	星期五。
vbSaturday	7	星期六。
請注意

如果 Calendar 屬性的設定為 Gregorian，則為 date 引數傳回的整數代表 Gregorian 一週中的日期。如果日曆是 Hijri，則為 date 引數傳回的整數代表 Hijri 一週中的日期。對於 Hijri 日期，引數 number 為任意數值運算式，可以代表從 1/1/100 (Gregorian Aug 2, 718) 到 4/3/9666 (Gregorian Dec 31, 9999) 之間的日期和 (或) 時間。


Year 函數

��� [image] ���

傳回 Variant (Integer)，表示某個年份。

語法

Year(date)

必要引數 date 可以是任何 Variant，數值運算式，字串運算式，或其組合，只要能夠表示一個合理的日期即可。如果 date 是 Null，則傳回 Null。

備註   如果 Calendar 屬性的設定為 Gregorian，則為 date 引數傳回的整數代表 Gregorian 年份。如果日曆是 Hijri，則為 date 引數傳回的整數代表 Hijri 年份。對於 Hijri 日期，引數 number 為任意數值運算式，可以代表從 1/1/100 (Gregorian Aug 2, 718) 到 4/3/9666 (Gregorian Dec 31, 9999) 之間的日期和 (或) 時間。


Array 函數

��� [image] ���

傳回內容為陣列的 Variant。

語法

Array(arglist)

arglist 引數是必要的，而且是一串以逗號隔開的值。這些值是 Variant 裏陣列的元素。如果沒有指定引數，則會建立長度為零的陣列。

請注意

當要引用陣列元素時，使用的表示法為變數名字後加上以括號括起來的索引數字。在下列範例中，第一個陳述式建立一個名為 A 的 Variant 變數。第二個陳述式指定一個陣列給變數 A。最後一個陳述式將陣列中第二個元素的值指定給另一個變數。

Dim A As Variant

A = Array(10,20,30)

B = A(2)

使用 Array 函數所建立的陣列，下限是由 Option Base 陳述式所指定的下限決定的，除非 Array 與型態程式庫 (例如 VBA.Array) 名稱相符。如果與型態程式庫相符，Array 不會受 Option Base 的影響。

附註   不是宣告為陣列的 Variant 仍然可以含有陣列資料。Variant 變數可以含有任何型態的陣列，除了固定長度字串和使用者自訂型態以外。在觀念上，含有陣列的 Variant 和含有 Variant 元素的陣列是不同的。但是在陣列元素的運用方法上，並沒有什麼不同。


CallByName 函數

��� [image] ���

執行物件的一個方法，設定或傳回物件的一個屬性。

語法

CallByName(object, procname, calltype,[args()])

CallByName 函數有以下幾個指名的引數：

單元	描述
Object	必須的：Variant (Object)。將被執行的函數上的物件名稱。
Procname	必須的：Variant (String)。字串運算式，包括物件的屬性或方法的名稱。
Calltype	必須的：Constant。一個型態常數 vbCallType，代表被呼叫程序的型態。
Args()	選擇性的：Variant (Array)。
請注意

使用 CallByName 函數得到或設定一個屬性，或在執行階段使用字串名呼叫一個方法。

下面的範例，第一行使用 CallByName 設定文字方塊的 MousePointer 屬性，第二行得到 MousePointer 屬性的值，第三行呼叫 Move 方法來移動文字方塊：

CallByName Text1, "MousePointer", vbLet, vbCrosshair

Result = CallByName (Text1, "MousePointer", vbGet)

CallByName Text1, "Move", vbMethod, 100, 100


Const 陳述式

��� [image] ���

宣告常數，其值如字面所示。

語法

[Public | Private] Const constname [As type] = expression

Const 陳述式的語法具有下列幾項單元：

單元	描述
Public	選擇性引數。模組層次所使用的關鍵字，用來宣告在所有模組裏的所有程序中都可以使用常數。 不可在程序中使用此項宣告。
Private	選擇性引數。模組層次的關鍵字，用來宣告只在已宣告的模組裏才可以使用常數。不可在程序中使用此項宣告。
Constname	必要的引數。常數的名稱，遵循變數命名規格。
Type	選擇性引數。常數的資料型態，可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前未支援）、Date、String，或是 Variant。使用 As type 子句來宣告常數。
Expression	必要的引數。文字、其它常數或任何算術及邏輯運算子的組合，但 Is 則除外。
請注意

常數皆預設為私有的，程序中的常數都是私有的，常數的可見性不可以改變。在一般模組裏，模組層次常數的有效範圍可以用 Public 關鍵字來改變。然而，在物件類別模組裏，常數只能為私有變數，且無法由 Public 關鍵字來改變其可見性。

若要把多個常數宣告式放在一行裏，則用逗號來分隔每個常數指定式。當多個常數宣告放在同一行裏，若使用 Public 或 Private 關鍵字，則適用於全部同一行的常數。

指定給常數的運算式不可以是變數、使用者自訂函數或 Visual Basic 內建的函數 (例如 Chr）。

附註   常數可以使您的程式較容易修改。和變數不一樣的是，在程式執行時，常數可以避免不小心錯誤的修改。

如果沒有明確的使用 As type 來宣告常數的型態，則常數會選用最適合 expression 的型態。

在 Sub、Function 或 Property 程序裏所宣告的常數，只適用在該程序的區域裏。在程序外所宣告的常數，則是在宣告它的模組中所定義的。在任何可以使用運算式的地方，就可以使用常數。


CreateObject 函數

��� [image] ���

建立並傳回對於 ActiveX 物件的引用。

語法

CreateObject(class,[servername])

CreateObject 函數語法具有下列幾個單元：

單元	描述
class	必須的。Variant (String)，將建立的應用程式名稱和物件的物件類別。
servername	選擇性的。Variant (String)，將建立物件的網路伺服器名稱。如果 servername 是一個空字串 ("")，則會使用區域機器。
class 引數使用 appname.objecttype 語法，並且具有下列幾個單元：

單元	描述
appname	必要的引數。Variant (String)，提供該物件之應用程式的名稱。
Objecttype	必要的引數。Variant (String)，所要建立物件的型態或物件類別。
請注意

支援 Automation 的應用程式至少會提供一種型態的物件。舉例來說，文書處理應用程式或許會提供 Application 物件、Document 物件和 Toolbar 物件。

若要建立 ActiveX 物件，請將 CreateObject 所傳回的物件指定給物件變數：

' 宣告物件變更以保留物件

' 引用。Dim as Object 延遲連結。

Dim ExcelSheet As Object

Set ExcelSheet = CreateObject("Excel.Sheet")

以上這個例子，在應用程式一開始就建立 Microsoft Excel 試算表。只要物件被建立了，當您在程式裏要引用物件的時候，就可以使用您自訂的物件變數。在接下來的範例中，使用物件變數來運用新物件的屬性和方法。其中的物件有 ExcelSheet，和其它 Microsoft Excel 物件，包括 Application 物件和 Cells 集合物件。

' 使可以透過 Application 物件來查看 Excel

ExcelSheet.Application.Visible = True

' 將某些文字放在工作表的第一個儲存格中

ExcelSheet.Application.Cells(1, 1).Value = "This is column A, row 1"

' 將工作表儲存至 C:\test.xls目錄中

ExcelSheet.SaveAs "C:\TEST.XLS"

' 以 Application 物件上的 Quit 方法來關閉 Excel。

ExcelSheet.Application.Quit

' 釋出物件變數

Set ExcelSheet = Nothing

使用 As Object 子句來宣告的物件變數，可引用任何型態之物件。然而，經由變數來運用物件，須到程式開始執行時才會進行連結。.若要當程式在編譯時就進行連結，請用特定的物件類別 ID 來宣告變數。舉例來說，您可宣告並建立下列 Microsoft 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)

引用由編繹時就連結的變數，可以產生較好的效能；但是只能引用宣告中所指定之物件類別。

您可將 CreateObject 函數所傳回的物件，當成引數傳送到另一個函數。舉例來說，下列的程式碼為建立且傳送對 Excel.Application 物件的引用：

Call MySub (CreateObject("Excel.Application"))

您可以在一個遠端網路的電腦上，透過將電腦名傳遞給 CreateObject 的 servername 引數建立一個物件。此名與共用名的「電腦名稱」部分相同：對於一個指名為「\\MyServer\Public」的共用名稱，servername 引數是「MyServer」。

備註   如需有關使應用程式在遠端網路電腦上可以看見的其它資訊，請參考 COM 文件 (請參閱 Microsoft Developer Network)。您必須為應用程式加上註冊鍵。

下面的程式碼，傳回在指名為 MyServer 的遠端電腦上執行的 Excel 的一個執行個體的版本編號：

Dim xlApp As Object

Set xlApp = CreateObject("Excel.Application", "MyServer")

Debug.Print xlApp.Version

如果遠端伺服器不存在或無法使用，則產生一個執行階段錯誤。

附註   當物件目前沒有執行個體時，才使用 CreateObject。若執行個體已在執行中，而又啟動另一個執行個體，則會另外建立一個該型態的物件。如要使用目前的執行個體，或要開始應用程式及讀取檔案，則使用GetObject 函數。

若物件已將自已登錄為單一執行個體物件時，則無論執行 CreateObject 多少次，該物件只能建立一個執行個體。


Declare 陳述式

��� [image] ���

在模組層次中用來宣告引用動態連結程式庫(DLL) 內的外部程序。

語法 1

[Public | Private] Declare Sub name Lib "libname" [Alias "aliasname"] [([arglist])]

語法 2

[Public | Private] Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]

Declare 陳述式的語法具有下列幾個單元：

單元	描述
Public	選擇性引數。用來宣告程序，此程序可在所有模組的其它程序中使用。
Private	選擇性引數。用來宣告程序，此程序只可宣告它的模組中使用。
Sub	選擇性引數 (須出現Sub 或 Function 其中一個)。表示此程序不傳回任何值。
Function	選擇性引數 (須出現Sub 或 Function 其中之一)。表示此程序可傳回運算式中所使用的值。
name	必要的引數。 任何正確的程序名稱。請注意 DLL 之進入點的大小寫是有差別的。
Lib	必要的引數。表示含有宣告程序的 DLL 或程式碼來源。Lib 子句在所有的宣告裏皆為必要的引數。
libname	必要的引數。指含有宣告程序的 DLL 或程式碼來源的名稱。
Alias	選擇性引數。表示被呼叫的程序在 DLL.中有另外的名稱。用在外部程序的名稱和關鍵字相同時；當 DLL 程序和公用變數、常數、或任何其它同一有效範圍的程序名稱相同時；或者，在 DLL 程序名稱裏有字元是不被 DLL 命名規格所准許的，皆可使用 Alias。
aliasname	選擇性引數。在 DLL 或程式碼來源中程序的名稱。若第一個字元並非為 (#)，則 aliasname 為程序在 DLL 中的進入點。如果 (#) 為第一個字元，則所有跟隨的字元必須指出程序的進入點序數號碼。
arglist	選擇性引數。 當程序被呼叫時，所傳來當作引數的變數陣列。
type	選擇性引數。 Function 程序所傳回的資料型態，可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String (只限可變長度) 或 Variant、使用者自訂型態或物件型態。
arglist 引數具有下列語法及單元：

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type]

單元	描述
Optional	選擇性引數。表示此引數並非是必要的。但若使用此引數，則 arglist 中所有引數皆為選擇性的，而且須以 Optional 關鍵字來宣告。若以 ParamArray 來宣告，則任何引數皆不可使用 Optional。
ByVal	選擇性引數。表示以傳值的方式來傳送引數。
ByRef	選擇性引數。表示以引用的方式來傳送引數。Visual Basic 中預設值為 ByRef。
ParamArray	選擇性引數。只使用在 arglist 的最後一個引數上，表示最後一個引數是 Optional 陣列而且是 Variant 元素。ParamArray 關鍵字允許可使用數目未定的引數。ParamArray 關鍵字不可和 ByVal、ByRef 或 Optional 同時使用。
varname	必要的引數。 傳給程序之引數的變數名稱，遵循標準變數命名規格。
( )	對陣列變數是必要的，代表 varname 是一個陣列。
type	選擇性引數。傳給程序之引數的資料型態，可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String (只限可變長度)、Object、 Variant、 使用者自訂型態或物件型態。
請注意

對 Function 程序而言，程序的資料型態可決定所傳回值的資料型態。可在 arglist 之後使用 As 子句，來指定函數傳回值的型態。arglist 中可使用 As 子句來指定任何傳給程序之引數的資料型態。除了可指定任何標準的資料型態之外，也可在 arglist 中指定 As Any 以避免資料型態的檢查，以便於傳送任何資料型態給程序。

空白的括號表示 Sub 或 Function 程序沒有可傳送的引數，而且 Visual Basic 保證沒有任何引數會傳送過去。在下列範例中，First 沒有使用引數。如果呼叫 First 時使用引數，會發生錯誤：

Declare Sub First Lib "MyLib" ()

若使用引數清單在每次呼叫程序時，皆會檢查引數的數目和型態。 在下列範例中，First 使用 Long 引數：

Declare Sub First Lib "MyLib" (X As Long)

附註   在 Declare 陳述式的引數清單中，不可使用固定長度的字串。只有可變長度字串才可傳送給程序。程序的引數裏可以使用固定長度字串，但是在傳送之前會先被轉換成可變長度字串。

附註   當呼叫外部程序時，若需要字串的值為零當引數，請使用 vbNullString 常數。此與零長度字串 ("") 是不一樣的。


Deftype 陳述式

��� [image] ���

在模組層次用來設定以下各項目的預設資料型態：變數、傳送給程序的引數，以及 Function 和 Property Get 程序中名稱以指定字元開始的傳回值型態。

語法

DefBool letterrange[, letterrange] . . .

DefByte letterrange[, letterrange] . . .

DefInt letterrange[, letterrange] . . .

DefLng letterrange[, letterrange] . . .

DefCur letterrange[, letterrange] . . .

DefSng letterrange[, letterrange] . . .

DefDbl letterrange[, letterrange] . . .

DefDec letterrange[, letterrange] . . .

DefDate letterrange[, letterrange] . . .

DefStr letterrange[, letterrange] . . .

DefObj letterrange[, letterrange] . . .

DefVar letterrange[, letterrange] . . .

letterrange 是必要的引數，且有下列語法：

letter1[-letter2]

letter1 和 letter2 引數指定要預設資料型態的名稱範圍。每個引數表示變數、引數、Function 程序或 Property Get 程序名稱的第一個字母，可為字母表上的任何字母。letterrange 裏字母的大小寫是沒有差別。

請注意

陳述式的名稱決定資料型態：

陳述式	資料型態
DefBool	Boolean
DefByte	Byte
DefInt	Integer
DefLng	Long
DefCur	Currency
DefSng	Single
DefDbl	Double
DefDec	Decimal (目前尚未支援)
DefDate	Date
DefStr	String
DefObj	Object
DefVar	Variant
舉例來說，在下列程式片段，Message 是字串變數：

DefStr A-Q

. . .

Message = "Out of stack space."

Deftype 陳述式僅只影響使用它的模組。舉例來說，在某個模組裏的 DefInt 陳述式只影響在該模組裏宣告之變數、傳給程序之引數、Function 和 Property Get 程序之傳回值的預設資料型態。其它模組中變數、引數和傳回值的預設資料型態則不受影響。 如果不明確地以 Deftype 陳述式來作宣告，則所有 變數、引數、 Function 程序和 Property Get 程序的預設資料型態是 Variant。

當您指定字母範圍，通常是用來定義以前128 字元之一為開頭字元的變數之資料型態。 然而，如果以 A�}Z 來指定字母範圍，則指定所有變數的資料型態，包括從字元設定的擴充部份 (128�}255) 中的國際字元為開頭。

只要指定了 A�}Z 的範圍，則不可再定義任何已用 Deftype 陳述式的變數的子範圍。當範圍被指定後，就不可在 Deftype 陳述式使用先前被另一個 Deftype 陳述式所定義的字母，否則會發生錯誤。然而，卻可以使用 Dim 陳述式加上 As type 子句，來指定一個無論是否定義過變數之資料型態。舉例來說，可在模組層次中以下列的程式碼來定義變數為 Double，即使是它的預設資料型態為 Integer：

DefInt A-Z

Dim TaxRate As Double

Deftype 陳述式不影響使用者自訂型態的元素，因為此類元素必已明確地宣告過。


Dim 陳述式

��� [image] ���

宣告變數，並配置儲存空間。

語法

Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]] . . .

Dim 陳述式的語法具有下列幾個單元：

單元	描述
WithEvents	選擇性引數。表示 varname 是物件變數的關鍵字，且用來對應 ActiveX 物件所引發的事件。僅適用於物件類別模組中。您可以用 WithEvents 來個別宣告變數，但不可用來建立陣列，也不可與 New 同時使用。
varname	必要的引數。變數的名稱，遵循標準變數命名規格。
subscripts	選擇性引數。陣列 變數的維數，最多可宣告到 60 維。 subscripts 引數使用下列語法：
	[lower To] upper [, [lower To] upper] . . .
	如果 沒有明確地指示 lower ，下限是由 Option Base 陳述式所決定。若沒有 Option Base 陳述式以表示，則下限為零。
New	選擇性引數。指能使物件隱含宣告的關鍵字。若在宣告物件變數時使用 New，則在首次引用該物件時就會建立該物件的新執行個體，所以就不必使用 Set 陳述式來指定物件的引用。New 關鍵字不可以用來宣告內建資料型態的變數，也不可用來宣告依存物件的執行個體，或和 WithEvents 同時使用。
type	選擇性引數。 變數的資料型態，可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String (只限可變長度字串)、String * length (固定長度字串)、Object、Variant、使用者自訂型態或物件型態。使用 As type 子句來分隔每個變數的宣告。
請注意

在模組層次裏以 Dim 所宣告的變數，該模組所有的程序皆可使用。在程序層次宣告的變數，則只可在該程序中使用。

在模組或程序層次以 Dim 陳述式來宣告變數的資料型態。舉例來說，下列陳述式宣告一個變數為 Integer。

Dim NumberOfEmployees As Integer

Dim 陳述式也用來宣告變數的物件型態。下列宣告一變數為工作表的新執行個體。

Dim X As New Worksheet

如果在宣告物件變數時不使用 New 關鍵字，需引用物件的變數前必先以 Set 陳述式來指定一個已存在的物件。在物件變數尚未指定物件之前，其值為 Nothing，表示它尚未引用任何物件的執行個體。

可使用 Dim 陳述式加上空白的括號來宣告動態陣列。宣告動態陣列之後，在程序中使用 ReDim 陳述式來定義陣列的維數和元素數目。若重新宣告一個已使用 Private、Public或 Dim 等陳述式所明確定義大小的陣列變數，則會發生錯誤。

如果不指定資料型態或物件型態，且模組中沒有 Deftype 陳述式，變數的預設型態為 Variant。

當變數在初始化時，數值變數的初始值為 0，可變字串初始值為零長度字串 ("")，固定長度字串則都填上零。Variant 變數初始值為 Empty。每個使用者自訂型態變數的元素當作分開的變數來初始化。

附註   在程序中使用 Dim 陳述式時，通常是將 Dim 陳述式放在程序最開始的地方。


Enum 陳述式

��� [image] ���

宣告一個列舉型態。

語法

[Public | Private] Enum name

membername [= constantexpression]

membername [= constantexpression]

. . .

End Enum

Enum 陳述式有如下單元：

單元	描述
Public	選擇性的。指出 Enum 型態在整個專案中是可見的。預設時Enum 型態為 Public。.
Private	選擇性的。指出 Enum 型態只在它出現的模組中是可見的。
name	必須的。Enum 型態的名稱。name 必須是一個有效的 Visual Basic 識別項並且當宣告該 Enum 型態的變數或者參數時被指定作為型態。
membername	必須的。一個有效的 Visual Basic 識別項，它可以指定一個名稱，透過這個名稱，一個 Enum 型態的組成組成項目就可以被得知。
constantexpression	選擇性的。組成項目的值 (為 Long 型)。如果沒有指定 constantexpression，則指派給它的值或者是零 (若是第一個 membername)，或者是比它前一個 membername 值多 1。
請注意

列舉變數是用 Enum 型態宣告的變數。變數和參數都可以使用 Enum 型態來宣告。Enum 型態的元素在 Enum 陳述式內被起始化為常數值。所賦的值無法在執行階段被修改，並且可以包括正的和負的數值。例如：

Enum SecurityLevel

IllegalEntry = -1

SecurityLevel1 = 0

SecurityLevel2 = 1

End Enum

Enum 陳述式只有在模組級別中才能出現。一旦 Enum 型態被定義，它就可以用來宣告變數、參數、或者傳回其型態的程序。無法用一個模組名稱來限制一個 Enum 型態的名稱。在一個物件類別模組中的 Public Enum 型態不是該物件類別的成員；然而，他們被寫入到型態程式庫中。在一般模組中定義的 Enum 型態不會寫入到型態程式庫中。具有同樣名稱的 Public Enum 型態無法在一般模組和類別模組中都定義，因為它們共用相同的名稱空間。當不同形態程式庫中的兩個 Enum 型態具有相同的名稱，但卻是不同的組成項目時，對於該型態變數的引用，就取決於哪一個形態程式庫在「設定引用項目」中具有更高的優先權。

您不能使用 Enum 型態作為 With 區塊中的目標。


Erase 陳述式

��� [image] ���

重新初始化固定大小陣列的元素，並釋放動態陣列的儲存空間。

語法

Erase arraylist

arraylist 為必要的引數，意指要刪除以逗號作分隔的陣列變數。

請注意

無論是固定大小的陣列 (普通的) 或動態的陣列，Erase 會根據陣列型態而有不同的動作。若是固定大小的陣列， Erase 不會釋出其記憶體空間。Erase 以下列方式來設定固定陣列的元素：

陣列型態	Erase 對固定陣列元素的的作用
固定數值陣列	將每個元素都設為零。
固定字串陣列 (可變長度)	將每個元素都設為零長度字串 ("")。
固定字串陣列 (固定長度)	將每個元素都設為零。
固定 Variant 陣列	將每個元素都設為 Empty。
使用者自訂型態的陣列。	將每個元素當成分開的變數來設定。
物件陣列	將每個元素都設為 Nothing。
Erase 會將動態陣列所使用的記憶體釋放，在程式要重新引用動態陣列之前，必須使用 ReDim 陳述式重新宣告陣列變數的維數。


Event 陳述式

��� [image] ���

宣告一個使用者定義的事件。

語法

[Public] Event procedurename [(arglist)]

Event 陳述式有如下單元：

單元	描述
Public	選擇性的。指定 Event 在整個專案中是可見的。Events 型態預設時是 Public。注意事件只有在宣告它們的模組中才可以被引發。.
Procedurename	必須的。事件的名稱，遵循一般的變數指名約定。
arglist 引數的語法及語法的各個單元如下：

[ByVal | ByRef] varname[( )] [As type]

單元	描述
ByVal	選擇性的。表示該引數是按值傳遞的。
ByRef	選擇性的。表示該引數是按引用傳遞的。ByRef 是 Visual Basic 的預設設定。
varname	必須的。代表要傳遞給程序的引數變數名稱。遵循一般的變數指名約定。
type	選擇性的。傳遞給程序的引數的資料型態；可以是 Byte，布林， Integer， Long，Currency，Single，Double，Decimal (目前還不支援)，Date，String (只有可變長度的)，Object, Variant，使用者定義型態，或者是一個物件類型。
請注意

一旦事件已經被宣告，則可以使用 RaiseEvent 陳述式來引發該事件。如果一個 Event 宣告出現在一般模組中，將會發生一個語法錯誤。事件無法宣告為傳回一個值。一個典型的事件的宣告和引發，可依下面程式片段進行：

' 在物件類別模組的模組級宣告一個事件

Event LogonCompleted (UserName as String)

Sub

RaiseEvent LogonCompleted("AntoineJan")

End Sub

附註   可以像宣告程序的引數一樣來宣告事件的引數，不同之處如下：事件無法含有指名引數、Optional 引數、或 ParamArray 引數。事件沒有傳回值。


Function 陳述式

��� [image] ���

宣告 Function 程序的名稱、引數及程式碼。

語法

[Public | Private | Friend] [Static] Function name [(arglist)] [As type]
[statements]
[name = expression]
[Exit Function]
[statements]
[name = expression]

End Function

Function 陳述式的語法具有下列幾個單元：

單元	描述
Public	選擇性的。表示任何模組中的所有其它程序都可呼叫 Function 程序。如果模組裏有 Option Private，那麼此程序就不能在專案之外使用。
Private	選擇性的。表示 Function 程序只能在宣告它之模組裏的程序所使用。
Friend	選擇性的。只用於物件類別模組中。指出 Function 程序在整個專案中都可見，但是對於該物件的一個執行個體的控制器則不會顯示。
Static	選擇性引數。表示 Function 程序的區域變數在呼叫之間會將值保留下來。Static 不會影響在 Function 之外所宣告的變數，即使它們在程序中使用到。
name	必要的引數。Function 的名稱，遵循標準變數命名規格。
arglist	選擇性引數。變數清單，表示呼叫 Function 程序時所傳送的引數。變數以逗號隔開。
type	選擇性引數。 Function 程序傳回值的資料型態，可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String (除了固定長度)、或 Object、Variant 或任何使用者自訂型態。任何型態的陣列都無法被傳回，但含有陣列的 Variant 可以被傳回。
statements	選擇性引數。任何 Function 程序所執行一群的陳述式。
expression	選擇性引數。Function 的傳回值。
arglist 引數有下列語法和單元：

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

單元	描述
Optional	選擇性引數。表示引數不是必要的。如果使用，在 arglist 所有後來的引數也都為可選擇性的，且須以 Optional 關鍵字來宣告。若已使用 ParamArray 關鍵字來宣告，則引數不可再使用 Optional。
ByVal	選擇性引數。表示以傳值的方式傳遞引數。
ByRef	選擇性引數。表示以傳址的方式傳遞引數，Visual Basic 預設為 ByRef。
ParamArray	選擇性引數。在 arglist 的最後一個引數上使用，表示此引數是一個 Variant 元素的 Optional 陣列。ParamArray 關鍵字允許您可使用任意個數的引數，但不可與 ByVal、ByRef或 Optional 共用。
varname	必要的引數。代表引數的變數名稱，遵循標準變數命名規格。
type	選擇性引數。傳給程序引數的資料型態，可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、 Decimal (目前尚未支援)、Date、String (只限可變長度)、 Object 或 Variant。如果此參數不是 Optional，則可使用指定的物件型態或使用者自訂型態。
defaultvalue	選擇性引數。任何常數或常數運算式，只適用在 Optional 的參數。如果型態為 Object，其預設值為 Nothing。
請注意

若無明確地指定 Public、Private或 Function 程序，則預設為公用的。如果沒有使用 Static，區域變數的值在每次呼叫之間不會保留下來。

注意   Function 程序可遞迴，也就是它們可以呼叫自己。然而，遞迴可能會造成堆疊溢位。Static 關鍵字也通常不使用在遞迴的 Function 程序上。

所有的可執行程式碼都必須在程序中。不可以在 Function、Sub 或 Property 程序裏定義其它的 Function 程序。

Exit Function 陳述式會使 Function 程序立即停止。程式會從呼叫該 Function 程序的下一行陳述式繼續執行。Exit Function 陳述式可在 Function 程序任何位置出現，且不限次數。

如同 Sub 程序，Function 程序是可接受引數、執行一串陳述式並且改變其引數值的獨立程序。然而，與 Sub 程序不同的是，當您想運用函數的傳回值時，Function 程序可以放在運算式的右方，就如同使用內建函數一樣，例如 Sqr、 Cos 或 Chr。

運算式中只要使用函數名稱接著以括號括起來的引數列，就可以呼叫 Function 程序。請參考 Call 陳述式以得知關於如何呼叫 Function 程序的特定資訊。

若要從函數中傳回值，須指定該值給函數名稱。這種指定式可出現於程序中的任何位置，且不限次數。如果沒有指定值給 name，則程序會傳回預設值：數值函數傳回 0，字串函數傳回零長度字串 ("")，Variant 函數傳回 Empty。若傳回型態為物件所引用，且 Function 裏沒有指定物件引用給 name (使用 Set)，則函數會傳回 Nothing。

下列範例表示如何指定傳回值給一個名稱叫作 BinarySearch 的函數。在此範例中，指定 False 給名稱以表示有些值找不到。

Function BinarySearch(. . .) As Boolean

. . .

' 找不到值。將 False 的值傳回。

If lower > upper Then

BinarySearch = False

Exit Function

End If

. . .

End Function

在 Function 程序中使用的變數有兩類：那些在程序中明確宣告的，以及不是此類的。在程序中明確地宣告的變數 (使用 Dim 或同類字)，必為區域變數。程序中有使用到，但未在程序中宣告的變數也是區域的，除非此變數已在程序外更高層次中被宣告。

注意   程序可使用不是在該程序中宣告過的變數，但是若在模組層次定義相同的名稱，就會發生名稱上的衝突。如果程序裏引用了未宣告的變數，而此變數的名稱和其它程序、常數或變數的名稱相同，則會認定程序是引用模組層次的名稱。所以，請明確地宣告變數以避免此種衝突。可使用 Option Explicit 陳述式來強迫變數的宣告。

注意   Visual Basic 可能為了內部的效率而重新排列算術運算式。若 Function 程序會改變同一運算式中的變數值，請避免在此狀況下使用。


GetObject 函數

��� [image] ���

從檔案中傳回對 ActiveX 物件的引用。

語法

GetObject([pathname] [, class])

GetObject 函數語法有下列指名引數：

單元	描述
pathname	選擇性引數。ariant (String)，含有所要擷取的物件之檔案完整路徑和名稱。如果省略了 pathname，class 就是必要的。
Class	選擇性引數。Variant (String)，表示物件之物件類別的字串。
class 引數使用 appname.objecttype 語法及具有下列幾個單元：

單元	描述
appname	必要的引數。Variant (String)，提供此物件的應用程式名稱。
Objecttype	必要的引數。Variant (String)，要建立的物件之型態或物件類別。
請注意

使用 GetObject 函數來運用檔案的 ActiveX 物件，並指定此物件給物件變數。使用 Set 陳述式來指定 GetObject 傳回的物件給物件變數。舉例來說：

Dim CADObject As Object

Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")

當此段程式碼執行時，pathname 所指定的應用程式就開始，且在指定檔案中的物件也會被啟動。

如果 pathname 是零長度字串 ("")，GetObject 傳回指定型態的新物件執行個體 。如果省略 pathname 引數，GetObject 傳回指定型態的目前使用中物件。如果指定型態的物件不存在，會發生錯誤。

有些應用程式允許只啟動檔案的部份。請在此檔案名稱後面加上驚嘆號 (!)，且其後為定義要啟動檔案部份的字串。若想知道關於建立此類字串的資料，請參閱建立此物件的應用程式之說明文件。

舉例來說，在繪圖應用程式裏，繪圖檔案可能儲存多層次功能介面。您可以使用下列程式碼來啟動功能介面，繪圖檔案的名稱則是 SCHEMA.CAD：

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

如果不指定物件的 class，自動伺服功能會根據您所提供的檔案名稱來決定要開始的應用程式，以及啟動的物件。然而，有些檔案支援一項以上的物件類別。 舉例來說，在繪圖時要支援三種物件型態： Application 物件、Drawing 物件，以及 Toolbar 物件，這些都是同一個檔案的部份。若想指定您要啟動檔案中的那個物件，請使用選擇性的 class 引數。 舉例來說：

Dim MyObject As Object

Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

在上面的例子裏，FIGMENT 是此繪圖應用程式的名稱，且 DRAWING 是它所支援之物件型態裏的其中一項。

只要物件已經被啟動，就必須引用程式碼中已定義的物件變數。在先前的例子裏，使用物件變數 MyObject 來運用新物件的屬性和方法，舉例來說：

MyObject.Line 9, 90

MyObject.InsertText 9, 100, "Hello, world."

MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"

附註   使用 GetObject 函數的時機是：當物件已經有了一個目前執行個體，或是想用已經載入的檔案來建立物件。如果目前沒有執行個體，而且您不希望物件由一個已載入的檔案開始，請使用 CreateObject 函數。

如果一個物件已登錄為單一執行個體物件，無論 CreateObject 執行幾次，該物件也只能建立一個執行個體。使用單一執行個體物件時，若以零長度字串 ("")語法來呼叫，則 GetObject 只能傳回相同的執行個體，而且若省略 pathname 引數，將會造成錯誤。無法使用 GetObject 來獲得對 Visual Basic 建立之物件類別的參考。


Implements 陳述式

��� [image] ���

指定要包含該陳述式的物件類別模組中實現的介面或物件類別。

語法

Implements [InterfaceName | Class]

所須的 InterfaceName 或 Class 是型態程式庫中的介面或物件類別的名稱，該型態程式庫中的方法將用與 Visual Basic 物件類別中相一致的方法來實現。

請參閱

所謂介面就是代表介面封裝的成員 (方法以及屬性) 的原型集合物件，也就是說，它只包含成員程序的宣告部分。一個物件類別提供一個或多個介面的所有方法以及屬性的一種執行方案。物件類別的控制者每次呼叫函數時，該函數所執行的程式碼由物件類別提供。每個物件類別至少應執行一個預設介面。在 Visual Basic 中，一個已執行的介面中任何沒有顯式宣告的成員，都是預設成員的隱式成員。

當 Visual Basic 物件類別執行介面時，都會提供該介面的型態程式庫中說明的所有 Public 程序的版本。除了提供介面原型與自編程序之間的對應關係之外，Implements 陳述式還使這個物件類別接受對指定介面 ID 的 COM QueryInterface 呼叫。

當執行一個物件類別或介面時，必須包括所用到的 Public 程序。如果執行介面或物件類別時遺漏了成員，就會產生錯誤。如果正在執行的物件類別中某個程序還沒有程式碼，則可以產生一個適當的錯誤資訊 (Const E_NOTIMPL = &H80004001)，以便使用者意識到該成員還沒有執行。

Implements 陳述式不可能在一般模組中使用。


LBound 函數

��� [image] ���

傳回 Long值，表示指定陣列某維最小可使用的陣列索引。

語法

LBound(arrayname[, dimension])

LBound 函數的語法具有下列幾項單元：

單元	描述
arrayname	必要的引數。陣列變數的名稱，遵循標準變數命名規格。
Dimension	選擇性引數。Variant (Long)。表示傳回的是那一維的下限。1 表示第一維，2 表示第二維，依此類推。如果省略 dimension，其預設值為 1。
請注意

同時使用 LBound 函數和 UBound 函數來決定陣列的大小。使用 UBound 函數來找出陣列每一維的上限。

若陣列的維數如下所示，LBound 傳回如下表的值：

Dim A(1 To 100, 0 To 3, -3 To 4)

陳述式	傳回值
LBound(A, 1)	1
LBound(A, 2)	0
LBound(A, 3)	-3
任何維數的下限不是 0 就是 1，由 Option Base 陳述式來設定。若陣列是由 Array 函數所建立，則下限必為零，不受 Option Base 所影響。

陣列的維數若由 Dim、Private、Public、ReDim或 Static 陳述式裏的 To 子句所設定，則可以使用任何整數值作為下限。


Let 陳述式

��� [image] ���

將運算式的值指定給變數或屬性。

語法

[Let] varname = expression

Let 陳述式的語法有下列單元：

單元	描述
Let	選擇性引數。明確的使用Let 關鍵字只是一種寫作程式上的風格，但通常都會省略。
varname	必要的引數。 變數或屬性的名稱，遵循標準變數命名規格。
expression	必要的引數。指定給變數或屬性的值。
請注意

指定給變數或屬性的運算式值必須與變數的資料型態相符。不可以指定字串運算式到數值變數，也不可以指定數值運算式到字串變數。如果真如此做，則會在編譯階段發生錯誤。

Variant變數可被指定字串或數值運算式；反之，則不一定可以。除了 Null 之外，任何 Variant 可指定給字串變數，但只在當 Variant 的值可以轉換成數字時，才可以指定給數值變數。使用 IsNumeric 函數來決定是否 Variant 可轉換成數字。

注意   若將一種數值型態的運算式指定給另一種數值型態的變數，會強迫運算式之值來適應變數的數值型態。

Let 陳述式可指定資料錄的變數，但變數必須有相同的使用者自訂型態。使用 LSet 陳述式可指定有不同使用者自訂型態的資料錄變數。使用 Set 陳述式來指定物件引用到變數。


Option Base 陳述式

��� [image] ���

在模組層次中用來宣告陣列索引的預設下限。

語法

Option Base {0 | 1}

請注意

若預設的下限值為 0，則 Option Base 陳述式是不需要的。若需要使用時，此陳述式必須出現在模組中，並且在任何程序之前。Option Base 僅能在模組裏出現一次，而且必須在含有維數的陣列宣告之前。

附註   在 Dim、Private、Public、ReDim 和 Static 陳述式中，To 子句提供較具彈性的方法，來控制陣列索引的範圍。然而，如果不使用 To 子句來明確的設定下限，則可用 Option Base 來改變預設值的下限為 1。Array 函數所建立的陣列預設下限必為零，不受 Option Base 所影響。

Option Base 陳述式只影響它所在的模組裏之陣列的下限。


Option Compare 陳述式

��� [image] ���

在模組層次中用來宣告當比較字串資料時，所預設使用的比較方法。

語法

Option Compare {Binary | Text | Database}

請注意

Option Compare 陳述式必須出現在模組裏，且必須在任何程序之前。

Option Compare 陳述式指定模組裏字串比較的方法 (Binary、Text 或 Database)。如果模組中不使用 Option Compare 陳述式，預設的比較方法是 Binary。

Option Compare Binary 是以字元內二進位表示法的排序原則來作字串比較。在 Microsoft Windows 排列順序是由位元碼對應頁來決定。以下這個範例是典型的二進位排列順序：

A < B < E < Z < a < b < e < z < _ < _ < _ < _ < _ < �

Option Compare Text 是以您系統所在地區的文字排列順序，並且大小寫有別來作字串比較。當相同的字元都是用 Option Compare Text 來排序時，會產生如下的文字排列順序：

(A=a) < ( _=_) < (B=b) < (E=e) < (_=_) < (Z=z) < (_=_)

Option Compare Database 只能在 Microsoft Access 中使用。這表示當要作字串比較時，是以資料庫的地區 ID 來決定排列順序。


Option Explicit 陳述式

��� [image] ���

在模組層次中強迫每個在模組裏的變數都必須明確的宣告。

語法

Option Explicit

請注意

Option Explicit 陳述式必出現在模組裏，且在任何程序之前。

當 Option Explicit 在模組中使用時，必須以 Dim， Private、Public、ReDim 或 Static 陳述式來明確宣告所有的變數。如果使用未宣告的變數名稱，則在編譯階段時，會發生錯誤。

如果未使用 Option Explicit 陳述式，則所有未宣告的變數都是 Variant 型態，除非預設的型態另以 Deftype 陳述式所指定過。

附註   Option Explicit 可避免打錯變數名稱或在有效範圍內相同的變數名稱。


Option Private 陳述式

��� [image] ���

當主應用程式允許可引用跨越多個專案時，Option Private Module 可以避免模組被外部專案所引用。但若主應用程式不允許跨專案引用時，則 Option Private 沒有作用。

語法

Option Private Module

請注意

Option Private 陳述式必須出現在模組層次，且在任何程序之前。

如果模組中有 Option Private Module，例如：在模組層次裏宣告的變數、物件和使用者自訂型態，仍可被含有此模組的專案所使用，但其它專案裏的應用程式則否。

附註   Option Private 只使用在主應用程式上，以支援數個專案同時載入和允許專案間交互引用。舉例來說，Microsoft Excel 允許同時載入數個專案，並且可用 Option Private Module 限制跨專案間的可見性。雖然 Visual Basic 允許同時載入數個專案，但跨專案間的引用是 Visual Basic 從不允許的。


Private 陳述式

��� [image] ���

在模組層次中用來宣告私有變數，並配置儲存空間。

語法

Private [WithEvents] varname[([subscripts])] [As [New] type] [,[WithEvents] varname[([subscripts])] [As [New] type]] . . .

Private 陳述式的語法具有下列幾個單元：

單元	描述
WithEvents	選擇性引數。表示 varname 是一個物件變數的關鍵字，且用來反應 ActiveX 物件所引發的物件。只適用在物件模組中。您可以使用 WithEvents 來個別宣告變數，但不可用來建立陣列，也不可和 New 同時使用。
varname	必要的引數。變數名稱，遵循標準變數命名規格。
Subscripts	選擇性引數。陣列 變數的維數，最高可宣告到 60 維。subscripts 引數使用下列語法：
	[lower To] upper [,[lower To] upper] . . .
	如果沒有明確的指定 lower，陣列的下限是由 Option Base 陳述式所決定。如果 Option Base 陳述式不存在，則下限為零。
New	選擇性引數。指能使物件隱含宣告的關鍵字。如果在宣告物件變數時使用 New，則在首次引用該物件時新執行個體就會建立起來。不必再以 Set 陳述式來指定物件引用。New 關鍵字 不可用來宣告內建資料型態的變數及依存物件的執行個體，也不可以和 WithEvents 同時使用。
type	選擇性引數。 變數的資料型態，可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前未支援)、Date，String (只限可變長度字串)、String * length (只限固定長度字串)、Object、Variant、使用者自訂型態或物件型態。每個變數皆用 As type 子句來定義。
請注意

Private 變數只適用於宣告它們的模組中。

Private 陳述式是用來宣告變數的資料型態。舉例來說，下列的陳述式宣告變數為 Integer：

Private NumberOfEmployees As Integer

Private 陳述式也可用來宣告變數的物件型態。下列的陳述式宣告變數為工作表的新執行個體。

Private X As New Worksheet

如果宣告物件變數不使用 New 關鍵字 ，則使用該物件變數之前，必須以 Set 陳述式來指定一個已存在的物件。除非已指定物件，否則已宣告的物件變數值為 Nothing，表示尚未引用任何特定物件的執行個體。

如果不指定資料型態或物件型態，而且也沒有 Deftype 陳述式在模組裏，變數型態預設為 Variant。

您也可使用 Private 陳述式加上空白括號來宣告動態陣列。宣告之後，在程序裏使用 ReDim 陳述式來定義陣列的維數和元素。變數的大小已由 Private、Public或 Dim 陳述式所明確指定，若重新宣告陣列變數的維數，則會發生錯誤。

初始化變數時，數值變數初始為 0，可變長度字串初始為零長度字串 ("")，且固定長度字串都填上零，Variant 變數初始為 Empty。每個使用者自訂型態變數的元素都當成個別的變數來初始化。

附註   當在程序裏使用 Private 陳述式，通常會將 Private 陳述式放在程序的開頭。


Property Get 陳述式

��� [image] ���

宣告 Property 程序裏的名稱、引數、和程式碼，並取得屬性值。

語法

[Public | Private] [Static] Property Get name [(arglist)] [As type]
[statements]
[name = expression]
[Exit Property]
[statements]
[name = expression]

End Property

Property Get 陳述式的語法具有下列幾個單元：

單元	描述
Public	選擇性引數。表示 Property Get 程序可被所有模組裏的程序所運用。如果在含有 Option Private 陳述式的模組裏使用，則此程序將不可以在專案之外使用。
Private	選擇性引數。表示 Property Get 程序只能在宣告它之模組裏的其它程序裏使用。
Static	選擇性引數。表示 Property Get 程序裏的區域變數在呼叫之間會將值保留起來。Static 屬性不會影響在 Property Get 程序之外宣告的變數，即使是在程序裏使用也一樣。
name	必要的引數。Property Get 程序的名稱，遵循標準變數命名規格，但是該名稱可以和同模組裏的 Property Let 或 Property Set 程序相同。
arglist	選擇性引數。變數清單，表示呼叫 Property Get 程序時所傳過去的引數。數個引數以逗號隔開。在 Property Get 程序中每個引數的名稱和資料型態必須與 Property Let 程序 (如果有) 裏相對應的引數相同。
type	選擇性引數。Property Get 程序傳回值的資料型態，可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String (除了固定長度外)、Object、Variant、使用者自訂型態 和陣列。 Property Get 程序的傳回 type 必須和 Property Let 程序 (如果有) 裏相對應的最後一個 (有時是唯一的) 引數資料型態相同。而 Property Let 程序是定義在運算式右邊，用來指定給屬性的值。
statements	選擇性引數。任何在 Property Get 程序裏執行的陳述式群組。
expression	選擇性引數。程序所傳回的屬性值，由 Property Get 陳述式所定義。
arglist 引數有下列語法和單元：

[Optional] [ByVal | ByRef] varname[( )] [As type] [= defaultvalue]

單元	描述
Optional	選擇性引數。表示引數不是必要的。如果使用了，在 arglist 裏所有後來的引數也都必須是選擇性的，並且要以 Optional 關鍵字作宣告。
ByVal	選擇性引數。表示以傳值的方式來傳遞引數。
ByRef	選擇性引數。表示以傳址的方式來傳遞引數。Visual Basic 預設是 ByRef。
ParamArray	選擇性引數。只用於 arglist 的最後一個引數是 Variant 元素的 Optional 陣列。ParamArray 可讓您提供任意數量的引數，但不能與 ByVal、ByRef，或 Optional 並用。
Varname	必要的引數。引數的變數名稱，遵循標準變數命名規格。
Type	選擇性引數。傳給程序的引數之資料型態。可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String (只限可變長度)、Object 或 Variant。如果引數不是 Optional 的，則亦可指定使用者自訂型態或物件型態。
Defaultvalue	選擇性引數。 任何常數或常數運算式。只能使用在 Optional 的引數上。如果型態是 Object，則明確的預設值只能是 Nothing。
請注意

如果沒有明確的以 Public 或 Private 作宣告，則 Property 程序預設為公用的。若沒有使用 Static，區域變數的值在呼叫之間不會保留下來。

任何可執行程式碼都必須在程序裏。您不可在其它的 Property、Sub或 Function 程序裏定義 Property Get 程序。

Exit Property 陳述式會從 Property Get 程序裏立即離開。程式會從呼叫 Property Get 程序下一行的陳述式之處繼續執行。Exit Property 陳述式可在 Property Get 程序裏的任何位置。

如同 Sub 和 Property Let 程序一般，Property Get 程序是獨立的程序，能接受引數，執行一連串的陳述式，而且能改變引數的值。然而，與 Sub 或 Property Let 程序不同的是，如果傳回屬性值，Property Get 程序可以像 Function 或屬性名稱一樣放在運算式的右邊。


Property Let 陳述式

��� [image] ���

宣告 Property Let 程序的名稱、引數、和程式碼，而 Property Let 程序是用來指定值給屬性。

語法

[Public | Private] [Static] Property Let name ([arglist,] value)
[statements]
[Exit Property]
[statements]

End Property

Property Let 陳述式的語法具有下列幾個單元：

單元	描述
Public	選擇性引數。表示 Property Let 程序可被所有模組中的程序所使用。如果在含有 Option Private 陳述式的模組裏使用，此程序將無法在專案之外使用。
Private	選擇性引數。表示 Property Let 程序只能在宣告它的模組裏使用。
Static	選擇性引數。表示 Property Let 程序的區域變數在呼叫之間會將值保留下來。Static 屬性不會影響在 Property Let 程序之外宣告的變數，即使是在程序裏有使用到也一樣。
name	必要的引數。Property Let 程序的名稱，遵循標準變數命名規格。但此名稱可以和同模組中的 Property Get 或 Property Set 程序相同。
arglist	必要的引數。當作傳給 Property Let 程序的引數之變數清單。數個引數以逗點隔開。Property Let 程序裏的每個引數 (除了最後一個) 的名稱和資料型態必須和 Property Get 程序裏相對應的引數相同。而最後一個 (有時是唯一) 引數是指定給在運算式右方的屬性值，且該引數的資料型態必須和 Property Get 程序裏相對應的傳回值型態相同。
value	必要的引數。變數，含有要指定給屬性的值。當呼叫程序時，這個引數會出現在呼叫運算式的右側。value 的資料型態必須與對應之 Property Get 程序的傳回型態相同。
Statements	選擇性引數。任何在 Property Let 程序裏要執行陳述式的群組。
arglist 引數有下列語法和單元：

[Optional] [ByVal | ByRef] varname[( )] [As type] [= defaultvalue]

單元	描述
Optional	選擇性引數。 表示引數不是必要的。如果使用了，在 arglist 裏所有後來的引數也都必須是選擇性的，而且要以 Optional 關鍵字作宣告。請注意，Property Let 運算式的右方不可能是 Optional 的。
ByVal	選擇性引數。表示以傳值的方式傳遞引數。
ByRef	選擇性引數。表示以傳址的方式傳遞引數。Visual Basic 預設為 ByRef。
ParamArray	選擇性引數。只用於 arglist 的最後一個引數是 Variant 元素的 Optional 陣列。ParamArray 可讓您提供任意數量的引數，但不能與 ByVal、ByRef，或 Optional 並用。
varname	必要的引數。引數的變數名稱，遵循標準變數命名規格。
type	選擇性引數。傳給程序之引數的資料型態，可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String (只限可變長度)、Object、或 Variant。如果引數不是 Optional 的，則可以指定使用者自訂型態，或物件型態。
defaultvalue	選擇性引數。任何常數或常數運算式，只能使用在 Optional 的引數上。如果型態是 Object，則預設值只能是 Nothing。
附註   每個 Property Set 陳述式必須對定義它的程序最少定義一個引數。當引用 Property Set 陳述式來定義程序時，這個引數 (如果多於一個，則是最後的引數) 包含設定給屬性的實際值。

請注意

如果沒有明確的以 Public 或 Private 來宣告，則 Property 程序預設為 公用的。如果沒有使用 Static，則區域變數的值在呼叫之間不會保留下來。

任何可執行程式碼都必須在程序裏，以致於不可在其它的 Property、Sub 或 Function 程序裏定義 Property Let 程序。

Exit Property 陳述式會從 Property Let 程序裏立即離開。程式會從呼叫 Property Let 程序的下一行陳述式之處繼續執行。Exit Property 陳述式可在 Property Let 程序裏的任何位置。

如同 Function 和 Property Get 程序一樣，Property Let 程序是獨立的程序，能接受引數，執行一連串的陳述式，而且能改變引數的值。然而，不像 Function 或 Property Get 程序兩者都能傳回值，而 Property Let 程序只能使用在屬性指定運算式或 Let 陳述式的左方。


Property Set 陳述式

��� [image] ���

宣告 Property 程序的名稱、引數和程式碼，且設定對物件的引用。

語法

[Public | Private] [Static] Property Set name ([arglist,] reference)
[statements]
[Exit Property]
[statements]

End Property

Property Set 陳述式的語法具有下列幾個單元：

單元	描述
Optional	選擇性引數。表示引數可否由呼叫者提供。
Public	選擇性引數。表示 Property Set 程序可被所有模組裏的程序所使用。如果在含有 Option Private 陳述式的模組裏使用，此程序將無法在專案之外使用。
Private	選擇性引數。表示 Property Set 程序只能在宣告它的模組裏使用。
Static	選擇性引數。表示 Property Set 程序的區域變數在呼叫之間會將值保留下來。 Static 屬性不會影響在 Property Set 程序之外宣告的變數，即使是在程序裏有使用到也一樣。
name	必要的引數。Property Set 程序的名稱，遵循標準變數命名規格。但此名稱可以和同模組裏的 Property Get 或 Property Let 程序相同。
arglist	必要的引數。當作傳給 Property Set 程序的引數之變數清單。數個引數以逗點隔開。
reference	必要的引數。變數，含有物件引用指定式右側的物件引用。
statements	選擇性引數。 任何在 Property 程序裏要執行的一連串陳述式。
arglist 引數有下列語法和單元：

[Optional] [ByVal | ByRef] varname[( )] [As type] [= defaultvalue]

單元	描述
Optional	選擇性引數。 表示引數不是必要的。如果使用了，在 arglist 裏所有後來的引數也都必須是選擇性的，而且要以 Optional 關鍵字作宣告。請注意，Property Set 運算式的右方不可能是 Optional 的。
ByVal	選擇性引數。表示以傳值的方式來傳遞引數。
ByRef	選擇性引數。表示以傳址的方式來傳遞引數。Visual Basic 預設為 ByRef。
ParamArray	選擇性引數。只用於 arglist 的最後一個引數是 Variant 元素的 Optional 陣列。ParamArray 可讓您提供任意數量的引數，但不能與 ByVal、ByRef，或 Optional 並用。
varname	必要的引數。引數的變數名稱，遵循標準變數命名規格。
type	選擇性引數。傳給程序之引數的資料型態，可以是Byte、Boolean、Integer、Long、Currency、Single，Double，Decimal (目前尚未支援)、Date、String (只限可變長度)、Object 或 Variant。如果引數不是 Optional，則可以指定使用者自訂型態或物件型態。
defaultvalue	選擇性引數。 任何常數或常數運算式。只能使用在 Optional 的引數上。如果型態是 Object，則預設值只能是 Nothing。
附註   每個 Property Set 陳述式必須對定義它的程序最少定義一個引數。當引用 Property Set 陳述式來定義程序時，這個引數 (如果多於一個，則是最後的引數) 包含設定給屬性的實際值。不可以是 Optional 的。

請注意

如果沒有明確的以 Public 或 Private 作宣告，則 Property 程序預設為公用的。如果沒有使用 Static，區域變數的值在呼叫之間不會保留下來。

任何可執行程式碼都必須在程序裏，不可以在其它的 Property、Sub 或 Function 程序裏定義 Property Set 程序。

Exit Property 陳述式會從 Property Set 程序裏立即離開。程式會從呼叫 Property Set 程序下一行的陳述式之處繼續執行。Exit Property 陳述式可在 Property Set 程序裏的任何位置。

如同 Function 和 Property Get 程序一樣，Property Set 程序是獨立的程序，能接受引數，執行一連串的陳述式，而且能改變引數的值。然而，不像 Function 或 Property Get 程序兩者都能傳回值，Property Set 程序只能使用在物件指定運算式 (Set 陳述式) 的左方。


Public 陳述式

��� [image] ���

在模組層次中用來宣告公用變數，並配置儲存空間。

語法

Public [WithEvents] varname[([subscripts])] [As [New] type] [,[WithEvents] varname[([subscripts])] [As [New] type]] . . .

Public 陳述式的語法具有下列幾個單元：

單元	描述
WithEvents	選擇性引數。表示 varname 是物件變數的關鍵字，且用來對應 ActiveX 物件所引發的事件。僅適用於物件模組中。可以用 WithEvents 來個別宣告變數，但不可用 WithEvents 來建立陣列。也不可與 New 同時使用。
varname	必要的引數。變數的名稱，遵循標準變數命名規格。
subscripts	選擇性引數。陣列 變數的維數，最多可宣告到 60 維。subscripts 引數使用下列語法：
	[lower To] upper [,[lower To] upper] . . .
	如果沒有明確的指定 lower，下限是由 Option Base 陳述式所決定。如果沒有使用 Option Base 陳述式，則下限為零。
New	選擇性引數。允許物件隱含宣告的關鍵字。如果在宣告物件變數時使用 New，則在首次引用該物件時，就會建立該物件的新執行個體，所以就不必使用 Set 陳述式來指定物件的引用。New 關鍵字不可以用來宣告內建資料型態的變數，也不可以用來宣告依存物件的執行個體，或和 WithEvents 同時使用。
type	選擇性引數。 變數的資料型態，可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String (可變長度字串)、String * length (固定長度字串)、Object、Variant、使用者自訂型態或物件型態。使用 As type 子句來分隔每個變數的宣告。
請注意

使用 Public 陳述式宣告的變數，可以在所有模組裏使用 (除非使用 Option Private Module)；但會使變數只在它們所在的專案裏為公用的。

注意   Public 陳述式無法在物件類別 模組裏宣告固定長度的字串變數。

使用 Public 陳述式來宣告變數的資料型態。舉例來說，下列的陳述式宣告一個變數為 Integer：

Public NumberOfEmployees As Integer

也可用 Public 陳述式來宣告變數的物件型態。下列的陳述式宣告一個變數為工作表的新執行個體。

Public X As New Worksheet

如果宣告物件變數時不使用 New 關鍵字，則引用該物件的變數在使用之前，必須以 Set 陳述式來指定一個已存在的物件。除非已經指定物件，否則已宣告的物件變數值為 Nothing，表示尚未引用任何特定物件的執行個體。

也可以使用 Public 陳述式加上空白括號來宣告動態陣列；在宣告之後，在程序中使用 ReDim 陳述式來定義陣列的維數和元素。變數的大小已由 Private、Public 或 Dim 陳述式所明確指定，如果重新宣告陣列變數的維數，則會發生錯誤。

如果不指定資料型態或物件型態，而且也沒有 Deftype 陳述式在模組裏，變數型態預設為 Variant。

初始化變數時，數值變數初始為 0，可變長度字串初始為零長度字串 ("")，且固定長度字串都填上零。Variant 變數初始為 Empty。每個使用者自訂型態變數的元素皆當成個別的變數來初始化。


ReDim 陳述式

��� [image] ���

在程序層次中用來重新配置動態陣列變數的儲存空間。

語法

ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . .

ReDim 陳述式的語法具有下列幾個單元：

單元	描述
Preserve	選擇性引數。當改變原有陣列最後一維的大小時，仍然保有原來的資料的關鍵字。
varname	必要的引數。變數的名稱，遵循標準變數命名規格。
subscripts	必要的引數。陣列 變數的維數，最多可宣告到 60 維。subscripts 引數使用下列語法：
	[lower To] upper [,[lower To] upper] . . .
	如果沒有明確的指定 lower，下限是由 Option Base 陳述式所決定。如果沒有使用 Option Base 陳述式，則下限是零。
type	選擇性引數。 變數的資料型態，可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String (可變長度字串)、String * length (固定長度字串)、Object、Variant、使用者自訂型態或物件型態。使用 As type 子句來分隔每個變數的宣告。對於含有陣列的 Variant 而言，type 描述陣列每個元素的型態，但不會改變 Variant 為其它型態。
請注意

ReDim 陳述式是用來決定或重新決定動態陣列的大小，且此動態陣列是由 Private、Public 或 Dim 陳述式加上空括號 (沒有維數陣列索引) 所正式宣告的。

可以重覆地使用 ReDim 陳述式來改變陣列的元素數目和維數。然而，不可用一種資料型態來宣告陣列，卻以 ReDim 來改變陣列為另一種資料型態，除非是 Variant 的陣列。如果是 Variant 的陣列，元素的型態可以用 As type 子句來改變；除非已使用了 Preserve 關鍵字，在此情況下，資料型態是不允許改變的。

如果使用了 Preserve 關鍵字，則只能重新改變陣列最後一維的大小，而不能改變維數的數目。舉例來說，如果陣列只有一維，則可以改變此維的大小，因為它是最後且唯一的一維。然而，如果陣列有二維以上，則只能改變最後一維的大小，且仍然可以保留陣列的內容。下面的例子表示可以增加動態陣列最後一維的大小，且不必刪除陣列裏原有的資料。

ReDim X(10, 10, 10)

. . .

ReDim Preserve X(10, 10, 15)

同樣地，當已使用了 Preserve，則只能藉由改變上限來改變陣列的大小。若改變下限，則會造成錯誤。

如果使陣列變得比本來更小，則被消除的元素裏之資料會消失。如果以傳址的方式將陣列傳給程序，則不可在該程序裏重新改變此陣列的維數。

當變數初始化時，數值變數初始為 0，可變長度 字串初始為零長度字串 ("")，固定長字串則都填上零。Variant 變數初始為 Empty。將每個使用者自訂型態變數的元素皆當作個別的變數來作初始化。引用物件的變數必須先以 Set 陳述式指定一個已存在的物件後，才可使用。已宣告的物件變數在被指定物件之前，值是 Nothing，表示它尚未引用任何特定物件的執行個體。

注意   如果它宣告的變數不在模組層次或程序層次裏，則 ReDim 陳述式像宣告性的陳述式。如果後來又建立了一個同名稱的變數，即使是在更廣的有效範圍裏，ReDim 會引用後來的變數而不會造成編譯上的錯誤，就算是有 Option Explicit 也一樣。若要避免此類的衝突，ReDim 應該不可以用作宣告性的陳述式，而只能用來重新定義陣列的維數。

附註   若要改變 Variant 陣列的大小，則必須在改變陣列大小之前先明確的宣告 Variant 變數。


Rem 陳述式

��� [image] ���

用來加入程式中解釋性的附註。

語法

Rem comment

也可以使用下列語法：

' comment

選擇性的 comment 引數是任何您想加入的註解文字。在 Rem 關鍵字和 comment 之間必須有空格。

請注意

如果使用行號或行標記，可以用 GoTo 或 GoSub 陳述式分支到含有 Rem 陳述式的該行。程式會從 Rem 陳述式之後接下來第一個可執行的陳述式開始執行。如果 Rem 關鍵字接在某行的陳述式之後，則必須和該陳述式以冒號 (：) 隔開。

可以使用 ( ' ) 符號來替代 Rem 關鍵字；若使用 ( ' )，則接在其它陳述式之後時就不必再使用冒號。


Set 陳述式

��� [image] ���

指定物件引用給變數或屬性。

語法

Set objectvar = {[New] objectexpression | Nothing}

Set 陳述式的語法具有下列幾個單元：

單元	描述
objectvar	必要的引數。 變數或屬性的名稱，遵循標準變數命名規格。
New	選擇性引數。New 通常是用來能使物件隱含宣告。當 New 和 Set 一起使用時，會建立一個物件類別的新執行個體。如果 objectvar 有引用物件，則當指定新的引用時，原有的引用就解除了。New 關鍵字無法建立內建資料型態的新執行個體，而且也無法用來建立依存物件。.
objectexpression	必要的引數。含有下列幾種元素的運算式：物件名稱、相同物件型態而另宣告的變數，或是能傳回相同物件型態的函數或方法。
Nothing	選擇性引數。停止 objectvar 和任何特定物件的關連。指定 objectvar 為 Nothing，會在沒有其它變數引用時，釋放所有與先前物件有關的系統和記憶體資源。
請注意

為了正確性，objectvar 的物件型態必和指定它的物件相一致。

Dim、Private、Public、ReDim 和 Static 陳述式只宣告變數會引用物件，但若不使用 Set 陳述式來指定特定物件，則沒有實際上的物件引用。

下列的例子解釋 Dim 如何用來宣告一個型態為 Form1 的陣列。Form1 的執行個體實際上不存在。Set 指定對新Form1 執行個體給 myChildForms 變數。同樣的程式碼可以用來在 MDI 應用程式裏建立子表單。

Dim myChildForms(1 to 4) As Form1

Set myChildForms(1) = New Form1

Set myChildForms(2) = New Form1

Set myChildForms(3) = New Form1

Set myChildForms(4) = New Form1

一般當使用 Set 來引用物件給變數時，並非複製一份物件給變數，而是建立一份對該物件的引用。超過一個以上的物件變數可以引用相同的物件。因為變數是引用該物件，而不是引用該物件的複製品，該物件若改變，則所有引用它的變數也會跟著改變。然而，若在 Set 陳述式上使用 New 關鍵字，則會真的建立該物件的執行個體。


Static 陳述式

��� [image] ���

在程序層次中用來宣告變數並配置儲存空間。以 Static 陳述式宣告的變數，在程式執行期間，會一直保留內容。

語法

Static varname[([subscripts])] [As [New] type] [, varname[([subscripts])] [As [New] type]] . . .

Static 陳述式的語法具有下列幾個單元：

單元	描述
varname	必要的引數。變數名稱，遵循標準變數命名規格
subscripts	選擇性引數。陣列 變數的維數，最多可宣告到 60 維。subscripts 引數使用下列語法
	[lower To] upper [,[lower To] upper] . . .
	如果沒有明確的指定 lower，下限是由 Option Base 陳述式所決定。如果沒有使用 Option Base 陳述式，則下限是零。
New	選擇性引數。允許物件隱含宣告的關鍵字。如果在宣告物件變數時使用 New，在首次引用該物件時就會建立該物件的新執行個體，所以就不必使用 Set 陳述式來引用物件。New 關鍵字不可以用來宣告內建資料型態的變數，也不可用來宣告依存物件的執行個體。
type	選擇性引數。 變數的資料型態，可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String (可變長度字串)、String * length (固定長度字串)、Object、Variant、使用者自訂型態或物件型態。使用 As type 子句來分隔每個變數的宣告。
請注意

只要模組的程式碼正在執行，以 Static 陳述式宣告的變數會將值保留下來，直到模組被重置或重新開始。在非靜態程序中使用 Static 陳述式來明確的宣告只能在程序裏可見，但其生命期和該程序的模組一樣長。

在程序中使用 Static 陳述式，來宣告在程序呼叫間會保留值的變數之資料型態。舉例來說，下列的陳述式宣告一個固定大小的整數陣列：

Static EmployeeNumber(200) As Integer

下列陳述式宣告一個工作表中新執行個體的變數：

Static X As New Worksheet

如果 New 關鍵字

沒有使用在宣告物件變數上，引用物件的變數在使用之前，必須以 Set 陳述式來指定已存在的物件。在未指定物件之前，已宣告的物件變數值為 Nothing，表示它尚未引用特定物件的執行個體。在宣告時使用 New 關鍵字，則當引用該物件時會建立該物件的執行個體。

如果不指定資料型態或物件型態，而且沒有 Deftype 陳述式在模組裏，變數的預設型態是 Variant。

附註   Static 陳述式和 Static 關鍵字很類似，但有不同的效果。如果以 Static 關鍵字 (就像 Static Sub CountSales) 來宣告程序，則該程序裏的所有區域變數，只配置一次，且變數的值在程序執行期間會保留下來。對非靜態程序，每當程序被呼叫時，就配置變數的儲存空間，當程序離開時，就解除。Static 陳述式是用來宣告非靜態程序裏的特定變數，來使它們在程式執行期間將值保留下來。

當變數初始化時，數值變數初始為 0，可變長度字串初始為零長度字串 ("")，固定長字串則都填上零。Variant 變數初始為 Empty。每個使用者自訂型態變數的元素都當作個別的變數來作初始化。

附註   在程序裏使用 Static 陳述式時，和其它宣告性的陳述式一樣，例如 Dim，要放在程序的開始。


Sub 陳述式

��� [image] ���

宣告 Sub 程序的名稱、引數和其中的程式碼。

語法

[Private | Public] [Static] Sub name [(arglist)]
[statements]
[Exit Sub]
[statements]

End Sub

Sub 陳述式的語法具有下列幾個單元：

單元	描述
Public	選擇性引數。表示任何模組裏的所有其它程序都可呼叫 Sub 程序。如果模組裏有 Option Private，那麼此程序就不能在專案之外使用。
Private	選擇性引數。表示 Sub 程序只在宣告它之模組裏的程序所使用。
Static	選擇性引數。表示 Sub 程序的區域變數在呼叫之間會將值保留下來。Static 不會影響在 Sub 之外所宣告的變數， 就算它們在程序中有被使用到。
name	必要的引數。Sub 的名稱，遵循標準變數命名規格。
arglist	選擇性引數。表示呼叫 Sub 程序時所傳送引數的變數清單。變數以逗號隔開。
statements	選擇性引數。任何 Sub 程序要執行的陳述式群組。
arglist 引數有下列語法和單元：

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

單元	描述
Optional	選擇性引數。表示引數不是必要的關鍵字。如果使用了，在 arglist 裏所有後來的引數也都必須是選擇性的，而且也必須用 Optional 關鍵字來宣告。如果已經使用了 ParamArray ，就不可以在引數上再使用 Optional。
ByVal	選擇性引數。表示以傳值的方式來傳遞引數。
ByRef	選擇性引數。表示以傳址的方式來傳遞引數。Visual Basic 預設為 ByRef。
ParamArray	選擇性引數。使用在 arglist 的最後一個引數上，表示此引數是 Variant 元素的 Optional 陣列。ParamArray 關鍵字讓您可以使用多個引數，但不可以和 ByVal、ByRef、或 Optional 共用。
varname	必要的引數。引數之變數的名稱，遵循標準變數命名規格。
type	選擇性引數。傳給程序的引數之資料型態，可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String (只限可變長度)、Object或 Variant。如果引數不是 Optional 的，則可指定使用者自訂型態或物件型態。
defaultvalue	選擇性引數。任何常數或常數運算式，只能使用在 Optional 的引數上。如果型態是 Object，則預設值只能是 Nothing。
請注意

如果沒有明確的使用 Public、Private或 Sub 程序預設是公用的。如果沒有使用 Static，則區域變數的值在呼叫之間是不保留的。

注意   Sub 程序可以遞迴，也就是它們可以呼叫自己。然而，遞迴可能會造成堆疊溢位。Static 關鍵字通常不使用在遞迴的 Sub 程序上。

所有的可執行程式碼都必須在程序中。不可以在 Function、Sub 或 Property 程序裏定義其它的 Sub 程序。

Exit Sub 陳述式會使 Sub 程序立即停止。程式會從呼叫該 Sub 程序的下一行陳述式繼續執行。Exit Sub 陳述式可以在 Sub 程序任何位置出現，且不限次數。

如同 Sub 程序一樣，Function 程序是獨立的程序，可以接受引數，執行一串陳述式，並且改變引數的值。然而，不像 Function 程序會傳回值，Sub 程序無法在運算式裏使用。

只要使用程序名稱後，接著以括號括起來的引數列，就可以呼叫 Sub 程序。請參考 Call 陳述式以得知關於如何呼叫 Sub 程序的特定資訊。

在 Sub 程序中使用的變數有兩類：一為程序中明確宣告的，以及不是此類的。在程序中明確宣告的變數 (使用 Dim 或同類字)，必為區域性的。程序中使用到，但未明確在程序中宣告的變數也是區域的，除非此變數已經在程序外的更高層次中明確宣告過。

注意   程序可使用不是在該程序裏明確宣告的變數，但是若在模組層次定義了相同的名稱，就會發生名稱上的衝突。如果程序裏引用了未宣告的變數，而此變數的名稱和其它程序、常數、或變數的名稱相同，那麼就會認定該程序引用模組層次的名稱。所以，請明確的宣告變數以避免此種衝突。可以使用 Option Explicit 陳述式來強迫明確的宣告變數。

附註   不可以使用 GoSub、GoTo 或 Return 來進入或離開 Sub 程序。


Type 陳述式

��� [image] ���

在模組層次中用來定義使用者自訂的資料型態，其含有一個或更多的元素。

語法

[Private | Public] Type varname
 elementname [([subscripts])] As type
[elementname [([subscripts])] As type]
. . .

End Type

Type 陳述式的語法具有下列幾個單元：

單元	描述
Public	選擇性引數。用來宣告此使用者自訂型態可以在所有專案中的所有模組的所有程序裏使用。
Private	選擇性引數。用來宣告此使用者自訂型態只在已宣告它的模組裏使用。
varname	必要的引數。使用者自訂型態的名稱，遵循標準變數命名規格。
elementname	必要的引數。使用者自訂型態的元素名稱，也遵循標準變數命名規格，除了使用關鍵字外。
subscripts	選擇性引數。陣列元素的維數。使用空括號來表示此陣列的大小是可改變的。subscripts 引數 使用下列語法：
	[lower To] upper [,[lower To] upper] . . .
	如果沒有明確的指定 lower，下限是由 Option Base 陳述式所決定。如果沒有使用 Option Base 陳述式，則下限是零。
type	必要的引數。元素的資料型態，可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚未支援)、Date、String(可變長度字串）、String * length (固定長度字串）、Object、Variant、其它使用者自訂型態或物件型態。
請注意

Type 陳述式只能在模組層次裏使用，只要曾使用 Type 陳述式宣告的使用者自訂型態，則可以在該宣告有效範圍的任意位置中來宣告該型態的變數。請使用 Dim、Private、Public、ReDim或 Static 來宣告使用者自訂型態的變數。

在一般模組裏，使用者自訂型態預設為公用的。此可見性可由 Private 關鍵字來改變。然而，在物件類別模組裏，使用者自訂型態只能是私有的，而且此可見性不可以用 Public 關鍵字來改變。

行號和行標籤不可以出現在 Type...End Type 區塊裏。

使用者自訂型態通常和資料記錄一起使用。資料記錄通常含有數個相關連卻不同資料型態的元素。

下列範例表示在固定大小的陣列中運用使用者自訂型態：

Type StateData

CityCode (1 To 100) As Integer	' Declare a static array.

County As String * 30

End Type

Dim Washington(1 To 100) As StateData

在上例中，StateData 含有 CityCode static 陣列，而且記錄 Washington 和 StateData 有相同的結構。

當宣告使用者自訂型態的固定大小陣列時，陣列的維數必須是以數字或常數來宣告，而不是用變數。


UBound 函數

��� [image] ���

傳回 Long值，表示指定陣列某維最大可使用的陣列索引。

語法

UBound(arrayname[, dimension])

UBound 函數的語法具有下列幾個單元：

單元	描述
arrayname	必要的引數。陣列變數的名稱，遵循標準變數命名規格。.
dimension	選擇性引數。Variant (Long），表示傳回的是那一維的上限。1 表示第一維，2 表示第二維，依此類推。如果省略 dimension，則預設是 1。
請注意

UBound 函數和 LBound 函數一起用來決定陣列的大小。使用 LBound 函數來找出陣列每一維的下限。

若陣列的維數如下所示，UBound 傳回如下表的值：

Dim A(1 To 100, 0 To 3, -3 To 4)

陳述式	傳回值
UBound(A, 1)	100
UBound(A, 2)	3
UBound(A, 3)	4


Array 函數範例

本範例使用 Array 函數來產生一個陣列，並將陣列指定給一 Variant 型態的變數。

Dim MyWeek, MyDay

MyWeek = Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")

' 假設陣列索引值的下限為 1 (使用 [Option Base] 陳述式可以改變此下限值)。

MyDay = MyWeek(2)	' MyDay 的值為 [Tue]。

MyDay = MyWeek(4)	' MyDay 的值為 [Thu]。


Const 陳述式範例

本範例使用 Const 陳述式宣告部份常用到的文數字設為常數。Public 常數應該在一般模組的「一般」宣告區中宣告，而不是在物件類別模組中宣告。Private 常數則是在任何模組的「一般」宣告區中宣告。

' 常數的預設狀態是 Private。

Const MyVar = 459

' 宣告 Public 常數。

Public Const MyString = "HELP"

' 宣告 Private Integer 常數。

Private Const MyInt As Integer = 5

' 在同一行裏宣告多個常數。

Const MyStr = "Hello", MyDouble As Double = 3.4567


CreateObject 函數範例

本範例使用 CreateObject 函數來設定對 Microsoft Excel 的引用 (變數名稱為 xlApp)。本範例使用該引用來存取 Microsoft Excel 的 Visible 屬性，然後使用 Microsoft Excel 的 Quit 方法來將它結束。最後，該引用將自動釋放。

Dim xlApp As Object	' 宣告變數來記錄引用。

Set xlApp = CreateObject("excel.application")

' 如果您想看見被呼叫的應用程式，

' 可能必須在此將 Visible 屬性設成 True。

xlApp.Visible = True

' 經由 xlApp 來存取 Microsoft Excel 的其它物件。

xlApp.Quit	' 結束後，使用 Quit 方法來結束該程式。

Set xlApp = Nothing	' 再釋放該引用。


Declare 陳述式範例

本範例示範如何使用 Declare 陳述式在一般模組中宣告動態連結程式庫  (DLL) 內含之程序引用。如果您的 Declare 陳述式是 Private，您可以將 Declare 陳述式放在物件類別模組中。

' 在 Microsoft Windows (16 位元) 中：

Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

' 假設 SomeBeep 是該程序的別名。

Declare Sub MessageBeep Lib "User" Alias "SomeBeep"(ByVal N As Integer)

' 在 Alias 子句中使用序數來呼叫 GetWinFlags。

Declare Function GetWinFlags Lib "Kernel" Alias "#132"() As Long

' 在 32 位元 Microsoft Windows 系統中，必需指定使用 USER32.DLL，而不是 USER.DLL。您可以使用條件式編譯法來撰寫程式碼，使之可以在 Win32 或 Win16 之一中執行。

#If Win32 Then

Declare Sub MessageBeep Lib "User32" (ByVal N As Long)

#Else

Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

#End If


Deftype 陳述式範例

本範例示範如何使用不同的 Deftype 陳述式來設定變數的預設資料型態。若函數名稱以 Deftype 所定義的字元作開頭，則該函數之傳回值便是該字元所代表的資料型態。在宣告變數時，可以在 Dim 陳述式指定資料型態，而不用預設型態。Deftype 陳述式只能在模組層級中使用 (也就是說，不可在程序之中使用)。

' 變數名稱若以 A 到 K 開頭，則預設型態為整數。

DefInt A-K

' 變數名稱若以 L 到 Z 開頭，則預設型態為字串。

DefStr L-Z

CalcVar = 4	' 設定整數初值。

StringVar = "Hello there"	' 設定字串初值。

AnyVar = "Hello" 	' 會產生「引數型態不符合」之錯誤。

Dim Calc As Double	' 指定變數型態為 Double，而非預設之整數。

Calc = 2.3455	' 設定為 Double。

' Deftype 陳述式適用範圍也包括函數名稱。

CalcNum = ATestFunction(4)	' 呼叫使用者自訂的函數。

' ATestFunction 函數定義如下。

Function ATestFunction(INumber)

ATestFunction = INumber * 2	' 傳回值為一整數。

End Function


Dim 陳述式範例

本範例示範如何使用 Dim 陳述式來宣告變數，也示範了如何用 Dim 陳述式來宣告陣列。陣列所引值的預設下限為 0，但可以在模組層級中使用 Option Base 陳述式來改變。

' AnyValue 及 MyValue 皆宣告為 Variant 型態 (預設型態)，且值為 Empty。

Dim AnyValue, MyValue

' 宣告整數型態之變數。

Dim Number As Integer

' 在同一行內宣告多個變數。AnotherVar 的型態為 Variant，因為宣告時沒有指定它的型態。

Dim AnotherVar, Choice As Boolean, BirthDate As Date

' DayArray 是型態為 Variants 之陣列，共有 51 元素，索引值由 0 到 50，假設這個模組的 Option Base 設定為 0 (此為其預設值)。

Dim DayArray(50)

' Matrix 是一個整數型態的二維陣列。

Dim Matrix(3, 4) As Integer

' MyMatrix 是一個 doubles 型態的三維陣列，其上下限都在宣告時指定。

Dim MyMatrix(1 To 5,  4 To 9,  3 To 5) As Double

' BirthDay 是一個日期型態的陣列，索引值由 1 到 10。

Dim BirthDay(1 To 10) As Date

' MyArray 則是一個型態為 Variant 的動態陣列。

Dim MyArray()


Enum Statement Example
列舉陳述式範例

下面的範例顯示用於定義一個指名常數集合物件的 Enum 陳述式。在這種情況下，常數指的是可以用於設計一個資料庫的資料項目表單的顏色。

Public Enum InterfaceColors

icMistyRose = &HE1E4FF&

icSlateGray = &H908070&

icDodgerBlue = &HFF901E&

icDeepSkyBlue = &HFFBF00&

icSpringGreen = &H7FFF00&

icForestGreen = &H228B22&

icGoldenrod = &H20A5DA&

icFirebrick = &H2222B2&

End Enum


Erase 陳述式範例

本範例使用 Erase 陳述式來將固定大小的陣列重新初始化，或將動態陣列的記憶空間釋放出來。

' 宣告陣列變數。

Dim NumArray(10) As Integer	' 整數陣列。

Dim StrVarArray(10) As String	' 可變長度字串之陣列。

Dim StrFixArray(10) As String * 10	' 固定長度字串之陣列。

Dim VarArray(10) As Variant	' Variant 陣列。

Dim DynamicArray() As Integer	' 動態陣列。

ReDim DynamicArray(10)	' 配置陣列記憶空間。

Erase NumArray	' 將陣列的每個元素設成 0。

Erase StrVarArray	' 將陣列的每個元素設成 [零長度字串] ("")。

Erase StrFixArray	' 將陣列的每個元件設成 0。

Erase VarArray	' 將陣列的每個元件設成 Empty。

Erase DynamicArray	' 將陣列的記憶空間釋放。


Event Statement Example
事件陳述式範例

下面的範例，使用事件來計算一個最快的 100 米賽跑示範所需的秒數。程式碼說明所有與事件關聯的方法、屬性以及陳述式，包括 Event 陳述式在內。

引發一個事件的物件類別是事件來源，而提供這個事件的物件類別是事件接收 (sink)。對於所產生的事件，事件來源可以有多個事件接收。當物件類別引發一個事件時，該事件將用於每一個物件類別，而這些物件類別是為物件的執行個體接收事件時所用的。

該範例也同時也使用了帶有一個按鈕 (Command1)，一個標籤 (Label1) 和兩個文字方塊 (Text1 和 Text2) 的表單 (Form1)。當按一下按鈕時，第一個文字方塊顯示「From Now」，並且第二個文字方塊開始計算時間。當全部時間 (9.84 秒) 結束時，第一個文字方塊顯示「Until Now」，第二個文字方塊顯示「9.84」。

Form1 的程式碼指定了表單的初始和結束狀態。這部分程式碼同時還包括當事件被引發時，所要執行的程式碼。

Option Explicit

Private WithEvents mText As TimerState

Private Sub Command1_Click()

Text1.Text = "From Now"

    Text1.Refresh

    Text2.Text = "0"

    Text2.Refresh

Call mText.TimerTask(9.84)

End Sub

Private Sub Form_Load()

    Command1.Caption = "Click to Start Timer"

    Text1.Text = ""

    Text2.Text = ""

    Label1.Caption = "The fastest 100 meter run took this long:"

    Set mText = New TimerState

    End Sub

Private Sub mText_ChangeText()

    Text1.Text = "Until Now"

    Text2.Text = "9.84"

End Sub

Private Sub mText_UpdateTime(ByVal dblJump As Double)

    Text2.Text = Str(Format(dblJump, "0"))

    DoEvents

End Sub

剩下的程式碼在一個指名為 TimerState 的物件類別模組中。當事件被引發時，Event 陳述式宣告被初始化的程序。

Option Explicit

Public Event UpdateTime(ByVal dblJump As Double)

Public Event ChangeText()

Public Sub TimerTask(ByVal Duration As Double)

    Dim dblStart As Double

    Dim dblSecond As Double

    Dim dblSoFar As Double

    dblStart = Timer

    dblSoFar = dblStart

    Do While Timer < dblStart + Duration

        If Timer - dblSoFar >= 1 Then

            dblSoFar = dblSoFar + 1

            RaiseEvent UpdateTime(Timer - dblStart)

        End If

    Loop

    RaiseEvent ChangeText

End Sub


Function 陳述式範例

本範例使用 Function 陳述式來宣告一個函數的名稱、引數及函數的程式碼。在範例的最後一段中，使用到被初始化的 Optional 引數。

' 下面自訂函數傳回其引數值的平方根。

Function CalculateSquareRoot(NumberArg As Double) As Double

If NumberArg < 0 Then	' 檢查引數值。

Exit Function	' 如果引數值小於 0，結束函數。

Else

CalculateSquareRoot = Sqr(NumberArg)	' 將平方根傳回。

End If

End Function

利用關鍵字 ParamArray 可以讓函數接受不固定數目的引數。下面範例中，FirstArg 是以傳值的方式傳入。

Function CalcSum(ByVal FirstArg As Integer, ParamArray OtherArgs())

Dim ReturnValue

' 如果此函數以如下方式呼叫：

ReturnValue = CalcSum(4, 3 ,2 ,1)

' 區域變數值將會如下：FirstArg = 4，OtherArgs(1) = 3，OtherArgs(2) = 2，依此類推 (假設陣列索引值的預設下限為 1)。

Optional 引數可以有預設值，也可以是 Variant 以外的型態。

' 如果函數的引數以如下方式定義：

Function MyFunc(MyStr As String, Optional MyArg1 As _ Integer = 5, Optional MyArg2 = "Heolly")

Dim RetVal

' 函數可以下列方式呼叫：

RetVal = MyFunc("Hello", 2, "World")	' 三個引數都傳入。

RetVal = MyFunc("Test", , 5)	' 第二個引數省略。

' 第一和第三個引數使用 [指名引數] 方式傳入。

RetVal = MyFunc(MyStr：="Hello ", MyArg1：=7)


GetObject 函數範例

本範例使用 GetObject 函數來得到指定的 Microsoft Excel 工作表的引用 (存在變數 MyXL 中)。範例中使用工作表的 Application 屬性來讓 Microsoft Excel 顯示出來，或者讓它結束等等。第一次呼叫 GetObject 時，若 Microsoft Excel 並未執行，則會產生錯誤，範例中，這樣一個錯誤會導致 ExcelWasNotRunning 旗標值設成 True；第二次呼叫 GetObject 時指定欲執行程式的檔案名稱。如果 Microsoft Excel 仍未執行，第二次的呼叫便會啟動它，並傳回對於該工作表的引用，工作表名稱為 mytest.xls。此檔必需存在指定的路徑中；否則 Visual Basic 會產生 Automation 的錯誤。其次，範例程式讓 Microsoft Excel 以及工作表皆為可見。最後，若 Microsoft Excel 並未執行，則在程式碼中可使用 Application 物件的 Quit 方法將 Microsoft Excel 關閉。如果應用程式已執行的話，則無法將它關閉；可藉由設為 Nothing 來釋放該引用。

' 宣告必要的 API 程式：

Declare Function FindWindow Lib "user32" Alias _

"FindWindowA" (ByVal lpClassName as String, _

ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _

"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _

ByVal wParam as Long, _

ByVal lParam As Long) As Long

Sub GetExcel()

Dim MyXL As Object	' 定義引用 Microsoft Excel 的變數。

Dim ExcelWasNotRunning As Boolean	' 用來標示最後是否要關閉 Microsoft Excel 的旗標。

' 檢查 Microsoft Excel 是否已經在執行。

On Error Resume Next	' 將錯誤狀況處理方式指定成「繼續下一行」。

' 以省略第一個引數的方式來呼叫 Getobject 函數，傳回應用程式的執行個體之引用。如果該程式尚未執行，將會產生錯誤。

Set MyXL = Getobject(, "Excel.Application")

If Err.Number <> 0 Then ExcelWasNotRunning = True

Err.Clear	' 若錯誤發生時，清除 Err 物件。

' 查看 Microsoft Excel。如果 Microsoft Excel 正在執行，

' 將它加入執行中的物件資料表中。

DetectExcel

' 將程式的引用儲存到物件變數中。

Set MyXL = Getobject("c：\vb4\MYTEST.XLS")

' 利用 Application 屬性將 Microsoft Excel 顯示出來。然後

' 使用 MyXL 物件引用的 Windows 集合物件將工作表視窗顯示出來。

MyXL.Application.Visible = True

MyXL.Parent.Windows(1).Visible = True

' 在此寫下修改您自己的檔案的程式碼。

' . . .

' 如果 Microsoft Excel 先前未執行，

' 則使用 Application 屬性的 Quit 方法將之關閉。

' 請注意，當您試圖關閉 Microsoft Excel時，

' 標題列會閃爍，並出現一訊息詢問您是否

' 要儲存已載入的工作表檔案。

If ExcelWasNotRunning = True Then

MyXL.Application.Quit

End IF

Set MyXL = Nothing	' 釋放程式與工作表的引用。

End Sub

Sub DetectExcel()

' 該程序檢測並註冊一個執行中的 Excel。

Const WM_USER = 1024

Dim hWnd As Long

' 如果 Excel 正在執行，則該 API 呼叫將傳回它的物件代碼。

hWnd = FindWindow("XLMAIN", 0)

If hWnd = 0 Then	' 0 means Excel not running.

Exit Sub

Else

' Excel 正在執行，因此可以使用 SendMessage API

' 函數將其放入執行中的物件資料表。

SendMessage hWnd, WM_USER + 18, 0, 0

End If

End Sub


Implements Statement Example
Implements 陳述式範例

下面的範例顯示如何使用 Implements 陳述式來編寫多個物件類別都可以使用的一組宣告。透過 Implements 陳述式共用這些宣告，所有的物件類別都不必自己再進行宣告。

假定有兩個表單。其中 Selector 表單有兩個按鈕，Customer Data 和 Supplier Data。若要輸入顧客和供應商的名稱和地址資訊，使用者在 Selector 表單上按一下 Customer 按鈕或 Supplier 按鈕，然後使用 Data Entry 表單來輸入名稱及地址。Data Entry 表單有兩個文字資料攔，Name 和 Address。

下面的共用宣告的程式碼位於一個稱為 PersonalData 的物件類別中：

Public Name As String

Public Address As String

關於處理顧客資料的程式碼位於稱為 Customer 物件類別模組中：

Implements PersonalData

Private Property Get PersonalData_Address() As String

PersonalData_Address = "CustomerAddress"

End Property

Private Property Let PersonalData_Address(ByVal RHS As String)

'

End Property

Private Property Let PersonalData_Name(ByVal RHS As String)

'

End Property

Private Property Get PersonalData_Name() As String

PersonalData_Name = "CustomerName"

End Property

關於處理供應商資料的程式碼位於稱為的 Supplier 物件類別模組中：

Implements PersonalData

Private Property Get PersonalData_Address() As String

PersonalData_Address = "SupplierAddress"

End Property

Private Property Let PersonalData_Address(ByVal RHS As String)

'

End Property

Private Property Let PersonalData_Name(ByVal RHS As String)

'

End Property

Private Property Get PersonalData_Name() As String

PersonalData_Name = "SupplierName"

End Property

下面的程式碼負責處理 Selector 表單：

Private cust As New Customer

Private sup As New Supplier

Private Sub Command1_Click()

Dim frm2 As New Form2

    Set frm2.PD = cust

    frm2.Show 1

End Sub

Private Sub Command2_Click()

Dim frm2 As New Form2

    Set frm2.PD = sup

    frm2.Show 1

End Sub

下面的程式碼負責處理 Data Entry 表單：

Private m_pd As PersonalData

Private Sub Form_Load()

    With m_pd

        Text1 = .Name

        Text2 = .Address

    End With

End Sub

Public Property Set PD(Data As PersonalData)

    Set m_pd = Data

End Property


LBound 函數範例

本範例使用 LBound 函數來決定陣列中某一維度裏索引值的下限。您可以使用 Option Base 陳述式來改變陣列索引值下限為 0 的預設值。

Dim Lower

Dim MyArray(1 To 10, 5 To 15, 10 To 20) 	' 宣告陣列變數。

Dim AnyArray(10)

Lower = Lbound(MyArray, 1) 	' 傳回 1。

Lower = Lbound(MyArray, 3)	' 傳回 10。

Lower = Lbound(AnyArray)	' 傳回 0 或 1，視

' Option Base 的設定而定。


Let 陳述式範例

本範例使用明確的 Let 陳述式將運算式的結果指定給變數。

Dim MyStr, MyInt

' 下列變數值使用 Let 陳述式。

Let MyStr = "Hello World"

Let MyInt = 5

下列程式和上面的結果一樣，只是在指定變數值時沒有使用 Let 陳述式。

Dim MyStr, MyInt

MyStr = "Hello World"

MyInt = 5


Option Base 陳述式範例

本範例使用 Option Base 陳述式改變陣列索引值下限為 0 的預設值。LBound 函數會傳回陣列某一維度的索引值下限。Option Base 陳述式只能使用在模組層級之中。

Option base 1	' 將陣列索引值下限的預設值改成 1。

Dim Lower

Dim MyArray(20), TwoDArray(3, 4)	' 宣告陣列變數。

Dim ZeroArray(0 To 5)	' 指定陣列索引值的上下限。

' 使用 LBound 函數來檢查陣列所引值的下限。

Lower = LBound(MyArray)	' 傳回 1。

Lower = LBound(TwoDArray, 2)	' 傳回 1。

Lower = LBound(ZeroArray)	' 傳回 0。


Option Compare 陳述式範例

本範例使用 Option Compare 陳述式來設定字串比對的預設方式。Option Compare 陳述式只能使用在模組層級之中。

' 設定字串比對的預設方式為 Binary。

Option compare Binary 	'也就是說，"AAA" 比 "aaa" 來得小。

' 設定字串比對的預設方式為 Text。

Option compare Text	' 也就是說，"AAA" 和 "aaa" 一樣。


Option Explicit 陳述式範例

本範例使用 Option Explicit 陳述式來強制所有變數必須明確宣告。若程式使用未宣告的變數時，會產生編譯階段的錯誤。Option Explicit 陳述式只能使用在模組層級之中。

Option explicit	' 強制所有變數都必需事先宣告。

Dim MyVar	' 宣告變數。

MyInt = 10	' 使用到未宣告的變數將會產生錯誤。

MyVar = 10	' 使用宣告過的變數就沒有錯誤。


Option Private 陳述式範例

本範例示範如何使用 Option Private 陳述式，這個陳述式是使用在模組層級中，用來宣告整個模組的屬性都是私有。在宣告為 Option Private Module 的模組中，模組單元的名稱若沒有宣告為 Private，則那些名稱可以在同一專案的其它模組中存取，但不同專案的模組則無法存取。

Option private Module	' 將整個模組宣告為私有。


Private 陳述式範例

本範例在模組層級中使用 Private 陳述式來將變數宣告為私有；也就是說，這些變數只有在這個模組中才可以存取到。

Private Number As Integer	' Private Integer 變數。

Private NameArray(1 To 5) As String	' Private array 變數。

' 在一行中定義多個變數，兩個為 Variant 型態及一個為 Integer，皆為 Private。

Private MyVar, YourVar, ThisVar As Integer


Property Get 陳述式範例

本範例使用 Property Get 陳述式定義屬性程序來得到屬性值，屬性會將目前畫筆的顏色識別為一個字串。

Dim CurrentColor As Integer

Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3

' 以字串型態傳回目前使用中畫筆的顏色。

Property Get PenColor() As String

Select Case CurrentColor

Case RED

PenColor = "Red"

Case GREEN

PenColor = "Green"

Case BLUE

PenColor = "Blue"

End Select

End Property

' 下面程式碼呼叫 Property Get 程序來得知畫筆顏色。

ColorName = PenColor


Property Let 陳述式範例

本範例使用 Property Let 陳述式來定義程序，並指定該程序的屬性值。範例中使用的屬性是代表繪圖程式中畫筆的顏色。

Dim CurrentColor As Integer

Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3

' 設定繪圖程式中代表畫筆顏色之屬性值。

' 模組層級變數 CurrentColor 為一數值變數，

' 用來識別畫筆的顏色。

Property Let PenColor(ColorName As String)

Select Case ColorName	' 檢查顏色名稱的字串。

Case "Red"

CurrentColor = RED	' 指定顏色為紅色。

Case "Green"

CurrentColor = GREEN	' 指定顏色為綠色。

Case "Blue"

CurrentColor = BLUE	' 指定顏色為藍色。

Case Else

CurrentColor = BLACK	' 指定預設顏色 (黑)。

End Select

End Property

' 下列程式碼呼叫 Property let 程序，來設定繪圖程式的 PenColor 屬性。

PenColor = "Red"


Property Set 陳述式範例

本範例使用 Property Set 陳述式來設定屬性程序，該程序用來設定對於某物件的引用。

' Pen 屬性的行為可以用其它程序來改變。

Property Set Pen(P As Object)

Set CurrentPen = P	' 將 Pen 屬性值設成物件。

End Property


Public 陳述式範例

本範例使用 Public 陳述式，在一般模組的模組層級 ([一般] 宣告區) 中明確宣告變數為 [公用] ；也就是說，除非使用 Option Private Module，否則這些變數可以在任何一個程式的任何一個模組中存取到。

Public Number As Integer	' Public Integer 變數。

Public NameArray(1 To 5) As String	' Public array 變數。

' 在一行中宣告多個變數，兩個為 Variant 型態及一個為 Integer，皆為 Public 變數。

Public MyVar, YourVar, ThisVar As Integer


ReDim 陳述式範例

本範例使用 ReDim 陳述式來配置或重配置動態陣列的記憶空間。範例中假設 Option Base 為 1。

Dim MyArray() As Integer	' 宣告動態陣列。

Redim MyArray(5)	' 配置 5 個元素的空間。

For I = 1 To 5	' 迴圈執行 5 次。

MyArray(I) = I	' 設定陣列初值。

Next I

下列陳述式將重新調整陣列的大小，且將所有元素內容清除。

Redim MyArray(10)	' 將陣列重新調整為 10 個元素。

For I = 1 To 10	' 迴圈執行 10 次。

MyArray(I) = I	' 設定陣列初值。

Next I

下列陳述式也重新調整陣列的大小，但不清除元素內容。

Redim Preserve MyArray(15)	' 將陣列重新調整為 15 個元素。


Rem 陳述式範例

本範例示範各種不同的 Rem 陳述式用法。Rem 陳述式是用來在程式中加入註解用的。

Dim MyStr1, MyStr2

MyStr1 = "Hello" : Rem 將註解加在陳述式之後，用冒號隔開。

MyStr2 = "Goodbye" 	' 此亦為註解，且不需要冒號。


Set 陳述式範例

本範例使用 Set 陳述式來將物件的引用指定給變數。範例中假設 YourObject 為一個有 Text 屬性的物件。

Dim YourObject, MyObject, MyStr

Set MyObject = YourObject	' 指定物件引用。

' MyObject 及 YourObject 對應到相同的物件。

YourObject.Text = "Hello World"	' 設定屬性值。

MyStr = MyObject.Text	' 傳回 "Hello World"。

' 中斷連結，使 MyObject 不再對應到 YourObject。

Set MyObject = Nothing	' 釋放物件引用。


Static 陳述式範例

本範例使用 Static 陳述式讓變數值在模組程式碼的執行期間維持在記憶體中。

' 定義函數。

Function KeepTotal(Number)

' 在呼叫之間只有變數 Accumulate 的值會被保留。

Static Accumulate

Accumulate = Accumulate + Number

KeepTotal = Accumulate

End Funciton

' Static 函數之定義。

Static Function MyFunction(Arg1, Arg2, Arg3)

' 在函數之間所有的區域變數值都將保留。

Accumulate = Arg1 + Arg2 + Arg3

Half = Accumulate / 2

MyFunction = Half

End Function


Sub 陳述式範例

本範例使用 Sub 陳述式來定義一個 Sub 程序的名稱、引數及程式碼。

' Sub 程序定義。

' 有兩個引數的 Sub 程序。

Sub SubComputeArea(Length, TheWidth)

Dim Area As Double	' 宣告區域變數。

If Length = 0 Or TheWidth = 0 Then

' 如果其中一個引數值為 0。

Exit Sub	' 立刻結束程序。

End If

Area = Length * TheWidth	' 計算矩形的面積。

Debug.Print Area	' 將結果在 [偵錯] 視窗中顯示。

End Sub


Type 陳述式範例

本範例使用 Type 陳述式來定義使用者自訂的資料型態。Type 陳述式只能在模組層級中使用。如果要在物件類別模組中使用，Type 陳述式的前面一定要加上 Private 關鍵字。

Type EmployeeRecord	' 建立使用者自訂的資料型態。

ID As Integer	' 定義資料型態的元素。

Name As String * 20

Address As String * 30

Phone As Long

HireDate As Date

End Type

Sub CreateRecord()

Dim MyRecord As EmployeeRecord	' 宣告變數。

' 對變數 EmployeeRecord 的給值動作必需在程某個序中才可以。

MyRecord.ID = 12003	' 給定某個元素的值。

End Sub


UBound 函數範例

本範例使用 UBound 函數來決定陣列索引值的上限。

Dim Upper

Dim MyArray(1 To 10, 5 To 15, 10 To 20)	' 宣告陣列變數。

Dim AnyArray(10)

Upper = UBound(MyArray, 1)	' 傳回 10。

Upper = UBound(MyArray, 3)	' 傳回 20。

Upper = UBound(AnyArray)	' 傳回 10。


CallByName Function Example
CallByName 函數範例

這個範例使用 CallByName 函數呼叫一個 Command 按鈕的 Move 方法。

這個範例也使用一個帶有按鈕 (Command1) 和一個標籤 (Label1) 的表單 (Form1)。當這個表單載入時，該標籤的 Caption 屬性被設定為「Move」，即所要呼叫的方法的名稱。按一下這個按鈕時，CallByName 函數就會呼叫這個方法來改變該按鈕的位置。

Option Explicit

Private Sub Form_Load()

Label1.Caption = "Move"	' Move 方法的名稱。

End Sub

Private Sub Command1_Click()

If Command1.Left <> 0 Then

CallByName Command1, Label1.Caption, vbMethod, 0, 0

Else

CallByName Command1, Label1.Caption, vbMethod, 500, 500

End If


Resume

Resume 關鍵字用於：

On Error 陳述式

Resume 陳述式


Seek

Seek 關鍵字用於：

Seek 函數

Seek 陳述式


Set

Set 關鍵字用於：

Set 陳述式

Property Set 陳述式


Static

Static 關鍵字用於：

Function 陳述式

Property Get 陳述式

Property Let 陳述式

Property Set 陳述式

Static 陳述式

Sub 陳述式


Step

Step 關鍵字用於：

For...Next 陳述式

For Each...Next 陳述式


Optional

Optional 關鍵字用於：

Declare 陳述式

Function 陳述式

Property Get 陳述式

Property Let 陳述式

Property Set 陳述式

Sub 陳述式


ParamArray

ParamArray 關鍵字用於：

Declare 陳述式

Function 陳述式

Sub 陳述式


Print

Print 關鍵字用於：

Print 方法

Print # 陳述式


Private

Private 關鍵字用於：

Const 陳述式

Declare 陳述式

Enum 陳述式

Function 陳述式

Option Private 陳述式

Private 陳述式

Property Get 陳述式

Property Let 陳述式

Property Set 陳述式

Sub 陳述式

Type 陳述式


Property

Property 關鍵字用於：

Property Get 陳述式

Property Let 陳述式

Property Set 陳述式


Public

Public 關鍵字用於：

Const 陳述式

Declare 陳述式

Enum 陳述式

Event 陳述式

Function 陳述式

Property Get 陳述式

Property Let 陳述式

Property Set 陳述式

Public 陳述式

Sub 陳述式

Type 陳述式


As

As 關鍵字用於：

Const 陳述式

Declare 陳述式

Dim 陳述式

Function 陳述式

Name 陳述式

Open 陳述式

Private 陳述式

Property Get 陳述式

Property Let 陳述式

Property Set 陳述式

Public 陳述式

ReDim 陳述式

Static 陳述式Sub 陳述式

Type 陳述式


Binary

Binary 關鍵字用於：

Open 陳述式

Option Compare 陳述式


ByRef

ByRef 關鍵字用於：

Call 陳述式

Declare 陳述式

Function 陳述式

Property Get 陳述式

Property Let 陳述式

Property Set 陳述式

Sub 陳述式


ByVal

ByVal 關鍵字用於：

Call 陳述式

Declare 陳述式

Function 陳述式

Property Get 陳述式

Property Let 陳述式

Property Set 陳述式

Sub 陳述式


Date

Date 關鍵字用於：

Date 資料型態

Date 函數

Date 陳述式


Else

Else 關鍵字用於：

If...Then...Else 陳述式

Select Case 陳述式


Error

Error 關鍵字用於：

Error 函數

Error 陳述式

On Error 陳述式


For

For 關鍵字用於：

For...Next 陳述式

For Each...Next 陳述式

Open 陳述式


Get

Get 關鍵字用於：

Get 陳述式

Property Get 陳述式


Input

Input 關鍵字用於：

Input 函數

Input # 陳述式

Line Input # 陳述式

Open 陳述式


Is

Is 關鍵字用於：

If...Then...Else 陳述式

Is 運算子

Select Case 陳述式


Len

Len 關鍵字用於：

Len 函數

Open 陳述式


Let

Let 關鍵字用於：

Let 陳述式

Property Let 陳述式


Lock

Lock 關鍵字用於：

Lock、Unlock 陳述式

Open 陳述式


Mid

Mid 關鍵字用於：

Mid 函數

Mid 陳述式


New

New 關鍵字用於：

Dim 陳述式

Private 陳述式

Public 陳述式

Set 陳述式

Static 陳述式


Next

Next 關鍵字用於：

For...Next 陳述式

For Each...Next 陳述式

On Error 陳述式

Resume 陳述式


On

On 關鍵字用於：

On Error 陳述式

On...GoSub 陳述式

On...GoTo 陳述式


Option

Option 關鍵字用於：

Option Base 陳述式

Option Compare 陳述式

Option Explicit 陳述式

Option Private 陳述式


String

String 關鍵字用於：

String 資料型態

String 函數


Then

Then 關鍵字用於：

#If...Then...#Else 指令

If...Then...Else 陳述式


Time

Time 關鍵字用於：

Time 函數

Time 陳述式


To

To 關鍵字用於：

Dim 陳述式

For...Next 陳述式

Lock, Unlock 陳述式

Private 陳述式

Public 陳述式

ReDim 陳述式

Select Case 陳述式

Static 陳述式

Type 陳述式


WithEvents

WithEvents 關鍵字用於：

Dim 陳述式

Private 陳述式

Public 陳述式


文件規格

Visual Basic 文件均遵循以下編排規格：

規格	說明
Sub, If, ChDir, Print, True, Debug	第一個字母大寫的粗體字代表電腦語言的關鍵字。
Setup	操作指令以粗體字表示。
Object, varname, arglist	斜體的小寫字母表示您須提供的資訊。
pathname, filenumber	粗斜體的小寫字母表示引數，您可依其順序指定或使用指名引數語法。
[expressionlist]	用在語法說明中，括號中的項目代表選擇性的。
{While | Until}	用在語法說明中，代表可從括號中的項目選擇一個。您必須選擇一個，除非所有項目外層還有一個中括號，例如：
	[{This | OrThat}]
ESC, ENTER	代表按鍵名稱。
ALT+F1, CTRL+R	以加號 (+) 連接按鍵名稱代表組合鍵，例如，ALT+F1 表示按住 ALT 鍵，再按下 F1。
程式碼規格

使用下列程式碼規格:

程式碼範例	說明
MyString = "Hello, world!"	這種字型都用於程式碼、變數與錯誤訊息。
' This is a comment.	符號 (') 代表註解文字。
MyVar = "This is an " _ & "example" _ & " of how to continue code."	空白加底線 ( _) 可接續兩行以上的程式碼。


Caption Property


Enabled Property


Height Property


HelpContextID Property


Hide Method


Left Property


Move Method


Name Property


PrintForm Method


Show Method


StartUpPosition Property
StartUpPosition Method


Tag Property


Top Property


Visible Property


WhatsThisButton Property


WhatsThisHelp Property


WhatsThisMode Method


Width Property


Caption Property

jump


Enabled Property


Height Property


HelpContextID Property


Hide Method


Left Property


Move Method


Name Property


PrintForm Method


Show Method


StartUpPosition Property
StartUpPosition Method


Tag Property


Top Property


Visible Property


WhatsThisButton Property


WhatsThisHelp Property


WhatsThisMode Method


Width Property


Error 函數範例

本範例使用 Error 函數來顯示指定的錯誤代碼所代表之錯誤訊息。

Dim ErrorNumber

For ErrorNumber = 61 To 64	' 錯誤代碼從 61 到 64。

Debug.Print Error(ErrorNumber)	' 將錯誤訊息在「立即」視窗中顯示。

Next ErrorNumber


Error 陳述式範例

本範例使用 Error 陳述式來模擬發生錯誤代碼 11 的狀況。

On Error Resume Next	' 將錯誤處理的方式設為「繼續下一行」。

Error 11	' 模擬「除以零」的錯誤狀況。


On Error 陳述式範例

本範例先使用 On Error GoTo 陳述式在一個程序中指定錯誤處理的程式碼所在。範例中的錯誤狀況為「試圖刪除一已經開啟的檔案」，而產生的錯誤碼為 55。這個狀況將由範例中的錯誤處理程式碼來處理，處理完後，程式的執行步驟會回到發生錯誤的陳述式之處。若使用 On Error GoTo 0 陳述式則關閉錯誤處理程式，且然後使用 On Error Resume Next 陳述式來改變錯誤處理方式，以便在錯誤發生後繼續執行。請注意範例中使用 Err.Clear 在錯誤狀況處理完後，清除 Err 物件的屬性。

Sub OnErrorStatementDemo()

On Error GoTo ErrorHandler	' 開啟錯誤處理程式。

Open "TESTFILE" For Output As #1	' 開啟一個輸出檔。

Kill "TESTFILE"	' 試圖刪除已開啟的檔案。

On Error Goto 0	' 關閉錯誤處理程式。

On Error Resume Next	' 將錯誤處理的方式設為「繼續下一行」。

ObjectRef = GetObject("MyWord.Basic")	' 試圖啟動不存在

' 的物件

'檢查可能發生的 Automation 錯誤。

If Err.Number = 440 Or Err.Number = 432 Then

' 告訴使用者出了什麼事。然後清除 Err 物件。

Msg = "There was an error attempting to open the Automation object!"

MsgBox Msg, , "Deferred Error Test"

Err.Clear	' 清除 Err 物件。

End If

Exit Sub	' 離開程式，以避免進入錯誤處理程式。

ErrorHandler:	' 錯誤處理程式。

Select Case Err.Number	' 檢查錯誤代碼。

Case 55	' 發生「檔案已開啟」之錯誤。

Close #1	' 關閉已開啟之檔案。

Case Else

' 處理其它錯誤狀況 . . .

End Select

Resume	' 將程式執行步驟回到原發生錯誤的陳述式中。

End Sub


Resume 陳述式範例

本範例使用 Resume 陳述式來結束程序中的錯誤處理程式，並將程式執行步驟回到原發生錯誤的陳述式中。以產生錯誤代碼 55 的狀況來示範如何使用 Resume 陳述式。

Sub ResumeStatementDemo()

On Error GoTo ErrorHandler	' 開啟錯誤處理程式。

Open "TESTFILE" For Output As #1	' 開啟一個輸出檔。

Kill "TESTFILE"	' 試圖刪除已開啟的檔案。

Exit Sub	' 離開程式，以避免進入錯誤處理程式。

ErrorHandler:	' 錯誤處理程式。

Select Case Err.Number	' 檢查錯誤代碼。

Case 55	' 發生「檔案已開啟」之錯誤。

Close #1	' 關閉已開啟之檔案。

Case Else

' 處理其它錯誤狀況 . . .

End Select

Resume	' 將程式執行步驟回到原發生錯誤的陳述式中。

End Sub


Error 函數

��� [image] ���

傳回對應於指定錯誤代碼的錯誤訊息。

語法

Error[(errornumber)]

此選擇性的 errornumber 引數可以是任何正確的錯誤代碼。如果 errornumber 是一個正確的錯誤代碼，但尚未被定義，Error 將會傳回「應用程式或物件定義錯誤。」。如果 errornumber 不正確，就會發生錯誤。如果省略 errornumber，就會傳回對應於最近執行階段錯誤的訊息。如果沒有發生任何執行階段錯誤，或是 errornumber 是 0，Error 會傳回一個長度為零的字串("")。

請注意

請檢查 Err 物件的屬性設定，以便確認最近的執行階段錯誤。Error 函數的傳回值符合 Err 物件的 Description 屬性。


Error 陳述式

��� [image] ���

模擬錯誤的發生。

語法

Error errornumber

errornumber 是必要的，且可以是任何正確的錯誤代碼。

請注意

Error 陳述式支援backward compatibility。在新的程式裏，特別是當建立一個新物件的時候，請使用 Err 物件的 Raise 方法來產生執行階段錯誤。

如果 errornumber 已經定義，那麼 Error 陳述式會在 Err 物件的屬性被指定為下列值之後，呼叫錯誤處理程式。

屬性	值
Number	當作傳給 Error 陳述式的引數。可以是任何正確的錯誤代碼。
Source	目前的 Visual Basic 專案名稱。
Description	字串運算式，如果此字串存在，會符合 Error 函數對指定 Number 的傳回值。如果此字串不存在，Description 會是一個長度為零的字串("")。
HelpFile	Visual Basic 說明檔案所在位置的完整磁碟機、路徑、和檔案名稱。
HelpContext	在 Visual Basic 說明檔案裏，對應於 Number 屬性所指錯誤的內容ID。
LastDLLError	零。
如果沒有任何錯誤處理程式，或是都沒有啟動，那麼就會從 Err 物件屬性產生並顯示一個錯誤訊息。

附註   並非所有的 Visual Basic 主應用程式都可以建立物件。請參考您的主應用程式說明文件來判斷是否它能建立物件類別和物件。


On Error 陳述式

��� [image] ���

啟動一個錯誤處理常式，且指定此常式在一個程序裏的位置。也可用來停止一個錯誤處理常式。

語法

On Error GoTo line

On Error Resume Next

On Error GoTo 0

On Error 陳述式的語法可以是下列任何一種形式：

陳述式	描述
On Error GoTo line	啟動錯誤處理常式。且此常式的開始位置由 line 引數指定。此line引數是必要的而且是任何行標記或是行號。如果發生一個執行階段錯誤，程式控制會跳到 line 的位置，使錯誤處理程式開始動作。指定的 line 必須是和 On Error 陳述式在同一個程序裏。 否則，會發生編譯階段錯誤。
On Error Resume Next	表示當一個執行階段錯誤產生時，程式控制立刻到發生錯誤陳述式接下去的陳述式，而繼續執行下去。當使用一個物件的時候，請使用這個陳述式，而不要使用 On Error GoTo。
On Error GoTo 0	停止現在程序裏任何已啟動的錯誤處理程式。
請注意

如果您不使用 On Error 陳述式，任何執行階段之錯誤都是嚴重的，結果會導致顯示錯誤訊息，並且中止執行。

一個「啟動的」錯誤處理程式是由 On Error 陳述式所打開的；一個「動作中」的錯誤處理程式是一個已啟動的錯誤處理程式正在處理錯誤。如果錯誤處理程式在動作中又發生了錯誤，(在錯誤發生和 Resume，Exit Sub，Exit Function，或 Exit Property 陳述式之間)，那麼現在此程序的錯誤處理程式將無法再處理此錯誤。程式控制將會轉回原來呼叫此程序的程序。如果此呼叫程序有一個已啟動的錯誤處理程式，它將會被運用來處理此錯誤。如果此呼叫程序的錯誤處理程式也正在動作中，程式控制將會再往回傳到更先前的呼叫程式，直到碰到一個被啟動但未在動作中的錯誤處理程式為止。如果還是沒有被啟動但未動作的錯誤處理程式，那麼在錯誤實際發生的點上，程式會終止。每當錯誤處理程式將程式控制傳回呼叫的程序，該程序就成為目前的程序。在任何程序中，只要錯誤被錯誤處理程式處理完畢，那麼目前的程序將從 Resume 陳述式所指定的位置恢復執行。

附註   一個錯誤處理常式不是 Sub 程序或 Function 程序。它是一段以行標記或行號所標示的程式碼。

錯誤處理常式依賴 Err 物件的 Number 屬性來判斷發生錯誤的原因。錯誤處理常式應該在其它錯誤發生之前，或是執行一個可能發生錯誤的程序之前，先測試或儲存 Err 物件中相關的屬性值。Err 物件中的屬性值只反應最近發生的錯誤。有關 Err.Number 的錯誤訊息存放在 Err.Description 裏。

On Error Resume Next 會使程式從接著發生錯誤陳述式之後的陳述式繼續執行。或是從接著含有 On Error Resume Next 陳述式之程序的陳述式繼續執行。這個陳述式可以使程式不管執行階段錯誤而繼續執行下去。您可以將錯誤處理常式放在錯誤會發生的地方，而不必另放在同一程序裏的其它位置。當另一個程序被呼叫的時候，On Error Resume Next 不會發生作用。所以如果您希望常式裏有自建錯誤處理常式，您應該在每個呼叫的常式裏執行 On Error Resume Next 陳述式。

附註   在處理關於物件的錯誤時，On Error Resume Next 指令比 On Error GoTo 更好。每當運用物件的時候，檢查 Err 可以消除不知道程式碼在使用那一個物件的疑慮。您可以確定是那個物件將錯誤代碼放在 Err.Number 中，就如同可以確定是那個物件產生錯誤(Err.Source 中所表示的物件)。

On Error GoTo 0 取消目前程序裏的錯誤處理。它並不是表示處理錯誤的程式碼從行號 0 開始，就算程式裏真的有 0 行號也一樣。如果沒有 On Error GoTo 0 陳述式，當程序結束的時候，錯誤處理程式就自動關閉。

為了防止錯誤沒發生的時候，錯誤處理程式碼也被執行，請在錯誤處理常式之前立即放上 Exit Sub，Exit Function，或 Exit Property 陳述式，就像下列程式片段一樣：

Sub InitializeMatrix(Var1, Var2, Var3, Var4)

On Error GoTo ErrorHandler

. . .

Exit Sub

ErrorHandler:

. . .

Resume Next

End Sub

在上面，錯誤處理程式碼跟在 Exit Sub 陳述式 之後，而且在 End Sub 陳述式之前，以便和程序裏的流程分開。錯誤處理程式碼可以放在程序裏的任何位置。

檔案執行時，所有未被捕抓的錯誤都被傳回控制應用程式。在程式開發環境時，必須設定正確的選項，未被捕抓的錯誤才會被傳回控制應用程式。請參考您的主應用程式說明文件以便得知除錯時有那些選項應該被設定、如何設定，以及是否能建立物件類別。

如果您建立一個物件，而且它會運用到其它物件，那麼您必須試著去處理從那些物件傳回的未處理錯誤。如果您沒辦法處理這種錯誤，請將 Err.Number 中的錯誤代碼當作您的錯誤代碼，然後將錯誤代碼傳回給呼叫您物件的呼叫者。您應該將您的錯誤代碼加入 vbObjectError 常數，以指定您的錯誤。舉例來說，如果您的錯誤代碼是 1052，使用如下的方法來指定：

Err.Number = vbObjectError + 1052

附註   當呼叫動態連結程式庫 (DLL)  Macintosh 程式碼資源。所產生的系統錯誤，並不會引起例外情況，而且無法被 Visual Basic 捕抓錯誤所捕抓。當呼叫 DLL 函數時，您應該每次都檢查傳回值以確定是成功或失敗 (根據 API 的特性)。而且在失敗的時候，檢查 Err 物件的 LastDLLError 屬性。在 Macintosh 上 LastDLLError 總是傳回 0。


Resume 陳述式

��� [image] ���

在錯誤處理常式結束後，恢復原有的執行。

語法

Resume [0]

Resume Next

Resume line

Resume 陳述式的語法可以是下列任一種形式：

陳述式	描述
Resume	如果錯誤和錯誤處理程式發生在同一個程序裏，會從發生錯誤的陳述式恢復執行。如果錯誤是在被呼叫的程序裏發生，那麼會從之前呼叫的程序中，最近一個有錯誤處理常式之程序裏的呼叫陳述式之處開始恢復執行。
Resume Next	如果錯誤和錯誤處理程式發生在同一個程序裏，會從接著發生錯誤陳述式的下個陳述式開始執行。如果錯誤發生在被呼叫的程序裏，那麼會從之前呼叫的程序中，最近一個有錯誤處理常式(或 On Error Resume Next 陳述式)之程序裏呼叫陳述式的下一個陳述式之處開始恢復執行。
Resume line	執行從 line 處恢復執行。line 是由必要的 line 引數所指定的。line 引數是行標記或行號，而且必須和錯誤處理程式在同一個程序裏。
請注意

如果您不在錯誤處理常式裏使用 Resume 陳述式，而在其它的地方使用，就會發生錯誤。


# Else 子句之前須有 # If

���

#Else 是一個條件式編譯指令。這個錯誤的起因與解決方法如下所示：

•	#Else 之前沒有相對應的 #If 或 #ElseIf 子句。

請檢查 #Else 之前的 #If 是否已使用 #End If 終止，在一個 #If 區塊中只能有一個 #Else，若使用連續的兩個 #Else 子句就會造成此錯誤。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


# ElseIf、# Else 或 # EndIf 之前須有 # If 子句

���

#Else If、#Else，與 #End If 都是條件式編譯指令。這個錯誤的起因與解決方法如下所示：

•	#Else If、#Else，或 #End If 之前沒有相對應的 #If 子句。

請檢查 #If 是否屬於另一個區塊，或者 #If 之前有一個數字符號 (#)。若都不是，請確定將 #If 擺在適當的位置。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


# ElseIf 之前必須有 # If 或 # ElseIf，且其後必須有 # Else 或 # EndIf

���

#ElseIf 是一個條件式編譯指令。這個錯誤的起因與解決方法如下所示：

•	#ElseIf 之前沒有相對應的 #If 或 #ElseIf 子句。

將 #If 陳述式擺在 #ElseIf 之前，或移除多餘的 #End If。

•	#ElseIf 之前有 #Else 或 #End If 子句。

結束前一個 #If 區塊，或將前一個 #Else 改成 #ElseIf。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


相容的 ActiveX 元件必須是 Visual Basic 執行檔或 DLL

相容 ActiveX 元件必須是以 Visual Basic 建立的。這個錯誤的起因與解決方法如下所示：

•	Visual Basic 試圖存取一個您指定為相容 ActiveX 原件的物件，但該檔案不是使用 Visual Basic 建立的可執行檔或動態連結程式庫 (DLL)。

在「專案」功能表的「專案屬性」對話方塊中，「相容 ActiveX 元件」欄位必須是以 Visual Basic 建立的可執行檔與 DLL 檔案。您可先載入專案到 Visual Basic 中，並選取「檔案」功能表的「製成執行檔」指令，來建立 Visual Basic 可執行檔。若該檔案已是執行檔，但不是以 Visual Basic 所建立的，或者該檔案無法載入到 Visual Basic，請參考其說明文件，看看能否將其轉成 Visual Basic 執行檔，還是該協力廠商可以提供 Visual Basic 版本的執行檔。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


增益功能無法引用專案

專案是動態的；而增益功能是靜態的。這個錯誤的起因與解決方法如下所示：

•	您試圖使用一個引用到其它專案的專案，來建立增益功能。

專案有可能因其所引用的另一個專案改變，而跟著受影響。因此，您無法以一個引用到其他專案的專案，來建立增益功能。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


模組的型態不正確

���

一般模組不能做為物件類別。這個錯誤的起因與解決方法如下所示：

•	您將一般模組的名稱使用在 Dim 或 Set 宣告中。

請檢查模組名稱的拼字，並確定其是對應到表單、MDI 表單，或物件類別模組。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


具有 ParamArray 引數的程序不能以指名引數呼叫

���

呼叫一個程序時，ParamArray 中定義的所有引數都必須是依照次序的。這個錯誤的起因與解決方法如下所示：

•	指明引數的語法用於程序呼叫中。

指名引數的語法不可用在像 ParamArray 那樣位置唯一的引數上。若要忽略 ParamArray 中的某些部分，請在要省略的引數位置上使用逗號作為區隔。例如，在下面的呼叫中，假如 ParamArray 引數從 Arg2 之後開始，則只有傳遞 ParamArray 中第一個、第三個和第六個值：

MySub Arg1, Arg2, 7,, 44,,,3

附註 ParamArray 是代表引數清單中最後的項目。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


發現不確定的名稱

���

識別項與另一個識別項或必須的修飾詞相衝。這個錯誤的起因與解決方法如下所示：

•	在相同有效範圍內，有超過一個以上的物件，其元件以相同的名稱命名。

您可使用物件名稱加上句點來修飾此元件，例如：

object.property

模組層次識別項與專案層次識別項 ( 模組名稱與引用專案名稱 ) 可在一個程序中重複使用，雖然這可能會使得程式較難以維護與偵錯。然而，假如您想要引用兩個都在同一程序中的項目時，就必須對有效範圍較廣的項目加以修飾。例如，MyID 被宣告於 MyModule 的模組層次中，而接著有一個程序層次的變數，被以相同的名稱宣告於此模組中，此時就必須以適當地修飾來引用此模組層次變數：

Dim MyID As String

0	Sub MySub

1	MyModule.MyID = "This is module-level variable"

2	Dim MyID As String

3	MyID = "This is the procedure-level variable"

4	Debug.Print MyID

5	Debug.Print MyModule.MyID

6	End Sub

•	一個宣告於模組層次的識別項可能會與程序名稱相衝。例如，假如變數 MyID 被宣告於模組層次中，之後當又以相同的名稱定義一個程序時，就會發生這樣的錯誤：

Public MyID

0	Sub MyID

1	. . .

2	End Sub

在這個例子中，您必須改變其中一個名稱，因為以一個共用的模組名稱來修改，並無法解決這個問題。請注意程序名稱預設為 Public；而變數名稱為 Private，除非特別指定為 Public.

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


AppleScript 錯誤

���

處理 script 期間發生錯誤。這個錯誤的起因與解決方法如下所示：

•	這個錯誤可能與目的應用程式有關。

請檢查 script 中的識別項是否與應用程式中的相符。

•	此錯誤可能與 AppleScript 有關。

請確定您使用的是否為正確的 AppleScript 語法。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


應用程式或物件定義上的錯誤

���

這個訊息發生的時機是在，以 Raise 方法產生錯誤，或者是 Error 陳述式不符合 Visual Basic for Applications 所定義的錯誤。若 Error 函數的引數不符合 Visual Basic for Applications 所定義的錯誤，也會出現此訊息。這可能是您自訂的錯誤，或者是由物件所定義的，包括主應用程式，如 Microsoft Excel、Visual Basic 等等。例如，Visual Basic 表單所產生的一些表單相關錯誤，其無法由程式中單純的指定一個代碼，做為 Raise 方法或 Error 陳述式的引數。這個錯誤具有以下的起因與解決方法：

•	應用程式執行了一個 Err.Raise n 或 Error n 陳述式，但代碼 n 並非由 Visual Basic for Applications 所定義的。

您必須使用 Err.Raise 並指定其它的引數，如此使用者才能了解錯誤的本質。例如：您可加入一個說明字串或資訊。若重新產生一個錯誤前，不執行 Err.Clear，則此步驟是有效的。若先執行了 Err.Clear，您就必須先在 Raise 方法前填入其它的引數。請檢查錯誤發生的情況，並確定您正在重新產生相同的錯誤。

•	有可能從其它應用程式中存取物件時，錯誤傳回到您的程式中，而此錯誤不是 Visual Basic 所能偵測到的。

請檢查該物件的說明文件。Err 物件的 Source 屬性應該含有錯誤來源之應用程式或物件的程式識別碼。若要了解此錯誤的內容，您最好在存取物件的程式碼中使用 On Error Resume Next 結構，而不要使用 On Error GoTo line 語法。

附註 在過去，程式設計者常會使用一個迴圈，來列印出所有可處理錯誤 (trappable error) 的訊息清單。一般的作法如下：

For index = 1 to 500

0	Debug.Print Error$(index)

1	Next index

這段程式碼仍可列出 Visual Basic for Applications 的錯誤訊息，但會顯示「應用程式或物件定義的錯誤」。例如 Visual Basic 中，與表單、控制項等有關，這些有許多是可處理的執行階段錯誤。您可使用說明檔中的「索引」對話方塊來找出主應用程式所指定的錯誤，方法是按下「索引」，在文字方塊中輸入「可處理」，並按下「顯示主題」，接者選取「可處理的錯誤」，最後選擇「顯示」。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


Property Let 或 Property Set 必須有引數

���

Property Let 與 Property Set 程序的目的在於設定一個新值給一個屬性。這個錯誤的起因與解決方法如下所示：

•	在設定屬性時，值並非出現在右邊。

將值放於用來設定屬性的運算式的右邊。

•	在此程序的定義中，被定義用來接受運算式右邊所傳遞值的參數遺失或放錯位置了。

請為該程序定義的值引數列指定一個參數。假如程序使用超過一個以上的引數，則屬性值參數在引數列中必須最後一個出現。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


已宣告過陣列的維數

���

靜態陣列只能夠設定一次維數。這個錯誤的起因與解決方法如下所示：

•	您試圖使用 ReDim 陳述式來改變一個靜態陣列的維數，只有動態陣列的維數能夠改變。

若不放棄重新設定維數，就只能使用動態陣列。要定義動態陣列，可使用 Dim、Public、Private，或 Static 陳述式，定義一個動態陣列。例如：

Dim MyArray()

再程序中，您可用 ReDim 或 Static 陳述式，並以變數指定元素的個數，來定義動態陣列：

ReDim MyArray(n)

•	在設定陣列的維數後，會產生一個 Option Base。

注意 Option Base 陳述式需放在所有陣列之前。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須用 ByRef 來使用陣列引數

���

以 Dim、ReDim，或 Static 宣告的陣列，無法以 ByVal 的方式傳遞。這個錯誤的起因與解決方法如下所示：

•	您試圖以 ByVal 的方式傳遞整個陣列。

陣列中個別的元件可以使用 ByVal (傳值) 的方式被傳遞，但整個陣列則必須以 ByRef (引用) 的方式被傳遞。請注意 ByRef 為預設值。假如您有一個陣列必須以 ByVal 傳遞，而您之所以這麼做，是為了預防陣列中的元件在返回呼叫者時被改變掉，您可以將此陣列中的元件引數一個個傳遞過去，或是將它放在一個 Variant 變數中，再將此 Variant 傳遞至 ByVal 參數，如下所示：

Dim MyVar As Variant

0	MyVar = OldArray()

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


已到達搜尋範圍的起始處；您要從結尾處繼續搜尋嗎？

0	搜尋並未成功。這個狀況的起因與解決方法如下：

•	往上搜尋已達指定範圍的最前端。

您可由指定範圍最底端再重新搜尋，或乾脆取消並重新設定範圍。


有 If，卻沒有 End If

���

因為不完整的運算所造成的錯誤。這個錯誤的起因與解決方法如下所示：

•	使用 If 陳述式時，欠缺對應的 End If 陳述式。

If 陳述式必須有對應的 End If 陳述式。對巢狀 If...End If 陳述式而言，您得確定 If...End If 中的 If...End If 結構是完整的。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


此行不能是中斷點

���

中斷點 只能放置於陳述式中正確的部份。這個錯誤的起因如下：

•	您試著在一個不能接受中斷點的行上放置中斷點，例如，下列情形之一：

•	該行只包含註解。

•	該行只包含行標籤。

•	該行只包含宣告 (Const、Dim、Static、Type，等等)。

•	在隱藏模組中的任一行。

•	在「即時運算」視窗中的任一行。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


ByRef 引數型態不符合

���

一個以 ByRef (引用) 方式傳遞的引數，必須具有該程序所允許的正確資料型態。這個錯誤的起因與解決方法如下所示：

•	您傳遞一個引數，其型態無法被強迫轉成所需的型態。

例如，假如被預期的是 Long，而您卻傳遞一個 Integer 變數，這就會產生錯誤。假如您想要避免發生這種情形，可以將引數放在括弧中來傳遞。例如，若要傳遞 Variant 引數至一個必須是 Integer 引數的程序，您可撰寫以下的呼叫：

Dim MyVar

0	MyVar = 3.1415

1	Call SomeSub((MyVar))

2	Sub SomeSub (MyNum As Integer)

3	MyNum = MyNum + MyNum

4	End Sub

您可將引數放在括弧中，強調其為一個運算式。在此期間，數字的小數部份會被四捨五入 (並非被截斷)，使它符合所預期的引數型態。此求值式的結果會被放在一個暫存區，而該程序會收到該暫存區的位址。因此，原來的 MyVar 會保留其值。

附註 假如您不指定變數型態，則此變數會以預設的型態 (Variant) 被接收。這並不一定是明顯的。例如，下列的程式碼宣告兩個變數，第一個變數 MyVar 是一個 Variant；而第二個變數 AnotherVar 是一個 Integer。

Dim MyVar, AnotherVar As Integer

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


Visual Basic 不支援此呼叫規格

Visual Basic 不支援那些引數須依特定順序傳遞，且須指定引數型態的程序呼叫規格。這個錯誤的起因與解決方法如下所示：

•	使用 Visual Basic 不支援的呼叫規格呼叫此程序。例如，Visual Basic 不支援 16 位元 Microsoft Windows 環境下的 Pascal 呼叫規格。

若 Visual Basic 不支援此呼叫規格，就無法從 Visual Basic 中呼叫此程序。請檢查物件的說明文件，看看是否還有其它方法可循。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


無法引用所指定的檔案

Visual Basic 並不見得可以存取所有的物件程式庫或型態資料庫。這個錯誤的起因與解決方法如下所示：

•	您試圖以「新增引用」對話方塊，來新增一個 Visual Basic 無法存取的物件引用。

請檢查該物件的說明文件，看看有 that Visual Basic 可使用的形式。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


無法指定至陣列

���

陣列中的各元素，必須個別指定其值。這個錯誤的起因與解決方法如下所示：

•	您試圖將一個值指定給一個陣列變數，但沒有指定要將這個值指定給哪個元素。

要設定一個陣列中的元素，您就必須指定此元素的註標。例如，若 MyArray 為一個整數陣列，則運算式 MyArray = 5 是不正確的，下列的運算式才是正確的：

MyArray(UBound(MyArray)) = 5

•	您試著將整個陣列指定給另一個陣列。例如，假如 Arr1 是一個陣列，Arr2 是另一個陣列，則下列兩個指定式就都是不正確的：

Arr1 = Arr2	' 不正確的指定式。

0	Arr1() = Arr2()	' 不正確的指定式。

想要將一個陣列指定給另一個陣列，請確定此指定左邊的陣列是可調整大小的，且陣列的型態符合。

備註  您可以將整個陣列放在一個 Variant 中，使一個 variant 變數包含整個陣列：

Dim MyArr As Variant

0	MyVar = Arr2()

您可以使用與正常陣列相同的註標，來引用在 variant 中的陣列元素，例如：

MyVar(3) = MyVar(1) + MyVar(5)

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不能改變陣列元素的資料型態

���

ReDim 只能被用來改變陣列中元素的數目。這個錯誤的起因與解決方法如下所示：

•	您試著使用 ReDim 重新宣告陣列的資料型態。

請宣告一個您所要之資料型態的新陣列，然後使用轉換函數將原來陣列中的各元素，指定給新陣列中對應的元素。

0	您也可以將此陣列放在一個 Variant 變數中。這可以用一個簡單的指定式來完成：

Dim MyVar As Variant

0	MyVar = MyIntegerArray()

這將建立一個包含與原來陣列型態相同之陣列的 Variant。然後您可以指定任何正確 VarType 的變數至 variant 中的陣列元素。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


無法在物件模組中定義 Public 使用者自訂型態
無法在私有物件模組中定義 KWID_tkPUBLIC 使用者自訂型態

���

物件模組中的使用者自訂型態不能為 Public。這個錯誤的起因與解決方法如下所示：

•	您試圖在一個物件模組中定義 Public 使用者自訂型態。

將使用者自訂型態的定義移到一個一般模組中，並在物件模組或其它模組中，宣告該型態的變數。若您只是要在其它模組中使用該型態，您可以在物件模組中放入 Type...End Type 定義，並在定義之前加上 Private 關鍵字。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


無法顯示隱藏的程序

在隱藏模組中的任何東西都是隱藏的。這個錯誤的起因與解決方法如下所示：

•	您試圖檢視隱藏模組中的程序。

請先將此模組改為非隱藏的，才能檢視。假如您要檢視隱藏程序中產生錯誤的那一行，請再執行一次 (將此模組改為非隱藏後) 程式，以便檢視錯誤。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


無法編輯模組

模組可以檢視，卻不能夠編輯。這個錯誤的起因與解決方法如下所示：

•	您試圖編輯一個受保護的模組。

請移除保護再重試一遍。在大部分的情況下，此錯誤的發生原因是，已安裝 Visual SourceSafe 增益功能而且未取出此檔案。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


此時無法進入中斷模式

���

中斷模式下，程式仍然在執行，但是其行動已被擱置。這個錯誤的起因與解決方法如下所示：

•	您試圖進入中斷模式，例如，按下 CTRL+BREAK (Windows) 或 COMMAND+PERIOD (Macintosh)，在「一般」或「偵錯」工具列按下「中斷」按鈕，或執行到一個中斷點。

專案中由於使用延伸性 (增益功能) 物件模型可造成此一改變。這會避免程式被擱置，您可以繼續執行，或結束執行，但無法擱置執行。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


無法在設計模式立即執行陳述式

設計階段中，您的程式碼並沒有在執行中，或者被擱置並等待執行。這個錯誤的起因與解決方法如下所示：

•	您試圖在「即時運算」視窗執行一段陳述式，但程式碼並非處於執行模式。

請啟動程式碼，並執行擱置的程式。您可以在「即時運算」視窗執行程式。

詳細資訊，請將指標指到「即時運算」視窗，並按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


找不到專案或程式庫

在解決遺失引用的問題前，無法執行程式碼。這個錯誤的起因與解決方法如下所示：

•	找不到引用的專案，或引用之專案相對語言的物件程式庫。

請在「設定引用項目」對話方塊中解決此問題，選取遺失的引用，以顯示專案或程式庫的路徑或版本。以下是解決此問題的步驟：

要解決引用的問題

1.	顯示「設定引用項目」對話方塊。

0	2.	選取遺失的引用。

1	3.	啟動物件瀏覽。

2	4.	使用「瀏覽」對話方塊以找尋遺失的引用。

3	5.	按下「確定」。

4	6.	重複以上步驟，執行找出所有問題為止。

5	當您找到一個遺失的項目時，就會重新建立連結。若引用專案的檔案名稱已經改變，就會加入新的引用，並移除舊的引用。

6	請移除那些不必要的引用，您只需清除該引用的核取方塊即可。請注意，Visual Basic 物件程式庫與主應用程式的物件程式庫是不能移除的.

7	應用程式可以支援其不同語言版本的物件程式庫。要了解所需的語言版本，可按下該引用，檢查對話方塊下方的語言。

8	物件程式庫可以是副檔名為 .OLB的檔案，或者整合在一個動態連結程式庫 (DLL)，在每一個平臺上，物件程式庫存在不同的版本。因此，當專案被移植到另一個平臺上時，被引用的程式庫 (屬於該平臺) 的正確語言版本必定可以在您應用程式說明文件所指定的位置被使用。

物件程式庫的檔案名稱通常以下面的方式命名：

•	Windows (3.1 版與之前)：應用程式代碼 + 語言程式碼 + [版本].OLB。例如：

VAFR2.OLB 會是法文的 Visual Basic for applications，版本 2 的物件程式庫。

0	XLFR50.OLB 會是法文的 Microsoft Excel 5.0 的物件程式庫。

•	Macintosh：應用程式代碼+ [版本].OLB。例如：

VA FR 2 OLB 會是法文的 Visual Basic for applications，版本 2 的物件程式庫。

0	MS Excel FR 50 OLB 會是法文的 Microsoft Excel 5.0 的物件程式庫。

假如您無法在您的系統上找到錯誤的程式庫，可接洽引用專案的作者。若這個錯誤的程式庫是一個 Microsoft 應用程式的物件程式庫時，您可以用下面的方式取得：

•	假如您有 Microsoft electronic technical support services 的存取權，請參閱此線上說明的技術支援小節。在電子服務下，您將會發現如何使用適當的服務選項的介紹。

•	假如您沒有 Microsoft electronic technical support services 的存取權，可參考此 Microsoft 物件程式庫所在之應用程式的附註。關於如何接觸您當地的 Microsoft 產品支援組織的資訊，也能夠在這個線上說明檔案的技術支援小節中找到。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


無法 Get 或 Put 下列兩種變數：物件引用變數，或含有物件引用的使用者自訂型態的變數

���

一個物件引用是暫時的，並且很容易在關閉與開啟檔案間變成不正確的。這個錯誤的起因與解決方法如下所示：

•	在您的 Get 或 Put 陳述式中的變數包含，或被宣告為包含一個物件的引用。

假如此變數是一個物件的引用，您便不能以 Get 和 Put 陳述式使用它。假如您有意要放置檔案中物件的所有屬性值，每一個屬性必須被個別地指定。

•	在您的 Get 或 Put 陳述式中的使用者自訂型態變數包含一個為物件引用的元件。

假如變數的 Type 陳述式包含一個代表物件的元件 (例如，它在一個物件類別模組中被定義，具有 Object 資料型態，是一個表單或控制項等等) 請從定義中將它刪除，或者定義一個為了 Get 和 Put 陳述式使用的新型態，在該型態的定義中沒有 Object 型態的元件。

0	假如您有 Variant 型態的使用者自訂型態的元件，請確定沒有物件引用將被傳遞至該元件。一個 Variant 可以接受這樣的一個指定式，但假如其使用者自訂型態在 Get 或 Put 中被使用，將會造成這個錯誤。

1	請注意，您可以使用 Input #、Line Input #、Print # 或 Write #，將一個物件的預設屬性寫入磁碟。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


無法載入模組；不正確的格式

模組必須是文字的格式。這個錯誤的起因與解決方法如下所示：

•	您試圖載入一個二進位格式的檔案作為模組。

某些 Visual Basic 的版本允許您以二進位與文字的格式來儲存檔案。假如可能的話，請以它最後一次被儲存的格式來重新載入，並將它儲存為文字格式。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


無法指定唯讀屬性

���

某些屬性無法接受指定。這個錯誤的起因與解決方法如下所示：

•	您試圖指定一個值給屬性，但其無法接受。

在某些情況下，屬性只有在某些時候可接受指定。例如，屬性可在設計階段接受指定，但不能在執行階段。請參考該屬性的線上說明。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


因模組被隱藏了，所以無法執行要求的動作

���

這個錯誤來自於 Visual Basic 延伸性 (增益功能) 物件模型。這個錯誤的起因與解決方法如下所示：

•	此模組是隱藏的。您無法修改一個隱藏的模組，或從中取得資訊。

請顯示此模組，並重新處理。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


無法在陣列中放置條件中斷點

���

陣列沒有相關的單一值。這個錯誤的起因與解決方法如下所示：

•	您試圖設定一個條件式中斷點 (或稱為監看點)，當整個陣列的值改變時，擱置程式的執行。

將條件式中斷點設在陣列中的某個元素。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


無法紀錄到執行中的模組

您必須停止執行，才能記錄。這個錯誤的起因與解決方法如下所示：

•	您試圖在執行模組時記錄。

按下 CTRL+BREAK (Windows) 或 COMMAND+PERIOD (Macintosh) 停止執行，再開始記錄。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


無法移除預設的引用

���

預設的引用必須存在。這個錯誤的起因與解決方法如下所示：

•	您試圖移除一個預設的引用。例如，型態程式庫或物件程式庫引用。

請勿試圖移除這些引用。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


Case Else 在 Select Case 之外

���

Case Else 陳述式只能用在 Select Case 與 End Select 之間。這個錯誤的起因與解決方法如下所示：

•	將 Case Else 放在 Select Case...End Select 區塊以外。

請將 Case Else 陳述式移到 Select Case...End Select 區塊中。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


有 Case，卻沒有 Select Case

���

Case 陳述式必須出現在 Select Case...End Select Block 區塊之中。這個錯誤的起因與解決方法如下所示：

•	Case 陳述式沒有與前面的 Select Case 陳述式配合使用。

請檢查 Select Case...Case 結構中其它的控制項結構，並且查證它們被正確地配對。例如，Select Case...End Select 結構中的一個 If 沒有與 End If 配合使用，就會發生這個錯誤。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


模組間有循環依存的情況

���

在模組、常數，與使用者自訂型態之間，循環引用是不允許的。這個錯誤的起因與解決方法如下所示：

•	模組中的一個使用者自訂型態或常數引用第二個模組中的使用者自訂型態或常數，而此使用者自訂型態或常數又引用第一個模組中的使用者自訂型態或常數。

請移除這些引用。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


物件類別必須處理有關介面的所有程序
物件模組必須處理有關介面的所有程序

���

介面是未處理程序的集合。這個錯誤的起因與解決方法如下所示：

•	您在 Implements 陳述式中指定了一個介面，但您並未在介面中的所有程序加入程式碼。

您必須為介面中所有指定的程序撰寫程式碼。可以有空的程序，此程序會執行必要的行為。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


程式碼的執行已被中斷

程式碼的執行可以在需要時被暫停。這個錯誤的起因與解決方法如下所示：

•	遇到 CTRL+BREAK (Microsoft Windows),、ESC (Microsoft Excel) 或 COMMAND+PERIOD (Macintosh) 組合鍵。

請從對話方塊中，選取「偵錯」以進入中斷模式，「繼續」重新開始，或選取「結束」停止執行。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


編譯錯誤發生於此隱藏模組 <模組名稱>

無法顯示被保護的模組。這個錯誤的起因與解決方法如下所示：

•	指定模組的程式碼有一個編譯錯誤，但它無法被顯示，因為該專案是被保護的。

請將該專案設定成非保護的，然後再次執行程式碼查看錯誤。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是常數運算式

���

常數需初始化。這個錯誤的起因與解決方法如下所示：

•	您試圖以一個變數、使用者自訂型態的執行個體、物件或函數呼叫的傳回值來初始一個常數。

請以純文字、先前宣告的常數或被運算子 (預期 Is 邏輯運算子) 加入的純文字與常數來初始常數。

•	您試圖使用一個變數宣告一個陣列，來指定元素的編號。

想要在一個程序中宣告一個動態陣列，請以 ReDim 宣告此陣列並使用一個變數來指定元素的編號。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


物件類別模組中的 Public 成員不可以是：常數，固定長度的字串，陣列或 Declare 陳述式
物件類別模組中的 Public 成員不可以是：常數、固定長度的字串、使用者定義型態、陣列或 Declare 陳述式

���

並非所有物件模組中的變數都可宣告成 Public。然而，程序在預設上是 Public，且 Property 程序在語法結構上可比照變數。這個錯誤的起因與解決方法如下所示：

•	您在物件模組中宣告了一個 Public 常數。

雖然您不能在物件模組中宣告 Public 常數，但您可以相同名稱建立一個Property Get 程序。若您不以相同名稱建立一個 Property Let 或 Property Set 程序，您實際上將建立一個唯讀屬性，其用法與常數相同。

•	您在物件模組中宣告了一個 Public 型態的固定長度字串。

您可用 Property 程序模擬固定長度字串，並截掉超出長度的字串資料，或提示使用者超出長度。

•	您在物件模組中宣告了一個 Public 陣列。

雖然程序不能傳回陣列，但可傳回一個包含陣列的 Variant。要再物件類別模組中模擬一個 Public 陣列，可使用一組可接受與傳回包含陣列之 Variant 的 Property 程序。

•	您在物件模組中放了一個 Declare 陳述式。

Declare 陳述式都是公用的，您可在 Declare 陳述式之前加上一個 Private 關鍵字。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


目前模組不支援 Print 方法

���

並非所有的方法與屬性都適用於所有的模組。這個錯誤的起因與解決方法如下所示：

•	您試著在不能顯示任何東西的物件上使用 Print 方法。例如，您不能不加修飾地使用 Print 方法在一個一般模組中。

請移除 Print 方法的引用，或以一個適合的物件修飾它。例如，以 Debug 物件修飾它，以便偵錯階段在「即時運算」視窗中顯示它的引數。

•	您試著使用 Line、Circle、PSet 或 Scale 方法在無法接受它們的物件上。例如，它們不能不加修飾地出現在一般模組或 OLE Automation 物件類別模組中。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


專案不可循環引用

專案間的循環引用是不被允許的。例如，假如 MyProj 引用 YourProj，則 YourProj (或一個引用 YourProj 的專案) 不能引用 MyProj。這個錯誤的起因與解決方法如下所示：

•	您試著加入一個引用至已經為專案之一部份的專案。

請移除循環的引用。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


對於同一個屬性所定義的屬性程序有不一致的情形；或者是這些程序中有選擇性 (optional) 的參數或 ParamArray

���

在一個屬性中，Property Get、Property Let，與 Property Set 程序的參數必須完全符合。唯一的例外是，Property Let 會有一個額外的參數，其型態需符合相對的 Property Get 之傳回值；Property Set 也有一個額外的參數，是 Property Get 所沒有的，其型態可以是 Variant、Object、物件類別名稱，或由物件程式庫指定的物件程式庫名稱。這個錯誤的起因與解決方法如下所示：

•	Property Get 程序的參數數量並非比相對之 Property Let 或 Property Set 程序少一。

請視情況新增參數至 Property Let 或 Property Set，還是移除 Property Get 的參數。

•	Property Get 的參數型態必須符合 Property Let 或 Property Set 的參數型態，除了額外的 Property Set 參數。

請修改參數型態，使其符合。

•	Property Let 額外參數的型態需符合相對 Property Get 程序的傳回值。

請修改 Property Let 額外參數的宣告或 Property Get 的傳回值，使其符合。

•	Property Set 額外參數的型態可以跟相對 Property Get 之傳回值不同，但必須是 Variant、Object、物件類別名稱，或正確的物件程式庫型態。

請確定 Property Set 程序之額外參數的型態為 Variant、Object、物件類別名稱，貨物件程式庫名稱。

•	您使用 Optional 或 ParamArray 參數來定義 Property 程序。

ParamArray 與 Optional 參數不能用於 Property 程序。請重新定義，且勿使用這些關鍵字。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


Deftype 陳述述必須先宣告

���

Deftype 陳述式包括 DefInt、DefDbl、DefCur 等。這個錯誤的起因與解決方法如下所示：

•	模組層次中的變數宣告在一個 Deftype 陳述式之前。

請將 Deftype 陳述式移到所有變數宣告之前。

•	一個 Deftype 陳述式出現在程序中。

請將 Deftype 陳述式移到模組層次中，在所有變數宣告之前。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


目的端標籤 (label) 太遠；迴圈，Select Case，或 If 區塊太大

���

雖然程序從開始到結束最大可以到 64K，但是程序中的分支可能向前或向後，像這樣的分支在每個方向的極限是 32,767 位元。這個錯誤的起因與解決方法如下所示：

•	您有一個分支陳述式 (GoTo、GoSub)，其從來源至行號標籤的距離超過 32,767 個位元。

請將此標籤移近一點，或使程序小一點。

•	您有一個迴圈結構，其從開始到結束共佔據超過 32K 的記憶體。

請使此迴圈小一點。

•	您有一個非常大的 If 區塊結構，其包含一個從開始到結束共佔據 32K 記憶體的 Then 或 Else 子句。

請減少此結構中違反部份的大小。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


有 Do，卻沒有 Loop

���

每一個 Do 陳述式必須對應一個結束的 Loop。這個錯誤的起因與解決方法如下所示：

•	使用一個 Do 陳述式，卻沒有一個結束的 Loop 陳述式。

請檢查 Do...Loop 結構中其它控制項的結構被正確地配對。例如，在 Do...Loop 結構中的一個區塊 If 沒有與 End If 配合使用時，就會產生這個錯誤。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


在目前的有效範圍內重複宣告

���

所指定的名稱在此有效範圍的層次已經被使用了，例如，假如兩個變數被定義在不同的程序中時，它們可以有相同的名稱；但如果被定義在同一個程序中則不可以。這個錯誤的起因與解決方法如下所示：

•	一個新的變數或程序，與已經存在的變數或程序有相同的名稱。例如：

Sub MySub()

0	Dim A As Integer

1	Dim A As Variant

2	. . .	' 此處為其它宣告或程序的程式碼。

3	End Sub

請檢查目前的程序、模組，或專案並移除任何重複的宣告。

•	Const 陳述式使用一個與已經存在之變數或程序相同的名稱。

請將出現問題的常數刪除或重新命名。

•	您宣告一個固定陣列超過一次以上。

請將其中一個陣列刪除或重新命名。

請找出重複的名稱。當指定所要尋找的名稱時，假如有任何的型態宣告字元，請省略它，因為假如名稱相同而型態宣告字元不同就會發生衝突。

0	請注意，一個模組層次變數可以與一個被宣告在程序中的變數有相同的名稱，但是當您想要在程序中引用這個模組層次的變數時，您必須以模組名稱來修飾它。在程序中模組名稱也和引用專案名稱一樣被重複使用，並且也能被修飾。

1	詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


重複的定義

您只可以定義一個條件式編譯常數為一個值。這個錯誤的起因與解決方法如下所示：

•	您指定兩個值給相同的條件式編譯常數，例如：

#Const Mac = 0

0	#Const Mac = 1

請刪除其中的一個定義。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


重複的 Deftype 陳述式

���

在相同範圍中的 Deftype 陳述式必須指定唯一的字母有效範圍。這個錯誤的起因與解決方法如下所示：

•	此 Deftype 陳述式的部份或所有字母範圍，已經被另一個 Deftype 陳述式使用了。

請重新寫入此陳述式，直到沒有重複的字母範圍。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


重覆的 Option 陳述式

���

在每一個模組中，每一種 Option 陳述式只有一個能夠發生。這個錯誤的起因與解決方法如下所示：

•	您已經在這個模組中定義超過一個以上的 Option Base、Option Compare、Option Explicit 或 Option Private 陳述式。

請刪除此模組中的任何重複。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


編輯無法復原--要繼續嗎？

在您執行這個編輯後，無法選取「復原」指令來回復目前的狀態。這個錯誤的起因與解決方法如下所示：

•	通常是發生在，當編輯太大的範圍以致於無法儲存時。

試著執行較少量的編輯。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


有 Else，卻沒有 If

���

Else 必須在一個 If 之後。這個錯誤的起因與解決方法如下所示：

•	一個 Else 陳述式被使用時沒有一個相對應的 If 陳述式。

請檢查在 If...End If 結構中的其它控制項結構，並確認它們被正確地配對。也請檢查區塊 If 是正確的格式。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


無法使用 Empty Enum 型態

���

Enum 用來指定列舉值的名稱和成員。這個錯誤的起因與解決方法如下所示：

•	您為 Enum �End Enum 區塊中的一個列舉值命名，但沒有指定任何成員。

請在 Enum �End Enum 區塊中至少加入一個成員。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


空的監看運算式

「新增監看式」對話方塊需要輸入一個運算式。這個錯誤的起因與解決方法如下所示：

•	在「新增監看式」對話方塊中，您沒有提供一個監看運算式。

請加入一個運算式至「新增監看式」對話方塊中，或是按下 ESC 鍵。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


有 End If，卻沒有 If

���

一個 End If 陳述式必須有一個相對的 If 陳述式。這個錯誤的起因與解決方法如下所示：

•	If 子句被省略或是被與 End If 隔開了。

請檢查在 If...End If 結構中的其它控制項結構，並確認它們被正確地配對。也請檢查區塊 If 是正確的格式。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


已到達搜尋範圍的結尾處；您要從起始處繼續搜尋嗎？

搜尋沒有成功。這個錯誤的起因與解決方法如下所示：

•	向下搜尋已經到達指定範圍的尾端。

您可以選取從搜尋範圍的頂端繼續搜尋，或取消和改變搜尋的範圍。


有 End Select，卻沒有 Select Case

���

End Select 必須與之前的 Select Case 配合使用。這個錯誤的起因與解決方法如下所示：

•	您使用一個 End Select 陳述式時沒有一個相對應的 Select Case 陳述式。

這通常起因於從一個程序中複製一個 Select Case 區塊至另一個程序中時，導致一個多餘的 End Select 遺留在 Select Case 區塊下，或留在 End Select 陳述式後。請檢查每一個 End Select 陳述式，確定它結束一個 Select Case 結構。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


有 End With，卻沒有 With

���

End With 必須與先前的一個 With 配合使用。這個錯誤的起因與解決方法如下所示：

•	您使用一個 End With 陳述式時，沒有一個對應的 With 陳述式。

請檢查 With...End With 結構中的其它控制項的結構，並且確認它們被正確地配合使用。例如，在 With...End With 結構中的 If 沒有一個配合使用的 End If 時，就會發生這個錯誤。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


在一般模組或者私用物件類別中定義的私用 Enum 型態和 Enum 型態，無法用作公共物件模組中公共程序的參數或傳回型態、程序、公共資料成員、或公共使用者自訂型態的資料欄

���

這個錯誤有以下的原因和解決方案方案：

•	使用了一個非顯露的 enum 作為一個公共程序的參數或傳回型態、或者作為一個顯露的物件類別的公共數據成員。

在這裡，「顯露的」就是說該 enum 是從正在定義的 ActiveX 伺服器中被顯露，也就是說它是在一個 ActiveX Exe 或 Dll 專案的公共物件類別中宣告的。


存取系統註冊區時發生錯誤

有一些動作需要存取系統的登錄資料庫。這個錯誤的起因與解決方法如下所示：

•	您的系統的登錄資料庫已經損壞了。

請再執行一次主應用程式的 Setup 程式。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


事件處理常式不正確

���

事件處理程序的參數清單必須符合事件的宣告。這個錯誤的起因與解決方法如下所示：

•	您的事件處理程序之參數數目不對。

刪掉多餘的參數或者新增漏掉的部分。

•	您的事件處理程序中，某些參數的資料型態不正確。

參數型態需符合事件宣告。

•	您的事件處理程序是 Function，而非 Sub。

在此必須是 Sub，因為事件處理程序不能傳回值。

•	有其它的型態程式庫使用了此事件名稱。

請檢查名稱以避免衝突。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


事件程序的宣告與同名事件的描述不相符
程序的宣告與同名事件或程序的描述不相符

物件類別模組的名稱與某事件的名稱衝突。這個錯誤的起因與解決方法如下所示：

•	程序名稱與某個事件相同，但實際卻不相同 ( 參數的數目與型態 ) 時。當您新增一個參數到事件程序時，可能會發生這種情況。例如，若您將表單之 Form_Load 事件程序的定義改成如下所示時，就會發生此錯誤：

Sub Form_Load (MyParam As Integer)

0	. . .

1	End Sub

若此程序並非該事件的事件程序，則請改變其名稱。若是的話，請確認其參數清單是正確的。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


Exit Do 不在 Do...Loop 中

���

Exit Do 只能在 Do...Loop 陳述式中。這個錯誤的起因與解決方法如下所示：

•	Exit Do 陳述式在 Do...Loop 之外。

請確定 Do 陳述式在 Exit Do 之前。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


Exit For 不在 For...Next 中

���

Exit For 必須在 For...Next 迴圈中。這個錯誤的起因與解決方法如下所示：

•	Exit For 陳述式在 For...Next 之外。

請確定 For 陳述式在 Exit For 之前。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


Sub 或 Property 不能與 Exit Function 配合使用

���

Exit 陳述式必須配合適當的程序使用。這個錯誤的起因與解決方法如下所示：

•	您在 Sub 或 Property 中使用 Exit Function。

在此需使用 Exit Sub 或 Exit Property。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


Exit Property 不能與 Function 或 Sub 配合使用

���

Exit 陳述式必須配合適當的程序使用。這個錯誤的起因與解決方法如下所示：

•	您在 Sub 或 Function 中使用 Exit Property。

請使用適當的 Exit 陳述式。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


Function 或 Property 不能與 Exit Sub 配合使用

���

Exit 陳述式必須配合適當的程序使用。這個錯誤的起因與解決方法如下所示：

•	您在 Function 或 Property 中使用 Exit Sub。

請使用適當的 Exit 陳述式。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是陣列

���

具有註標的變數名稱，表示此變數位於陣列中。這個錯誤的起因與解決方法如下所示：

•	您所指定的語法適用於陣列，但在有效範圍內沒有這個名稱的陣列。

請檢查並確定此變數的名稱沒有被拼錯。除非模組包含 Option Explicit，否則一個變數在第一次使用時就會被建立。假如您將一個陣列變數的名稱拼錯，此變數可以被建立，但並不是一個陣列。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是 End Function

���

End procedure 陳述式必須配合程序使用。這個錯誤的起因與解決方法如下所示：

•	您使用 End Property 或 End Sub 來結束一個 Function 程序。

在此請使用 End Function。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是 End Property

���

End procedure 陳述式必須配合程序使用。這個錯誤的起因與解決方法如下所示：

•	您使用 End Function 或 End Sub 來結束一個 Property 程序。

在此請使用 End Property。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是 End Sub

���

End procedure 陳述式必須配合程序使用。這個錯誤的起因與解決方法如下所示：

•	您使用 End Function 或 End Property 來結束一個 Sub 程序。

在此請使用 End Sub。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是 End With

���

With 區塊必須被結束。這個錯誤的起因與解決方法如下所示：

•	您沒有適當地結束一個 With 區塊。

請將一個 End With 放在區塊的尾端。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是函數或變數

���

您陳述式的語法表示一個變數或函數呼叫。這個錯誤的起因與解決方法如下所示：

•	這個名稱並非是一個已知的變數或 Function 程序的名稱。

請檢查這個名稱的拼法。也請確定在您引用以此名稱命名的變數或函數時，它在該程式片段中是可見的。例如，假如函數被定義為 Private 或變數被定義為 Public 時，它只有在自己的模組中為可見的。

•	您試著指定一個不適當的值給一個程序名稱。例如假如 MySub 是一個 Sub 程序，則下面的程式碼會產生這個錯誤：

MySub = 237	' 產生預期函數或變數的錯誤

雖然您可以利用一個 Property Let 程序，或一個傳回物件或傳回包含物件的 Variant 的函數，來使用指定式語法，但您不能以 Sub、Property Get 或 Property Set 程序來使用指定式語法。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是程序，不是模組

���

在目前有效範圍中，沒有任何以此名稱命名的程序，但有以此名稱命名的模組。您可以呼叫程序，但不能呼叫模組。這個錯誤的起因與解決方法如下所示：

•	模組的名稱被當成程序呼叫。

請檢查此程序名稱的拼法。並確定您想要呼叫的程序，不為另一個模組所私有。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是程序，不是專案或程式庫

���

在目前有效範圍中，沒有任何以此名稱命名的程序，但有以此名稱命名的專案。這個錯誤的起因與解決方法如下所示：

•	專案的名稱被當成程序呼叫。

請檢查此程序名稱的拼法。並確定您想要呼叫的程序，不為另一個模組所私有。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是程序，不是使用者自訂型態

���

在目前有效範圍中，沒有任何以此名稱命名的程序，但有以此名稱命名的使用者自訂型態。您可以呼叫程序，但不能呼叫使用者自訂型態。這個錯誤的起因與解決方法如下所示：

•	使用者自訂型態的名稱被當成程序呼叫。

請檢查此程序名稱的拼法。並確定您要呼叫的程序，不是另一個模組所私有的。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是程序，不是變數

���

在目前有效範圍中，沒有任何以此名稱命名的程序，但有以此名稱命名的變數。您可以呼叫程序，但不能呼叫變數。這個錯誤的起因與解決方法如下所示：

•	變數的名稱被當成程序呼叫。

這個錯誤也可能起源於將一個有效程序的名稱拼錯，因為該名稱可以被以不明確定義的方式建立為變數。請檢查此程序名稱的拼法，並確定您要呼叫的程序不是另一個模組所私有的。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是 Sub、Function，或 Property

���

陳述式的語法代表一個不正確的 Sub、Function，或 Property 程序。這個錯誤的起因與解決方法如下所示：

•	所指定的名稱並非有效範圍中的 Sub、Function，或 Property 程序。

請檢查此名稱的拼法。請注意，假如此程序定義為 Private 時，它只能在它自己的模組中被呼叫。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是使用者自訂型態，不是專案

���

在目前有效範圍中沒有任何以此名稱命名的使用者自訂型態，但有以此名稱命名的專案。您可以定義一個變數為具有使用者自訂型態，但不為專案型態。這個錯誤的起因與解決方法如下所示：

•	專案名稱被用為一個使用者自訂型態的名稱。

請檢查此使用者自訂型態名稱的拼法，並確定此使用者自訂型態不是另一個模組所私有的。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是變數或程序，不能是 enum 型態

���

Enum 型態名稱只能出現在陳述式宣告型態的列舉，或做為定位項。這個錯誤的起因與解決方法如下所示：

•	Enum 型態名稱被用來取代該型態的列舉變數。

請宣告 Enum 型態的變數，或在目前有效範圍中找尋一個之前的宣告，並使用該變數。

•	Enum 型態名稱被用來做為變數或程序名稱。

請檢查造成此錯誤之識別項的拼字。在指定 Enum 型態的地方，使用變數或程序的名稱。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是變數或程序，而非模組

���

在目前的有效範圍中沒有任何以此名稱命名的變數或程序，但有以此名稱命名的模組。這個錯誤的起因與解決方法如下所示：

•	模組的名稱被用為變數或程序。

請檢查變數或程序名稱的拼法，並確定您所要引用的名稱不是另一個模組所私有的。模組名稱可以用來修飾，但不可以單獨使用。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是變數或程序，而非專案

���

在目前的有效範圍中沒有任何以此名稱命名的變數或程序，但有以此名稱命名的專案。這個錯誤的起因與解決方法如下所示：

•	專案的名稱被用為變數或程序。

請檢查變數或程序名稱的拼法，並確定您所要引用的名稱不是另一個模組所私有的。專案名稱可以用來修飾，但不可以單獨使用。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


必須是：<various>

語法中預期的部份沒有找到。這個錯誤通常位於被選擇項目的左方，但並不總是明顯的。例如，您可以用 Call 關鍵字來啟用一個 Sub 程序，但也可不用。然而，假如您使用 Call 關鍵字，您必須以括號將引數列圍繞起來。這個錯誤的起因與解決方法如下所示：

•	必須是：陳述式的結尾。在程序要求中沒有適當的使用括號：

X = Workbook.Add F:= 5	' 錯誤起因於沒有括號。

0	Call MySub 5	' 錯誤起因於沒有括號。

請在指定引數，或具有一個使用 Call 關鍵字的 Sub 程序要求的函數呼叫中使用括號。

•	必須是： )。一個程序呼叫的不正確語法。例如，一個函數呼叫不能靠自己維持，而 Sub 程序呼叫有時候需要 Call 關鍵字，依賴於您如何指定它們的引數。

Workbook.Add (X:=5, Y:=7)	' 沒有運算式的函數呼叫。

0	YourSub(5, 7)	' 沒有 Call 的 Sub 要求。

請總是在運算式中使用函數呼叫，而且假如在 Sub 程序呼叫中，括號內有多重的引數時，您必須使用 Call 關鍵字。

•	必須是：運算式。例如，當從物件瀏覽中貼上程式碼時，您可能忘記指定一個值給一個指名引數。

Workbook.Add (X:= )	' 錯誤因為沒有值被指定給

0	' 指名引數。

為該引數任意加入一個值，或者假如它是選用的，就刪除它。

•	必須是：變數。例如，您也許使用被限制的關鍵字作為變數名稱。在下面的範例中，Input # 陳述式必須用一個變數作為其第二個引數。因為 Type 是一個被限制的關鍵字，因此它無法作為一個變數名稱。

Input # 1, Type	' Type 關鍵字使用不正確

0	' 變數名稱。

請重新命名變數，使其不再與被限制的關鍵字衝突。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


未定義外部名稱

您可以藉著以中括號 ([ ]) 來表示外部名稱。這個錯誤的起因與解決方法如下所示：

•	在方括號中所指定的識別項對於主應用程式並沒有任何意義。

請檢查此名稱的拼法，以確定它與 Visaul Basic 所預期的名稱一致。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不支援這個檔案格式

並非所有的檔案格式在所有的環境下都是可讀取的。這個錯誤的起因與解決方法如下所示：

•	您試著載入一個以先前的 Visual Basic 版本建立的二進位檔案。

請以建立該檔案的 Visual Basic 版本來載入它，並將它以文字格式儲存，然後再次試著載入它。

詳細資訊，請先選取有疑問的項目，然後按下 F1  (在 Windows中) 或 HELP (在 Macintosh上)。


Fixed-length strings and use of the `new' qualifier are not allowed for fields in a public user defined type defined in an object module
對於物件模組中定義的公共使用者定義型態中的資料欄，固定長度字串和「新增」定位項的使用是不允許的

���

這個錯誤有以下的原因和解決方案：

•	對於物件模組中定義的公共使用者定義型態中的資料欄，固定長度字串和「新增」定位項的使用是不允許的。


Fixed-length strings not allowed as the type of a public member of an object module; private object modules not allowed as the type of a public member of a public object module
固定長度字串不可以作為物件模組中公用(public)成員的型態；此外，類型為私有(private)的物件模組，不可以作為公用物件模組中的公用成員

���

這個錯誤有以下的原因和解決方案：

•	不允許將一個物件模組的公共成員的型態設定為固定長度字串。請使用其他變數型態。

•	不允許將一個公共物件模組的公共成員的型態設定為私用物件模組。請使用其他型態。


固定或靜態資料不能大於 64K

固定的或靜態的資料包括非自動變數、固定長度的字串、和固定陣列。這個錯誤的起因與解決方法如下所示：

•	您試圖配置超過 64K 的模組層次資料。

請減少被宣告資料的總額。請注意雖然模組層次資料大小的極限是 64K，但模組層次的可變長度字串和陣列可以超過這個極限。

•	您試圖在模組中配置了超過 64K 的靜態程序層次資料。

請減少這種資料型態宣告的總額。在模組中，所有程序中的靜態資料的極限是 64K 的總和 (並非每個程序 64K)。請注意靜態的可變長度字串與陣列可以超過這個極限。

•	使用者自訂型態的大小超過 64K。

請減少此使用者自訂型態的大小。通常一個使用者自訂型態的大小等於它所指定元件 (在一些平臺上，在元件間可能會被填塞以保持一個字的間隔)的總和。同樣地，假如您定義一個巢狀的使用者自訂型態，新的型態的大小必須包括其中的使用者自訂型態。

•	在程序中，您試著宣告一個需要超過 32K 的使用者自訂型態變數。

雖然在模組層次中，一個使用者自訂型態變數的極限是 64K，但在程序中 一個使用者自訂型態變數不能超過 32K。請減少此使用者自訂型態所需的大小，或使用一個模組層次的變數。

•	被宣告在程序中的一個固定長度字串超過 65,464。

請減少此固定長度字串的長度。請注意一個可變長度字串可以超過這個極限。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


For 陳述式的控制項變數已在使用中

���

當您使用巢狀的 For...Next 迴圈時，您必須在每一個迴圈中使用不同的控制項變數。這個錯誤的起因與解決方法如下所示：

•	一個內層的 For 迴圈將相同的計數器，用在一個外層的 For 迴圈。

請檢查重複的巢狀迴圈。例如，假如外層的迴圈使用 For Count = 1 To 25，則內層的迴圈就不能使用 Count 為其控制項變數。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


For Each 控制項變數必須是 Variant 或 Object

���

控制項變數是 For Each...Next 陳述式語法的 element 部份。這個錯誤的起因與解決方法如下所示：

•	集合物件中有一個非 Variant 或 Object 型態的控制項變數。

請確定 For Each...Next 的 element 部份是一個 Variant 或 Object。

•	陣列中有一個非 Variant 的控制項變數。

請確定 For Each...Next 的 element 部份是一個 Variant。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


陣列中的 For Each 控制項變數必須是 Variant

���

控制項變數是 For Each...Next 陳述式語法的 element 部份。這個錯誤的起因與解決方法如下所示：

•	陣列中有一個非 Variant 的控制項變數。

請確定 For Each...Next 的 group 部份是一個 Variant 型態的變數。

•	詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


For Each 不能使用在使用者自訂型態的陣列或固定長度字串

���

For Each 結構只對本身型態的集合物件和陣列為有效的，包括物件的陣列。因此，固定長度字串的陣列不能使用 For Each 來重覆。這個錯誤的起因與解決方法如下所示：

•	在您的 For Each 結構中，陣列中的元件有一個使用者自訂型態。

請使用正常的 For...Next 迴圈重覆陣列中的元件。

•	在您的 For Each 結構中，陣列中的元件有一個固定長度字串。

請使用正常的 For...Next 迴圈重覆陣列中的元件。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


For Each 只可使用於集合物件或陣列

���

For Each 結構只能用於集合物件與陣列。這個錯誤的起因與解決方法如下所示：

•	您將一個非集合物件或陣列的物件指定為 For Each 語法的 group 部份。

請檢查您想要重覆的項目的拼法，確定它對應至程式碼這部份有效範圍中的一個集合物件或陣列。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


有 For，卻沒有 Next

���

每一個 For 陳述式必須有一個配合使用的 Next。這個錯誤的起因與解決方法如下所示：

•	使用 For 陳述式時，沒有一個相對的 Next 陳述式。

請檢查 For...Next 結構中，是否有不正確的 For...Next 結構。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


順向引用使用者自訂型態

���

引用一個使用者自訂型態前必須先定義。這個錯誤的起因與解決方法如下所示：

•	在宣告某個使用者自訂型態之前，您就已經宣告一個此使用者自訂型態的變數。下面的範例中，變數 OtherVar 在其型態 (OtherType) 尚未定義前就先被宣告了：

Type MyType

0	OtherVar As OtherType

1	End Type

2	Type OtherType

3	WholeVar As Integer

4	RealVar As Double

5	End Type

請重新調整型態宣告的位置。

•	您以一個使用者自訂型態本身，定義一個巢狀的使用者自訂型態。

Type MyType

0	MyVar As Integer

1	OtherVar As MyType

2	End Type

請移除自我引用的巢狀型態。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


指定陳述式左端的函數 (function)必須傳回 Variant 或 Object 型態

���

函數呼叫可以出現在指定式的左邊，但是只有在其傳回值為一個 Object 或 Variant 時。這個錯誤的起因與解決方法如下所示：

•	在指定式左邊的函數其傳回值不是一個 Variant 或 Object。

請改變傳回的型態。請注意假如傳回值是一個包含物件的物件或 Variant，則指定式對應至預設的物件屬性。假如被傳回的 Variant 不是一個物件，則指定式沒有作用。

•	呼叫的方式是正確的，但並未完成。例如：您試圖設定一個只有在設計階段才能設定的屬性。

請進入設計模式，並在「屬性」視窗中設定該屬性。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


函數用法受限制或使用了一個 Visual Basic 不支援的型態

型態程式庫或物件程式庫中的程序並不見得可被每種程式語言存取。設計者可以限制這些型態或物件程式庫，不能被巨集語言存取。這個錯誤的起因與解決方法如下所示：

•	您試圖使用一個受限制的函數。

您無法使用此函數。請參閱該程式庫的說明文件，看看是否有相同功能的方法。

•	您試圖使用的函數，其參數型態或傳回的型態不是 Visual Basic 所支援的。

您可以 Visual Basic 模擬相對的傳回型態。請檢查 Variant 資料型態的次型態。不過在模擬非 Basic  型態時，不能以傳值方式來傳遞 Variant 資料型態。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


識別項太長

識別項的長度不能超過 255 個字元。這個錯誤的起因與解決方法如下所示：

•	識別項的長度超過 255 個字元。

請減短識別項的長度。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


游標所在的識別項不是程序名稱

您試著檢視ㄧ個程序，但是在插入點的項別項不是一個程序名稱。這個錯誤的起因與解決方法如下所示：

•	識別項不是一個程序名稱。

請檢查此識別項的拼法。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不正確的 DLL 版本

Visual Basic 的每個版本只能運用其相對的動態連結程式庫 (DLL)[;;vbe> (Windows) 或程式碼資源 (Macintosh)。這個錯誤的起因與解決方法如下所示：

•	您的 Visual Basic 動態連結程式庫或程式碼資源的版本與主應用程式不符合。程式企圖呼叫在 DLL 中的副程式，但此程式庫或資源的版本不適用於 Visual Basic。

請取得此程式庫或資源的正確版本，並且確定舊的版本不在適當版本的路徑之前。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不正確的 OLE 版本

OLE 動態連結程式庫 (DLL) 的版本不符合主應用程式(Windows) 或程式碼資源 (Macintosh) 所需要的。應用程式在搜尋 DLL 時，首先會先從目前目錄開始，然後沿著您的路徑設定，接著在 WINDOWS\SYSTEM 目錄中。這個錯誤的起因與解決方法如下所示：

•	在主應用程式所需要的 DLL 之前，先找到舊的 OLE DLL。

若要使用兩個 DLL 版本，您必須放置適當的版本在其對應的應用程式目錄中。

注意，在 Macintosh 上，OLE 檔案通常只在 Extensions 資料夾中，所以它不會發生這樣的錯誤。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


即時運算視窗的記憶體不足以建立變數

 「即時運算」視窗的記憶是有限制的。這個錯誤的起因與解決方法如下所示：

•	您指定了一個「即時運算」視窗中的變數，其並不屬於程式碼視窗中的內容。

請刪除此「即時運算」視窗中變數的引用。或者在程式碼中宣告此變數，所以其不需在「即時運算」視窗中建立。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


記憶體不足以儲存復原資訊

執行此編輯後，您就無法以「復原」指令來恢復成原本的狀態了。這個錯誤的起因與解決方法如下所示：

•	「復原」指令無法記錄這麼大的編輯動作。

請試著執行較小的編輯動作。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


專案資訊不足，無法在目前的平台或版本載入

���

當您儲存一個專案時，也會儲存多餘的資訊，以允許將來的版本或不同平台的版本也能載入。這個錯誤的起因與解決方法如下所示：

•	當您儲存一個專案時，收到一個錯誤，表示記憶體不足，無法儲存所有的資訊。

請使用先前儲存時的 Visual Basic 版本來載入，然後再儲存一次。若沒有任何錯誤訊息，那麼應該就可以用目前的版本來開啟。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


沒有充分的專案資訊來載入專案；或是無法用本版本來載入專案

���

儲存專案時，會順便儲存一些額外的資訊，以允許在以後的版本或不同的平台載入。這個錯誤的起因與解決方法如下所示：

•	儲存專案時，產生一個錯誤訊息，指出記憶體不足，以致無法儲存一些用於不同版本或平台的資訊。

請載入使用 Visual Basic 先前版本或不同平台儲存的檔案。若沒有任何錯誤訊息，則應該也可以在目前版本或平台載入。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


介面處理不正確

���

Visual Basic 不見得可以處理各種介面。這個錯誤的起因與解決方法如下所示：

•	此介面的某些元素是 Visual Basic 所不支援的。例如：Visual Basic 不具有無號的常整數型態，Visual Basic 無法表示一個 程序參數為 "out-only"。雖然 Visual Basic 識別項支援底線字元 (_)，卻無法處理成員名稱有底線的介面。

您無法在 Visual Basic 中處理此介面。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不正確的存取模式

���

您在 Open 陳述式中，為某個檔案指定了一種不正確的存取型態。這個錯誤的起因與解決方法如下所示：

•	您試圖以 Input 開啟一個檔案，但是所指定的存取模式不正確。

當您開啟一個用來輸入的檔案時，您可以省略存取模式的指定，但假如您指定它時，存取模式必須是 Read。對於一個以 Input 開啟的檔案而言，Write 和 Read Write 都是不正確的。

•	您試圖以 Append 開啟一個檔案，但是所指定的存取模式不正確。

當您要開啟一個檔案用來新增時，可以省略存取模式的指定，但是假如您指定它，則存取模式必定是 Write。對於一個為了用來 Append 而開啟的檔案而言，Read 和 Read Write 兩者都是不正確的存取模式。

•	您企圖開啟一個檔案作為 Output，但是卻指定一個不正確的存取模式。

當您要開啟一個檔案用來輸出時，可以省略存取模式的指定，但是假如您指定它，則存取模式必定是 Write。對於一個為了用來 Output 的檔案而言，Read 和 Read Write 兩者都是不正確的存取模式。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


Sub、Function，或 Property 中的屬性不正確
Sub、Function 或 Property 中的屬性不正確

���

某些屬性 (attribute) 在程序中是不正確的。這個錯誤的起因與解決方法如下所示：

•	一個 Public 或 Private 屬性出現在程序定義的主體中。

請從程序中刪除該屬性。若要給變數更大的有效範圍，請將宣告移到模組層次中。在程序中宣告的變數都必須是 Private。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不正確的字元

此字元不能被用於目前的內容中。這個錯誤的起因與解決方法如下所示：

•	您可能以一個不正確的字元，如括號或連字號，做為變數名稱的一部份。

請比較此名稱的拼字與其宣告是否一致。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不正確的資料格式

從檔案中讀取的資料不是預期的格式。這個錯誤的起因與解決方法如下所示：

•	專案檔案或物件程式庫檔案不是損壞了，就是其格式無法被辨識。

請得此專案檔案或物件程式庫檔案的新版本。

•	您可能試圖將一個執行檔載入模組中。

載入原始程式碼。

•	您可能使用過「設定引用項目」對話方塊及」物件瀏覽」，加入引用至一個不正確的物件程式庫或主應用程式不支援之格式的 Basic 專案。例如，在 Windows 平台上，Microsoft Excel 不支援 .bas 或 .frm files，還是 Microsoft Project 檔案含有 Basic 程式碼。

請將出現問題的檔案載入至建立它的應用程式中，然後以相容的格式儲存它。例如，物件程式庫來源程式碼可以被經由 MKTYPLIB 和 QuickBasic 處理，且 Visual Basic 程式碼可以被儲存為文字格式。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不正確的常數資料型態

並非所有的資料型態都可以指定給常數。這個錯誤的起因與解決方法如下所示：

•	您試著將一個常數的型態宣告成一個使用者自訂型態、一個物件或一個陣列。

請刪除變數的宣告或重新宣告。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


即時運算視窗不正確

���

在 [即時運算] 視窗中，並非所有的陳述式都是被允許的。這個錯誤的起因與解決方法如下所示：

•	使用一個宣告性的陳述式。例如，Const、Declare、Deftype、Dim、Function、Option Base、Option Explicit、Option Compare、Option Private、Private、Public、屬性程序宣告陳述式 (Property Let、Property Set，與 Property Get)、ReDim、Static、Sub，與 Type 不可用在「即時運算」視窗中。

請從「即時運算」視窗中刪除宣告性的陳述式。

•	使用一個流程控制的陳述式，例如，Sub、Function、Property、GoSub、GoTo、Return，與 Resume.

請從「即時運算」視窗中刪除這些陳述式。

•	在「即時運算」視窗中分隔的實際行間沒有任何的邏輯連結產生，因此陳述式被認定為數行，例如一個 If 區塊陳述式，無法適當地被執行。

像這樣的區塊可以被輸入在單一的實際行中，藉著在每個陳述式間使用冒號 (:)。相對的，您可以在「即時運算」視窗中藉著使用換行接續字元，一個底線加上一個空白 ( _)，將單一的實際行延伸至數個實際行。

•	您試圖在「即時運算」視窗中，執行使目前程式狀態為無效，並需要重新初始程式的程式碼。

請從「即時運算」視窗中將出現問題的程式碼刪除。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不正確的內部程序

���

此陳述式不能出現在一個 Sub 或 Function 程序中。這個錯誤的起因與解決方法如下所示：

•	下列陳述式之一出現在程序中：Declare、Deftype、Private、Public、Option Base、Option Compare、Option Explicit、Option Private，Enum 與 Type.

請從程序中刪除此陳述式。此陳述式可以被放置在模組層次。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


固定長度字串的長度不正確

���

這個錯誤的起因與解決方法如下所示：

•	固定長度字串被宣告成長度為零。

固定長度字串必須至少有一個字元。

•	固定長度字串超過 65,529 的限制。

請減短所指定給固定長度字串的長度。

附註   可變長度字串可以超過最大限制，其長度也可以是零。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


Next 控制項變數引用不正確

���

在 For...Next 迴圈的 Next 部分，數值變數必須與 For 部分相符。這個錯誤的起因與解決方法如下所示：

•	For...Next 迴圈之 Next 部分的變數，與 For 部分的變數不同。例如：

For Counter = 1 To 10

0	MyVar = Counter

1	Next Count

請檢查 Next 部分之變數的拼字，是否與 For 部分相符。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不正確或不相符的引用

���

一個以句號為開頭的識別項只有在 With 區塊中為有效。這個錯誤的起因與解決方法如下所示：

•	以句號為開頭的識別項。

請修飾此識別項或除去句號。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不正確的外部程序

���

此陳述式必須發生於一個 Sub 或 Function，或是一個屬性 (Property Get、Property Let、Property Set) 程序中。這個錯誤的起因與解決方法如下所示：

•	一個可執行的陳述式，如 Static 或 ReDim，出現在模組層次中。

在模組層次中 Static 是不需要的，因為所有的模組變數都是靜態的。請在模組層次中使用 Dim 來代替 ReDim。想要在模組層次中建立一個動態陣列，請以 Dim 並使用空的括弧來宣告它。

附註   在模組層次中您可以使用只是註解與宣告性的陳述式，例如 Const、Declare、Deftype、Dim、Option Base、Option Compare、Option Explicit、Option Private、Private、Public 和 Type。Sub、Function 和 Property 陳述式發生於該程序主體外，但是在該程序內宣告。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


ParamArray 使用不正確

���

被定義為 ParamArray 的參數在此程序中被不正確地使用。這個錯誤的起因與解決方法如下所示：

•	您試圖以 ParamArray 為引數，傳遞至另一個需要是陣列或 ByRef Variant 的程序中。

請將 ParamArray 參數指定至一個 Variant 中，然後傳遞此 Variant。

•	您試圖在程序中以 ParamArray 參數，使用一個 Erase 或 ReDim 陳述式。

請刪除 Erase 或 ReDim。這些動作無法在 ParamArray 參數上被執行。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


程序名稱不正確

程序命名上有一些限制，是定位項命名規則中所沒有的。這個錯誤的起因與解決方法如下所示：

•	您試圖定義一個程序，但是此程序所使用的名稱是不正確的，因為 Visual Basic 已經使用該識別項作為其它的用途。 例如，若主應用程式為 Microsoft Excel，您就無法以 R1C1 來命名，因為此識別項在 Microsoft Excel 中另有用途。

請為此程序另選一個名稱。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不正確的定位項

���

定位項是用來消除不明確的情形。這個錯誤的起因與解決方法如下所示：

•	在目前的有效範圍中，此定位項無法識別任何的專案、模組、物件，或使用者自訂型態變數。

請檢查此定位項的拼法，並確定此定位項是位於目前的有效範圍中。例如，一個在 Private 模組中的使用者自訂型態變數，只有在該模組中為可見的。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不正確的 ReDim

���

並非每個陣列都可以被重新決定維數。這個錯誤的起因與解決方法如下所示：

•	變數被隱含宣告為 Variant，而您試圖使用 ReDim 將它改變為一個陣列。

Variant 可以包含一個陣列，但是假如它不是被明確宣告，您就不可以使用 ReDim 使它變成一個陣列。請宣告 Variant，在使用 ReDim 指定它能夠包含的元件編號前。例如，在下面的程式碼中，ReDim AVar(10) 會導致一個不正確的 ReDim 錯誤，但是 ReDim BVar(10) 並不會：

AVar = 1	' 隱含宣告 AVar。

0	ReDim AVar(10)	' 導致不正確的 ReDim 錯誤。

1	.

2	.

3	.

4	Dim BVar	' 明確宣告 BVar。

5	ReDim BVar(10)	' 沒有錯誤。

•	您試著使用 ReDim 來改變包含於 Variant 中的陣列超過一個維數以上。

您只可以使用 ReDim 來改變 Variant 中陣列的最後一個維數。假如您想要建立一個具有多重維數的陣列，它就不能被包含在 Variant 中，並且您必須以正常的方式宣告它。

•	您只能使用 ReDim 來改變一個正常陣列中元件的數目，但不能改變那些元件的型態。

假如您想要一個可以改變元件型態的陣列，請使用一個被含在 Variant 中的陣列。假如您第一次宣告這個陣列，可以使用如下所示的程式碼來改變其元件的型態：

Dim MyVar As Variant	' 宣告變數。

0	ReDim MyVar(10) As String	' ReDim 為 String 次型態的陣列。

1	ReDim MyVar(20) As Integer	' ReDim 為 Integer 次型態的陣列。

2	ReDim MyVar(5) As Variant	' ReDim 為 Variant 次型態的陣列。

•	您試圖以 Automation 物件之成員的陣列，來使用 ReDim。

請移除 ReDim。

附註   假如您沒有指定一個變數的型態，此變數會接受預設的型態，Variant。這並不總是明顯的。例如，下面的程式碼宣告兩個變數，第一個變數，MyVar，是一個 Variant；第二個變數，AnotherVar，是一個 Integer。

Dim MyVar, AnotherVar As Integer

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


條件式編譯常數宣告的語法不正確

在 「選項」 對話方塊輸入的條件式編譯常數 與在程式碼中宣告的常數不同。這個錯誤的起因與解決方法如下所示：

•	當在 「選項」 對話方塊中輸入常數宣告時，您使用了不適當的語法。

正確的語法是指定一個整數值到識別項。請確定語法是正確的，且各常數以分號 (:) 區隔：

constantname = [{+ | - }]integervalue : [{+ | - }]constantname = integervalue [...]

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不正確的型態宣告字元

���

型態宣告字元是可以使用，但並非對所有的資料型態都是如此；且在某些情形下是無法使用的。這個錯誤的起因與解決方法如下所示：

•	有一個型態宣告字元，被附加到一個以具有 As 子句的 Private、Public，或 Static 陳述式所宣告的變數。

請刪除此型態宣告字元。

•	一個型態宣告字元被附加入至一個不適合的文字。例如，雖然 (&) 是一個 Long 整數的型態宣告字元，但用到一個不同型態的資料中就會導致錯誤：

10.253&

請刪除此型態宣告字元，或以正確的取代。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


AddressOf 運算子使用不正確

���

AddressOf 運算子可處理或修改引數，已傳回函數的位址，而非傳回函數呼叫的結果。這個錯誤的起因與解決方法如下所示：

•	您試圖以物件類別方法的名稱使用 AddressOf。

只有 .bas 模組的 Visual Basic 程序名稱可以 AddressOf 修改。您無法指定物件類別的方法。

•	以 AddressOf 修改的程序名稱被定義在不同專案的模組中。

•	您試圖以 AddressOf 修改 DLL 或函數定義在型態程式庫中的名稱。

•	DLL 與型態程式庫函數不能以 AddressOf 修改。

程序定義必須式在目前專案的模組中。請將定義移到專案中的模組，或將其含入專案的目前模組中。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


Me 關鍵字用法不正確

���

Me 關鍵字可出現在物件類別模組中。這個錯誤的起因與解決方法如下所示：

•	Me 關鍵字出現在一般模組中。

Me 關鍵字不可用在一般模組中，因為一般模組並不能代表一個物件。若您是從物件類別模組中複製一段程式碼，那麼可用某個物件或表單名稱來取代 Me，以代表原來的引用。

•	Me 關鍵字放在 Set 指定式的左邊：

Set Me = MyObject	' 造成 [Me 關鍵字的使用不正確] 訊息。

移除 Set 指定式。

附註   Me 關鍵字可放在 Let 指定式的左邊，此時會設定 Me 代表之物件的預設屬性：

Let Me = MyObject	' 明確 Let 指定式。

0	Me = MyObject	' 隱含 Let 指定式。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


New 關鍵字用法不正確

���

New 關鍵字僅適用於可建立的物件 (一個物件類別的執行個體或 Automation 物件)。這個錯誤的起因與解決方法如下所示：

•	此物件只能有一個執行個體。例如，您試圖建立一個模組的執行個體，且在陳述式中指定 Module1 如下：

Dim MyMod As New Module1

您當然無法如願，因為模組只能有一個執行個體。

•	Automation 物件並非一個可建立的物件。例如，您試圖建立一個清單方塊的執行個體，且在陳述式中指定 ListBox 如下：

' 就語法上來說是正確的。

0	Dim MyListBox As ListBox

1	Dim MyFormInst As Form

2	' 這裡可就不對了。

3	Set MyFormInst = New Form

4	Set MyListBox = New ListBox

ListBox 與 Form 都視物件類別名稱，而非物件名稱。您可指定變數引用某個物件型態，如以上的 Dim 陳述式；但不能在 Set 陳述式中使用它們，在 Set 陳述式中，您只能使用物件，而不能使用物件類別名稱：

' 這才是對的

0	Set MyFormInst = New Form1

1	Set MyListBox = New List1

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


物件使用不正確

���

您試圖以不正確的方式來使用物件。這個錯誤的起因與解決方法如下所示：

•	您可能藉著指定 Nothing 給物件，來停止一個物件的引用，但是卻省略了 Set 關鍵字：

MyObject = Nothing

請使用 Set 陳述式將物件設定為 Nothing。假設 MyObject 是一個物件，您必須以 Set 陳述式將它設為 Nothing：

Set MyObject = Nothing

省略 Set 關鍵字相當於使用一個不明確的 Let，它可能會造成執行一個值的設定式，甚至一個引用的設定式。而 Nothing 不能被用在一個值的設定式中。

•	您試圖在一個運算式中使用 Nothing。

請重新撰寫一個沒有 Nothing。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


屬性使用不正確

���

在此處應該使用另一種 Property 程序。這個錯誤的起因與解決方法如下所示：

•	您試圖寫入一個唯讀屬性。

若唯一的屬性程序是 Property Get，您便無法指定屬性值。請撰寫一個 Property Let 程序，否則就不要嘗試寫入屬性值。

•	您試圖讀取一個唯寫的屬性。

若唯一的屬性程序是 Property Let，您便無法讀取屬性值。請撰寫一個 Property Get 程序，否則就不要嘗試讀取屬性值。

•	您試圖設定一個引用，但該屬性只有 Property Get 或 Property Let 程序。

請撰寫一個 Property Set 程序，否則就不要嘗試設定引用。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不正確的監看運算式

指定的監看運算式並非一個正確的運算式。這個錯誤的起因與解決方法如下所示：

•	監看運算式的語法不正確。

請檢查該運算式的語法。請注意，監看運算式的語法與定義須對應專案的地區。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


標籤未定義

���

這個錯誤的起因與解決方法如下所示：

•	引用行標籤或行號 時 (例如在 GoTo 陳述式中 )，並非在有效範圍。

標籤必須在含有此引用的程序中，行標籤只有在其所屬的程序中有效。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


地區選項(或國別設定)已變更

這個錯誤的起因與解決方法如下所示：

•	您改變 Visual Basic 環境中預設的地區選項(或國別設定)。

請嘹解雖然這是可行的，卻也有可能給您帶來一些困擾。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


此行並非一個可執行的陳述式

宣告與註解受不可執行的程式行。這個錯誤的起因與解決方法如下所示：

您選取了「執行至游標處」指令，但此處並非一個可執行的程式行。

詳細資訊，請選取「執行」功能表中的「執行至游標處」指令，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


程式行太長

Visual Basic 程式碼中一行實際可以包含 1023 個字元。這個錯誤的起因與解決方法如下所示：

•	一行中含有太多字元。

您可以藉著使用換行接續符號 ─ 也就是一條底線字元加上空白 ( _) ─ 以結合數行。最多可有 25 行實體行與換行接續符號連結，以形成單一邏輯行或 24 個連續換行接續符號。一個邏輯行最多可以包含 10,230 個字元。假如超過了，您必須將該行分為個別的陳述式，或指定一些運算式來替代變數。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


有 Loop，卻沒有 Do

���

Do 迴圈必須以一個 Do 陳述式開頭。這個錯誤的起因與解決方法如下所示：

•	在另一個迴圈中，您讓一個沒有結束的迴圈區塊為巢狀的。

請檢查並確認 Do...Loop 使用正確的語法。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


LSet 只能用於字串與使用者自訂型態

���

LSet 是用來使字串和使用者自訂型態變數中的資料向左對齊。這個錯誤的起因與解決方法如下所示：

•	所指定的變數並非字串或使用者自訂型態。

若您試圖將整個陣列指定給另一個陣列，LSet 就無法正常的運作。您必須使用迴圈，各別來指定每個元素。

•	您試圖對一個物件使用 LSet。

LSet 也可以用來將使用者自訂型態變數中的元素指定給一個不同，但相容的使用者自訂型態中的元素。雖然物件與使用者自訂型態類似，但您不能對其使用 LSet。同樣地，您也不能對含有字串、物件或 Variant 的使用者自訂型態變數使用 LSet。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


不能使用 LSet

���

LSet 是用來使字串和使用者自訂型態變數中的資料靠左對齊。這個錯誤的起因與解決方法如下所示：

•	您試著在一個含有字串、物件或 Variant 的使用者自訂型態上使用 LSet。

您必須從這個使用者自訂型態變數中，各別指定元素至另一個。

詳細資訊，請先選取有疑問的項目，然後按下 F1 (在 Windows中) 或 HELP (在 Macintosh上)。


Bad interface for Implements: interface is derived from another pure interface with non-restricted methods
Implements 的介面錯誤：介面是從另一個包含無限制方法的純介面所據而建立出來的

���

這個錯誤的起因與解決方法如下所示：

•	介面是直接或間接根據另外一個含有無限制方法的純介面所建立出來的。

詳細資訊，請選取有疑問的項目，然後按下 F1  (在 Windows中) 或 HELP (在 Macintosh 上)。


Bad interface for Implements: interface contains data fields
Implements 的介面錯誤：介面包含資料資料欄

���

這個錯誤的起因與解決方法如下所示：

•	介面或者物件類別包含資料資料欄。

詳細資訊，請選取有疑問的項目，然後按下 F1 (在 Windows中) 和 HELP (在 Macintosh上)。


Bad interface for Implements: method has underscore in name
Implements 的介面錯誤：方法的名稱含有底線

���

Implements 陳述式用於指定將要在類別模組中執行的介面或物件類別，這個介面或物件類別出現在該類別模組中。這個錯誤的起因與解決方法如下所示：

•	介面或物件類別包含名稱中含有底線字元的方法。

詳細資訊，請選取有疑問的項目，然後按下 F1   (在 Windows中) 或 HELP (在 Macintosh 上)。


Bad interface for Implements: method does not return HRESULT
Implements 的介面錯誤：方法沒有傳回HRESULT

���

Implements 陳述式用於指定將要在類別模組中執行的介面或物件類別，這個介面或物件類別出現在該類別模組中。這個錯誤的起因與解決方法如下所示：

•	介面或者物件類別包含方法程序的名稱，其傳回值的型態不是 HRESULT。

詳細資訊，請選取有疑問的項目，然後按下 F1  (在 Windows中) 或 HELP (在 Macintosh上)。


Bad interface for Implements: method has out-only or LCID parameter
Implements 的介面錯誤：方法具有 out-only 或 LCID 參數

���

Implements 陳述式用於指定將要在類別模組中執行的介面或物件類別，這個介面或物件類別出現在該類別模組中。這個錯誤的起因與解決方法如下所示：

•	介面或者物件類別包含方法，該方法具有一個型態為 out-only 或 LCID 的參數。

詳細資訊，請選取有疑問的項目，然後按下 F1  (在 Windows中) 或 HELP (在 Macintosh上)。


Bad interface for Implements: method has parameter with too many levels of indirection
Implements 的介面錯誤：方法具有一個帶有過多層次的間接的參數

���

Implements 陳述式用於指定將要在類別模組中實現的介面或物件類別，這個介面或物件類別出現在該類別模組中。這個錯誤的起因與解決方法如下所示：

•	介面或者物件類別包含方法，該方法具有一個帶有多層次的間接參數。例如：整數資料的兩層間接或使用者定義型態的三層間接的使用。

詳細資訊，請選取有疑問的項目，然後按下 F1  (在 Windows中) 或 HELP (在 Macintosh上)。


Bad interface for Implements: methods uses type that is not supported by Visual Basic
Implements 的介面錯誤：方法使用了 Visual Basic 不支援的型態

���

Implements 陳述式用於指定將要在類別模組中執行的介面或物件類別，這個介面或物件類別出現在該類別模組中。這個錯誤的起因與解決方法如下所示：

•	介面或者物件類別包含了一個 Basic 不支援的方法。

詳細資訊，請選取有疑問的項目，然後按下 F1  (在 Windows中) 或 HELP (在 Macintosh上)。


Bad interface for Implements: interface is not derived from Iunknown
Implements 的介面錯誤：介面不是由 Iunknown 所據以建立出來的

���

Implements 陳述式用於指定將要在類別模組中執行的介面或物件類別，這個介面或物件類別出現在該類別模組中。這個錯誤的起因與解決方法如下所示：

•	介面或者物件類別包含了一個方法，這個方法使用的資料類型是 Basic 不支援的。

詳細資訊，請選取有疑問的項目，然後按下 F1  (在 Windows中) 或 HELP (在 Macintosh上)。


監看運算式的個數無法再增加

「監看」視窗中所能擁有的監看運算式數目是有限制的。這個錯誤的起因與解決方法如下所示：

•	您在「監看」視窗所增加的監看式已達上限。

請移掉一個監看式，讓您可以加入一個您想要的新監看式，或是在「即時運算」視窗中顯示您想知道的值。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


成員識別項已存在於此物件模組所繼承的模組中

物件模組成員所使用的識別項，其名稱不可以與衍生它們的物件模組中的識別項相衝突。這個錯誤的起因與解決方法如下所示：

•	一個在您的物件模組中的程序或資料成員識別項使用了使用了一個已在其被衍生的物件模組中使用的識別項。例如，某個表單中具有 BackColor 屬性，所以下列程式碼會引發此錯誤:

' Form 裡面已經有一個 BackColor 屬性。

0	Dim BackColor As Integer	' 錯誤產生。

1	Function BackColor()	' 錯誤產生。

2	End Function

請改變您物件模組中與成員識別項衝突的識別項。

附註   下列名稱不能用作屬性或方法名稱，因為它們來源於 IUnknown和 IDispatch介面： QueryInterface，AddRef，Release，GetTypeInfoCount，GetTypeInfo，GetIDsOfNames，Invoke。使用這些名稱將引發編譯錯誤。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


方法沒有用在適當的物件

���

並非所有的方法都可以給所有的物件執行。這個錯誤的起因與解決方法如下所示：

•	您呼叫了一個方法，但沒有指定一個物件名稱，且此方法也不適用於隱含物件。例如，在沒有正確的物件定位項情況下，您不能在一般模組中使用 Line 方法。因為一般模組無法顯示 Line 方法的輸出。

請明確地以一個可接受此方法的物件來定位此物件。例如，您可以在一個表單或圖片方塊上指定 Line 方法。

附註   一般模組中還有其他需要明確物件定位項的方法如 Circle、Print 與 PSet。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


沒有右括號

在陳述式中的括號必須成對。這個錯誤的起因與解決方法如下所示：

•	有個左括號並沒有右括號與其配對。

在您要括起來的東西的結束之處，補上一個右括號。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


找不到模組

模組並不是從一個程式碼引用中載入的，它必須是專案中的一部份。這個錯誤的起因與解決方法如下所示：

•	所需要的模組並不在指定的專案中。例如，當 MyModule 不在 MyProject 這個專案時，MyModule.SomeVar = 5 這個陳述式便會產生此錯誤。

想瞭解有關將模組含入專案的資訊，請參閱您主應用程式的文件。


模組太大

���

專案中的模組會包含程式碼。這個錯誤的起因與解決方法如下所示：

•	此模組的程式碼太多了。

建立一個新模組並把原有模組中的一些程序移至此新模組中。若原有模組內有些資料的宣告為模組層次，但卻又必須被新模組所見，請將這些資料宣告成 Public。

附註   註解並不算是程式碼。也就是說刪掉註解並不能免除這項錯誤。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


必須是此行的第一個陳述式

���

並非所有的關鍵字都可以出現在一行程式碼的開頭。這個錯誤的起因與解決方法如下所示：

•	您在同一行中放置了一個 Sub、Function 或 Property 陳述式在另一個陳述式之前。

Sub、Function 或 Property 陳述式必須是一行中的第一個陳述式 (只有關鍵字 Public,、Private 或 Static 可在其前面)。

•	您在同一行中放置了一個 End If、Else 或 ElseIf 陳述式在另一個陳述式之前。

End If、Else 或 ElseIf (只有在一個 If 區塊結構中使用時) 陳述式必須是一行中第一個陳述式。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


名稱與原有的模組、專案或物件程式庫相衝突

模組、物件程式庫及引用專案在專案中必須以唯一的名稱來命名。這個錯誤的起因與解決方法如下所示：

•	在此專案中已經有一個模組、專案或物件程式庫使用了這個名稱。副檔名並不能視為檔名的一部份，所以儘管副檔名不同，也不能用來識別不同的檔案。

請為名稱重複的模組、專案、物件程式庫取一個不一樣的名稱。

•	您企圖新增一個引用到專案、物件程式庫中，而其檔名(不包含副檔名)已與目前專案中的模組之一相同。

請改變此模組的名稱或是改變您要加入的檔案的檔名。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


指名引數已被指定

在每次程序呼叫，所有引數中只能有一個是指名引數。這個錯誤的起因與解決方法如下所示：

•	在一次呼叫中，您指定了相同的指名引數。例如，若程序 MySub 預期指名引數 Arg1 與 Arg2，則下列呼叫便會產生這個錯誤：

Call MySub(Arg1 := 3, Arg1 := 5)

請移除掉重複的引數指定。

•	同樣的引數 ，您不但以位置來指定，又用指名引數的方式來指定，例如：

Call MySub(1, Arg1 := 3)

請移除掉其中一種指定方式。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


不能使用指名引數

指名引數並非在所有的情況都允許使用。這個錯誤的起因與解決方法如下所示：

•	您嘗試用指名引數來指定陣列索引，例如：

MyVar = MyArray(MyNamedArg := 1)

請以普通的變數或常數運算式來指定陣列索引。

•	您嘗試把指名引數指定給一個物件，例如：

MyVar = MyObject(MyNamedArg := 1)

如果該物件需要引數，請使用變數或常數運算式。例如，若某個物件本身在預設情況下就是一個方法，也就是說，此物件的名稱本身便代表一個預設方法。若此方法需要引數，請以位置的方式來指定它。

•	您嘗試把指名引數指定給一個外部名稱：

MyVar = 「MyName」(MyNamedArg := 1)

若外部變數需要引數，請以普通的變數或常數運算式來指定。

•	您嘗試將指名引數指定給一個物件的資料成員，例如：

MyVar = 「MyObject」.MyProperty(MyNamedArg := 1)

若資料成員需要引數，請以普通的變數或常數運算式來指定。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


有 Next ，卻沒有 For

���

一個 Next 陳述式之前一定要有一個 For 陳述式與之配對。這個錯誤的起因與解決方法如下所示：

•	一個 Next 陳述式並沒有與其相對應的 For 陳述式.

請檢查 For...Next 結構內的其他控制結構，看它們是否正確地被配對。例如，在 For...Next 結構內，一個沒有 End If 與之配對的 If 便會產生這個錯誤。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


沒有選取文字

您一定要透過選取文字才能執行這項作業。這個錯誤的起因與解決方法如下所示：

•	在一個 「尋找」 或 「取代」 作業之前，您並沒有選取任何文字。

有些主應用程式容許您在尋找及取代文字時指定選取範圍 ，甚至在沒有文字被選取的情況下也是可以。想選取文字，將游標移至欲選區域的起始處，然後按著 SHIFT 鍵並移動方向鍵或在欲選區域的結束之處按一下滑鼠鍵來完成選取。若您不想要搜尋選取文字，請復原 「選取文字」 選項。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


記憶體不足，無法儲存專案

���

當一個專案要儲存時，通常還要再儲存一些額外的資訊讓這個專案可以在往後的版本或其他平台上被載入。這個錯誤的起因與解決方法如下所示：

•	記憶體不足，無法儲存整個資訊。如果您想在往後版本的 Visual Basic 或其他平台上載入這個專案，這些資訊是必要的。

如果您計畫在一個未來新版本的 Visual Basic 上開啟一個專案，請關閉一些應用程式，然後再儲存。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


未選取監看運算式

當您選擇 「立即監看」 指令前，您必須選擇一個運算式。這個錯誤的起因與解決方法如下所示：

•	您沒有在選擇 「立即監看」 指令前先選擇一個運算式。

在選擇 「快速監看」 前，請先反白 「程式碼」 視窗中您需要的監看運算式。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


不支援物件程式庫的特性

物件程式庫中有些功能可能是 Visual Basic.所沒有的。這個錯誤的起因與解決方法如下所示：

•	您企圖存取一個物件程式庫其中含有 Visual Basic 不支援的資料型態或函數。

請洽詢此物件程式庫的作者來得知何時使用此物件程式庫以及與其搭配使用的工具的相關資訊。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


找不到 Visual Basic for Applications 的物件程式庫

Visual Basic for Applications 物件程式庫不再是一個獨立檔案；現在它被整合到動態連結程式庫 (DLL)中。

0	在一些特殊情況下，可能需要用到前一版本此專案的語系的物件程式庫 (vaxxx.olb 或 vaxxxx.olb)，但卻找不到。這個錯誤的起因與解決方法如下所示：

•	物件程式庫整個不見了、不在預期的目錄中、或是版本不對。

請搜尋您的磁碟，確定物件程式庫是位於主應用程式的文件上所指定的正確的目錄中。

如果找不到的程式庫是由主應用程式 所安裝的。最簡單的解決方法便是重新執行 setup 程式。若一專案需要一個語系物件程式庫，此語系物件程式庫與附在您的主應用程式上的不同(例如，若某人送您一個專案，此專案是在另一台語系設定不同的機器上寫成)，請確定正確語系版本的 Visual Basic 物件程式庫已包含在此專案中專案且已安裝在預期的位置上。

0	對於應用程式的物件程式庫，應用程式可能會支援不同的語系，想知道需要哪些語系，請顯示 「引用」 對話方塊，並察看對話方塊的底部有哪些語系被指定。

1	在每個平台上，物件程式庫以不同的語系版本存在。然而將專案在平台間轉移時，例如，從麥金塔到 Microsoft Windows，該平台正確語系版本的引用程式庫一定要在您主應用程式文件中所指定的位置。請注意有些語系內碼是雙字元，甚至有些是三字元。

2	Visual Basic 物件程式庫的檔名是由下列部分所組成：

•	Windows: 應用程式代碼 + 語系代碼 + 「版本號碼」.OLB。例如：

法文版 Visual Basic for Applications 物件程式庫的第二版其檔名便是 vafr2.olb。

•	Macintosh: 應用程式語系代碼 「版本號碼」 OLB。例如：

法文版 Visual Basic for Applications 物件程式庫的第二版其檔名便是

0	VA FR 2 OLB.

若您找不到在您系統中一個遺失的專案或物件程式庫，請洽詢此引用專案的作者。若遺失的是一個 Microsoft 應用程式物件程式庫，您可以以下列方法來獲得：

•	若您方便取得 Microsoft 電子技術支援服務，請參考此說明檔的技術支援部分。在電子服務下，您將可找到如何使用適當的服務選項。

•	若您沒有 Microsoft 電子技術支援服務，可以以 application note 的形式來索取 Microsoft 物件程式庫。此說明檔的技術支援部分也有關於如何洽詢您當地的 Microsoft 產品支援部的資訊。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


物件程式庫尚未註冊

Visual Basic for Applications 物件程式庫 已不再是一個獨立檔案，現在它已被整合到動態連結程式庫 (DLL)中。

在較早期的版本當中，當您啟動一個使用 Visual Basic for Applications 的應用程式時，特定的物件程式庫會被載入。這個錯誤的起因與解決方法如下所示：

•	您企圖載入前一版本的 Visual Basic for Applications 物件程式庫 (vaxxx.olb) 或主應用程式物件程式庫。然而，卻無法在系統登錄中找到正確的語系版本。

請重新註冊您的應用程式。 在麥金塔上，請從 Macintosh Preferences 檔案夾中刪除 vba.ini 這個檔並重新啟動您的應用程式。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


物件程式庫的語系設定與目前專案的設定不相容

此引用無法被新增。這個錯誤的起因與解決方法如下所示：

•	您企圖新增一個物件程式庫的引用，但其 地區設定與目前專案的地區設定並不相容。所以這個引用不會被新增進去。想使用此物件程式庫，必須先建立一個與它的地區設定相容的專案。

請試著以給定語系來註冊 Visual Basic for Applications 及主應用程式。此物件程式庫便可出現在 「設定引用項目」 對話方塊。

附註   當 Visual Basic 是主應用程式時，改變一個專案的語系設定是不可能的。任何被使用的物件程式庫都必須相容於 English/U.S. 設定。


Visual Basic 不支援的型態

���

並不是所有的變數型態都會在 Visual Basic 中支援。這個錯誤的起因與解決方法如下所示：

•	您在您的程式中使用了一種變數型態，但 Visual Basic for Applications 卻沒有與之等效的變數型態。例如，Visual Basic 中並沒有指標和 unsigned integer 這兩種型態，所以如果您嘗試從物件程式庫中建立一個屬於這兩種型態的變數時，便會產生這個錯誤。在下列範例中，即使 Rainbow 可能是個正確的結構，但若 Visual Basic 無法認可這種型態的話，則 Visual Basic 仍無法建立一個此種型態的變數。

Dim MyVar As Rainbow	' 產生錯誤。

若對一物件程式庫中的一個函數來說，若此變數型態是一個正確的參數型態，這個錯誤只代表您不能在您的程式碼當中建立此種型態的變數。雖然您只能宣告物件文件上所規範的正規資料型態，不過 Visual Basic 中還是有一些等效型態可供使用。例如，雖然 Visual Basic 沒有指標型態，您還是可以利用 AddressOf 運算子 (僅對於Visual Basic 5.0) 將一個函數指標傳入一個 API 函數中。您可以把這些等效型態當作是 Visual Basic 中不直接提供的型態來使用。然而，在一些情況下，Visual Basic 可能連等效型態都沒有。例如，普通的資料指標便完全沒有等效型態。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


只有註解可以放在 End Sub、End Function 或 End Property 後面

���

只有註解、指令、及宣告可以在程序外面。這個錯誤的起因與解決方法如下所示：

•	您在程序外面放置了可執行的程式碼。

任何程序外的非宣告列都必須由一個註解符號 (') 起頭。宣告性陳述式必須出現在第一個程序宣告之前。當程式碼執行時註解會被忽略掉。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


選擇性 (Optional) 引數必須為 Variant 型態

���

選擇性引數可以是任何內建資料型態，但它必須是一個單一且有預設值的型態。這個錯誤的起因與解決方法如下所示：

•	您嘗試將無預設值的參數，如陣列指定為 Optional。

請確定任何指定為 Optional 的引數都是有預設值的。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


在物件模組中不可以有 Option Private 模組

���

Option Private Module 陳述式可以使一模組的內容無法出現在其他專案，也就是此模組只保留給您的專案。這個錯誤的起因與解決方法如下所示：

•	陳述式 Option Private Module 出現在一物件模組中

請先從模組中移除 Option Private Module 陳述式。物件模組內定就是有 Option Private Module 的特性。您無法從程式碼中來改變這種預設特性。想知道如何讓物件模組成員可以被較廣泛地存取，請參閱您主應用程式的文件。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


記憶體不足；一些監看式可能已被刪除

當您的系統將記憶體耗盡時，監看運算式會被刪除掉以得到充足的記憶體來解決這種困境。這個錯誤的起因與解決方法如下所示：

•	您載入了太多應用程式、專案或模組。

為了繼續工作，請從記憶體中移除掉任何可有可無的項目，包括任何已經不必要的應用程式、專案或模組。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


資源不足

某種叫 "handles" 的資源，用來處理內部許多運作。這個錯誤的起因與解決方法如下所示：

•	您的程式已經達到了某種資源限制。

請試著儲存、關閉及重新載入您的程式。若仍然會發生這個錯誤請減少程式碼中物件的引用次數。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


ParamArray 必須宣告為一個 Variant 陣列

���

每個引數 與相對應的 ParamArray 參數可以是不同的資料型態。因此，參數本身必須宣告為一個 Variant 型態的陣列。您可以提供任何數量的引數給 ParamArray。當呼叫發生時，呼叫所提供的每個引數都會變成 Variant 陣列中一個相對應的元件例如：

Sub MySub(ParamArray VarArg())

0	. . .

1	End Sub

2	Call MySub ("First arg", 2, 3.54)

這個錯誤的起因與解決方法如下所示：

•	在程序的定義中，ParamArray 參數被定義成一個某種 Variant 型態以外的陣列。

請重新將參數型態宣告成一個 Variant 陣列。

•	雖然沒有把 ParamArray 參數指定為任何資料型態，但卻把程序定義在一個 Deftype 陳述式的有效範圍內，故參數會被隱含宣告為一個 Variant 以外的型態。

請在 ParamArray 參數規格上加上一個明確的 As Variant 子句。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


有關這個主題的詳細資訊，請參閱 Readme 檔案

在說明檔完成後，此產品仍然會有一些額外的說明主題。這些主題的說明解釋可以在主應用程式的 Readme 檔案中找到。

0	詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


Private Enum和使用者定義型態不可作為參數或傳回值，亦不可作為公用程序，公用資料成員，或公用使用者定義型態的資料欄

���

Public 程序是可以被專案內的所有模組所見的，而 Private Enum 型態則不可以被其模組以外之處所見。這個錯誤的起因與解決方法如下所示：

•	您的 Public 程序是在一個 Public 類別中，但它的傳回值或某一參數卻是定義在一個一般模組或 Private 類別中。

請將其宣告為 Enum Public。它必須處於一個物件類別模組中

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


程序太大

當編譯時，一個程序編譯出來的程式碼不可以超過 64K。這個錯誤的起因與解決方法如下所示：

•	當編譯時，此程式編譯出來的碼超過 64K。

請將此程序及其他太大的程序分割成兩個或數個較小的程序。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)(在 Macintosh 上)。


專案含有太多程序、變數及常數名稱

•	一個專案的程序、變數、常數及參數的名稱是儲存在名稱表格中。這個錯誤的起因與解決方法如下所示：

•	專案中的名稱表內的名稱個數超過了 32,768。

名稱表格內可能有一些內容是臨時性的複製。您可以利用將專案儲存至磁碟上並關閉它來緊縮名稱表。若在您重新開啟此專案後這個問題還是存在，請利用區域變數名稱可以在多個程序間重新使用的特性來減少名稱的使用，然後再儲存、關閉並重新開啟專案來重新緊縮名稱表。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)(在 Macintosh 上)。


找不到專案

找不到專案。這個錯誤的起因與解決方法如下所示：

•	您指定了一個無法找到的專案名稱。

請檢查您指定專案的方式是否有任何錯誤。

詳細資訊，請選擇有疑問的項目，並按下 F1。


不可在模組層次中使用定位名稱 (Qualified name)

在一些情況下，一些主應用程式不允許有包含有定位名稱的程序呼叫。這個錯誤的起因與解決方法如下所示：

•	在一個程序呼叫中，您可用「點」表示法 (定位項.項目) 來指定一個模組名稱。

您得到這個錯誤可能是因為該主應用程式已經知道定位項，所以在程序呼叫中不再需要這項資訊。在這種情況下，您可以直接把定位項整個拿掉，該主應用程式會正確地處理這個程序呼叫。想知道定位名稱其他限制的原因，請參閱該主應用程式的文件。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


定位項必須是集合物件

只有在集合物件中，才會出現一個位於兩識別項間的驚歎號。這個錯誤的起因與解決方法如下所示：

•	您在驚歎號 (!) 左邊所使用的名稱並不是一個集合物件的名稱。

假設此名稱是個集合物件，請確定它的拼法正確。請注意驚歎號剛好也是個 Single 資料型態的型態宣告字元。若這個有問題的名稱不是一個集合物件，那麼有可能是加在變數名稱後的 ! 型態宣告字元不小心連接到另一個名稱。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


範圍沒有值

陣列的元件個數的指定方式是有限制的。這個錯誤的起因與解決方法如下所示：

•	您不正確地指定了您的陣列上下限。例如，下列的陣列範圍都是不正確的：

Dim MyArray(10 To -5)	' 不可以遞減。

0	Dim MyArray(0 To 0)	' 陣列中沒有元件。

請確定您的語法是正確的。例如， 以下的陣列範圍是正確的：

Dim MyArray(-5 To 10)

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)(在 Macintosh 上)。


RSet 只能用於字串

���

RSet 是用來讓固定長度或變動長度的字串向右靠齊。這個錯誤的起因與解決方法如下所示：

•	您嘗試把 RSet 陳述式用在一個非字串的變數。

可以的話，請試著將此變數轉換為一個字串，要不然就不要用 RSet。

附註   縱然 LSet 陳述式可以用來將使用者自訂型態變數中的一個元件指定給一個不同型態但相容的使用者自訂型態變數的元件，但這種指定動作是不被鼓勵的，因為不能保證這種做法的可攜性。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)(在 Macintosh 上)。


執行階段錯誤

這個錯誤是使用者自訂的，它的起因與解決方法如下所示：

•	發生了一個錯誤，Visual Basic 中沒有可以與之相對應的錯誤。

請按照產生此錯誤的物件或物件程式庫的文件中所述，來處理這項錯誤。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)(在 Macintosh 上)。


搜尋的字串太長或太複雜

���

Visual Basic 的模式比對能力並非無限。這個錯誤的起因與解決方法如下所示：

•	您指定的搜尋字串太長了，或是無法理解其萬用字元的組合。

請減少搜尋字串的長度或複雜程度後在做一次搜尋。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


必須指定搜尋字串

���

您必須指定搜尋字串。這個錯誤的起因與解決方法如下所示：

•	您嘗試在未指定比對字串前就要開始一項搜尋作業。

您必須指定搜尋字串。您可以將取代字串指定為一個長度為零的字串，不過對一個搜尋字串來說，長度為零的字串是沒有意義的。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


找不到搜尋文字

���

找不到搜尋文字。這個錯誤的起因與解決方法如下示：

•	在搜尋範圍的起始點與結束點之間找不到任何符合的文字。

如果您要繼續搜尋，您可以擴大搜尋範圍。.

•	當使用一個模式比對運算式時，您沒有提供左括號。

請提供左括號。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


檔案搜尋失敗：無法從磁碟中讀寫

���

Seek 陳述式是直接在磁碟上實際動作的。這個錯誤的起因與解決方法如下所示：

•	您企圖去讀取一個防寫、唯讀或鎖住的磁碟或檔案。

請將防寫屬性移除掉或改變唯讀屬性或改變鎖定狀況，請注意若檔案已經被另一行程鎖定，您將解除這項鎖定。

•	這個檔案已經不存在了，例如，一個抽取式磁碟已經被實際地抽換了。

如果這個檔案曾經移到另一磁碟上，請從另一磁碟存取它。否則，您無法存取此檔案。

•	您企圖讀取一專案檔、物件程式庫或型態程式庫，但此檔案已經被損毀了。

請取得一份此程式庫或專案檔的新備份。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


有 Select Case，卻沒有 End Select

���

每個 Select Case 必須有一個 End Select 陳述式來結尾。這個錯誤的起因與解決方法如下所示：

•	您使用了一個 Select Case 陳述式 但卻沒有與其相對應的 End Select 陳述式。

請檢查是否有個不成對的 Select Case...End Select 結構在另一個 Select Case...End Select 結構內。如果您的程式碼中的 Select Case 陳述式是巢狀的，則每個都要有一個 End Select 與之配對。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


選取的監看運算式不正確

���

您不可能每次選到的監看運算式都是正確的。這個錯誤的起因與解決方法如下所示：

•	您選擇 「立即監看」 指令，但所選擇的運算式 並不是一個正確的運算式。例如，您不能去監看一個註解或一個 Sub 程序呼叫。

請以正確的方式以選擇到正確的運算式，或選擇 「新增監看式」 並鍵入一個正確的運算式。

•	監看式必須以此專案的地區設定的程式碼語法來定義要被監看的運算式。

請以可以符合地區設定的方式來重寫運算式。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


Set Next 陳述式只適用於目前程序中可執行的程式行

您可以選擇 「設定下個執行點」 指令來指示當這個中斷的程式繼續執行時應該要從何處開始執行。這個錯誤的起因與解決方法如下所示：

•	當您選擇這個指令，游標所位在的那一行並沒有可執行陳述式。

將游標放在一個有可執行陳述式的行然後再試一次。宣告、行標籤及註解都不能被執行，所以那些只有宣告、標籤及註解的行都不能當作 「設定下個執行點」 指令的目標

•	當您選擇指令，游標處在的那一行是在目前執行的程序之外。

將游標移至目前執行程序中的一行上。


必須有 SHARE.EXE

在您開始 Visual Basic 前必須先執行 share.exe 這支程式。這個錯誤的起因與解決方法如下所示：

•	您並沒有在開始 Visual Basic 前先執行 share.exe。

關閉您的應用程式，啟動 share.exe，然後再重新啟動您的應用程式。若希望以後都可以避免掉這個錯誤，請再您的 autoexec.bat 檔加上一行對 share.exe 的啟動，如此便可以在每次開機時自動啟動 share.exe。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


指定的程式庫或專案早已被引用了

「設定引用項目」對話方塊顯示被引用的程式庫及專案。這個錯誤的起因與解決方法如下所示：

•	您選擇「設定引用項目」對話方塊中的「瀏覽」按鈕，然後選擇了一個型態程式庫或專案，但此型態程式庫或專案卻已列在 「設定引用項目」 對話方塊中的「可引用的項目」。

想讓一個專案或物件程式庫成為您專案中的一部份，請顯示 「設定引用項目」 對話方塊，並確定此型態程式庫或專案名稱已被核取。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


Type 程式區塊中有不正確的陳述式

���

只有元件名稱及其 As type 子句及註解可以出現在 Type...End Type 陳述式區塊內。這個錯誤的起因與解決方法如下所示：

•	您把一個不正確的陳述式放在使用者自訂型態的定義中。

除了註解、元件名稱及 As type 子句，請移除掉以外的任何東西。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


Type 程式區塊外有不正確的陳述式

���

Type...End Type 陳述式區塊外的變數的宣告語法與使用者自訂型態的元件的宣告語法是不一樣的。這個錯誤的起因與解決方法如下所示：

•	您嘗試在一 Type...End Type 區塊外或一陳述式外宣告一變數。

當在一個 Type...End Type 區塊外以 As 子句宣告一變數時，請使用下列的宣告性陳述式，Dim、ReDim、Static、Public 或 Private。例如，下列程式碼中 MyVar 的第一個宣告便會產生這項錯誤，第二及第三個 MyVar 宣告則是正確的：

MyVar As Double	'不正確的宣告語法。

0	Dim MyVar As Double

1	Type AType

2	MyVar As Double	' 這是一個正確的宣告語法

3	End Type	' 因為它位在 Type 區塊內。

•	您使用了一個 End Type 陳述式，但卻沒有與之相對應的 Type 陳述式。

請檢查是不是有一個落單的 End Type，若這個 End Type 陳述式是多出來的，就把它刪除掉。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


陳述式太複雜

���

Visual Basic 無法分析這個陳述式。這個錯誤的起因與解決方法如下所示：

•	您的陳述式由無太複雜故無法被分析。

請將這個陳述式分成幾個較小的部分，或著以邏輯運算子及If...Then...Else 陳述式的組合來降低條件子句的複雜程度。

•	您的陳述式或函數使用了太多的巢狀函數呼叫。

請早點進行函數呼叫並將結果存放一變數中；然後在引起此錯誤的陳述式中使用此變數。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


在 Select Case 與第一個 Case 陳述式間，有不正確的陳述式或標籤

���

除了註解 之外，您在 Select Case 陳述式與第一個 Case 子句之間不可以放置任何東西。這個錯誤的起因與解決方法如下所示：

•	您在 Select Case 與第一個 Case 子句間放了一個陳述式。例如：

Select Case SomeVar

0	' 這是一行註解且放在這裡是正確的。

1	Stop	' 在這裡即使只是一個陳述式也是不正確的。

2	Case SomeValue

3	. . .

4	End Select

在 Select Case 陳述式之後必須立即接上它的第一個 Case 陳述式。如果想在之間置放的運算式只是一行註解而已，請記得以註解符號 (') 開頭。否則的話請將此運算式移至有用的地方或將其刪除掉。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


語法錯誤

���

Visual Basic 無法判斷該採取什麼動作。這個錯誤的起因與解決方法如下所示：

•	一個關鍵字或引數拼錯了。

關鍵字及指名引數的名稱必須完全符合它們的語法規格。請查閱線上說明，並更正拼法。

•	標點符號不正確。

例如，當您把選擇性引數拿掉時，您必須補上一個逗號 (,) 以填補您拿掉的引數的空缺。

•	一個未經定義的程序。

請檢查程序名稱的拼法。

•	您嘗試在一程序宣告中同時指定 Optional 及 ParamArray。

一個引數不可以既是 ParamArray 又是 Optional。請選擇其一並刪除另一個。

•	您嘗試用一個 Optional或 ParamArray參數定義一個事件程序。

從參數指定中移除 Optional或 ParamArray關鍵字。

•	您嘗試在 RaiseEvent 陳述式中使用一個指名引數。

事件不支援指名引數。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


與先前版本相容的 DLL 或 EXE 包含找不到定義的 Implements 型態

��� [image] ��� [image] ���

如果您有與先前版本相容的伺服器，而且該伺服器提供了一個包含在其他 DLL 中的介面，那麼當您在重新編譯時必須非常小心。這個警告的起因與解決方法如下所示：

•	其他的 DLL 會重新編譯成與專案相容，並且改變了介面 GUID。由於這項改變是看不到的，因此它可能是無法預期的錯誤。而如果某人提供您引用與專案相容的 DLL 時，亦可能發生此情形。

基本上，當專案中與先前版本相容的 DLL 或 EXE 中包含不完整引用的 typelib 時，便會發生此錯誤。而不完整引用發生的時機可能是其他檔案 (例如重新編譯的 DLL/EXE) 覆寫了引用的 typelib 時、當您刪除 typelib 檔時、或是當您將正在引用的 typelib 移到機器上，但沒有移動已引用的 typelib 或沒有已為引用的 typelib 註冊時。

0	修復此錯誤的可能方式之一，是取得一份引用 typelib 的複製，將其放到機器中並為它註冊。但是如此一來，您將無法再使用舊的 typelib 檔案，因為在重新編譯時，它已由新的 typelib 檔將其覆寫了。如果這個方法沒有用，就不能再使用 DLL/EXE 作為與先前版本相容的版本了。


與先前版本相容的 DLL 或 EXE 包含找不到定義的參數型態或傳回型態

��� [image] ��� [image] ���

如果您有與先前版本相容的伺服器，而且該伺服器包含了一個位於其他 DLL 中的參數或傳回類型時，那麼當您在重新編譯時必須非常小心。這個警告的起因與解決方法如下所示：

•	當您在專案中設定與先前版本相容的版本，然後重新編譯專案時，與專案相容也會自動設定，而改變介面的內部 GUID。由於這項改變是看不到的，因此它可能是無法預期的錯誤。

基本上，當專案中與先前版本相容的 DLL 或 EXE 中包含不完整引用的 typelib 時，便會發生此錯誤。而不完整引用發生的時機可能是其他檔案 (例如重新編譯的 DLL/EXE) 覆寫了引用的 typelib 時、當您刪除 typelib 檔時、或是當您將正在引用的 typelib 移到機器上，但沒有移動已引用的 typelib 或沒有已為引用的 typelib 註冊時。

0	修復此錯誤的可能方式之一，是取得一份引用 typelib 的複製，將其放到機器中並為它註冊。但是如此一來，您將無法再使用舊的 typelib 檔案，因為在重新編譯時，它已由新的 typelib 檔將其覆寫了。如果這個方法沒有用，就不能再使用 DLL/EXE 作為與先前版本相容的版本了。


所作的修改會使這個物件類別模組與先前所指定的「相容的 ActiveX 元件」不相容

若一個相容 ActiveX 元件已經存在先前的執行檔或動態連結程式庫(DLL)中，您必須小心別改到它的介面。這個警告的起因與解決方法如下所示：

•	您正嘗試編輯一個物件模組的程式碼，但此物件模組已經由可執行檔的形式來表示的。

如果您所作的更動會影響到此物件的介面，此類別將無法與前一版本向上相容且新版編譯出來的碼將無法在舊版使用。

0	在 Visual Basic 中，當您選擇 「專案」 功能表中的 「元件」 時，相容 ActiveX 元件的名字會出現在對話方塊裡。

重要   要接受編輯，請按一下錯誤訊息對話方塊中的「確定」。如果您要復原編輯，請按一下「取消」按鈕。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


指定的區域已搜尋過了

如果您按下的是「取代」對話方塊中的「尋找下一個」或「取代」 按鈕，那麼取代了多少個是不會告訴您的。這種情況是由以下原因所產生且會照成下列這些影響：

•	當進行一個搜尋及取代作業時，您可以指定涵蓋區域 - 選取文字、程序、模組或專案。

若您曾選取一區域，那麼此區域就會變成預設區域。若之前沒有選擇過任何區域，則目前模組便是預設區域。想改變搜尋範圍，請選取 「取代」 對話方塊中另一個不同的搜尋選項。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


指定的區域已搜尋過，共執行了 1 項取代

當您按下「取代」對話方塊中的「全部取代」按鈕後，這個訊息會告訴您取代了多少個。這種情況是由以下原因所產生且會照成下列這些影響：

•	當進行搜尋與取代作業時，對於指定的搜尋文字只找到一個。您可以指定涵蓋區域 - 選取文字、程序、模組或專案。

若您曾選取一區域，那麼此區域就會變成預設區域。若之前沒有選擇過任何區域，則目前模組便是預設區域。想改變搜尋範圍，請選取 「取代」 對話方塊中另一個不同的搜尋選項。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


以搜尋過指定的區域並做完取代

當您按下「取代」對話方塊中的「全部取代」按鈕後，這個訊息會告訴您取代了多少個。這種情況是由以下原因所產生且會照成下列這些影響：

•	當進行一個搜尋及取代作業時，您可以指定涵蓋區域 - 選取文字、程序、模組或專案。

若您曾選取一區域，那麼此區域就會變成預設區域。若之前沒有選擇過任何區域，則目前模組便是預設區域。想改變搜尋範圍，請選取 「取代」 對話方塊中另一個不同的搜尋選項。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


此專案的 .vbp  檔案中含有一個不正確或損毀的程式庫引用識別碼

���

當您儲存一專案時，若您曾在「設定引用項目」對話方塊中選擇一個引用，則會在此專案的 .vbp 檔中(在早期版本的 Visual Basic 中叫 .mak 檔) 留下一個項目。 例如，資料存取物件的項目就像這樣：

Reference=*\G{00025E01-0000-0000-C000-000000000046}#0.0#0#C:\WINDOWS\SYSTEM\DAO2516.DLL#Microsoft

0	DAO 2.5 Object Library

當一個引用已經被編輯或者損壞時便會產生此錯誤。這個錯誤的起因與解決方法如下所示：

•	此 .vbp 檔中其中一個引用已經變得不正確了。

請從 .vbp 檔中刪除掉此不正確的列，並從 「專案」 功能表下的 「引用」 對話方塊中核取適當的物件程式庫。然後儲存此專案，正確的資訊便會輸入到此 .vbp 檔中。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


此元件不會引起任何事件

���

一事件程序必須有一相對應的事件，此事件可由某一物件來引發。這個錯誤的起因與解決方法如下所示：

•	您為一個不引發事件的物件寫了一個事件程序。

不要寫一個沒有相對應事件的事件程序。

•	您嘗試在不引發事件的類別上使用 WithEvents。

不要在不引發事件的類別上使用 WithEvents。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


引數太多

���

一個程序至多只能有 60 個引數。這個錯誤的起因與解決方法如下所示：

•	您指定的引數超過了 60 個。

若您真的必須指定超過 60 個引數，請定義一個使用者自訂型態來將多個不同型態的引數收集到其中，或是使用一個 ParamArray 為最後引數然後傳遞多個值給它。您亦可將多個引數擺到一陣列中來傳遞。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


維數太多

���

陣列的維數不可以超過 60。這個錯誤的起因與解決方法如下所示：

•	您嘗試宣告一個維數超過 60 的陣列。

請減低維數。

•	雖然您的陣列宣告沒有超過此維數限制，但卻沒有足夠的記憶體來建立此陣列。

請清出更的的記憶體或是降低維數。若您的陣列是一個 Variant 型態的陣列或是被包含在一個 Variant 型態中， 您可能可以以其元件的資料型態來重新宣告此陣列。例如，若此陣列只包含整數，請將它宣告為 Integer 型態的陣列，比起每個元件都是 Variant，這樣佔用的記憶體比較少。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


太多換行接續符號

您能以換行接續符號來連接的列數是有限制的。這個錯誤的起因與解決方法如下所示：

•	您的程式碼中有出現以換行接續符號連接起超過 25 列實體行，或單一行中超過 24 個連續的換行接續符號。

盡量減少換行接續符號，或是將這些連續的程式行切成多個陳述式。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


區域、非靜態變數太多

���

區域、非靜態變數是定義在一個程序內且會在每次這個程序被呼叫時被重新初始。這個錯誤的起因與解決方法如下所示：

•	這個程序的區域、非靜態變數及編譯器所產生的暫時性變數所佔用的記憶體總和超過了 32K。

請將您的一些變數以 Static 陳述式宣告。Static 變數可以在程序間的相互呼叫保留其自身的值。因為它們所佔用的記憶體資源與非靜態變數所佔用的是不一樣的。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


模組層次的變數太多

���

模組層次變數是那些宣告在模組的宣告區中的變數、在模組的程序之前。這個錯誤的起因與解決方法如下所示：

•	此模組中所有的模組層次變數所佔用的記憶體超過了 64K。

這是此模組的儲存限制。如果可以的話，您可以把您的一些變數放在別的模組中，並宣告為 Public，或是若有些模組層次變數只在一個程序中有用到，您可以在該程序中宣告該變數。如果您將變數宣告在模組層次是因為您想讓它們即使在程序的相互呼叫間依然能保持它們的值，您可以在它們被引用的程序內將它們宣告成 Static。

附註   ���在不同的作業系統可用空間可能會不一樣。

詳細資訊，請選擇有疑問的項目，並按下 F1。


型態宣告字元與宣告的資料型態不相符

一變數的資料型態 是不會被加在其後的型態宣告字元 所改變的。這個錯誤的起因與解決方法如下所示：

•	您宣告一指定型態的變數，在同樣的範圍 內以同樣的名稱來引用它，然而卻附加在其名稱後一個不一致的型態宣告字元。

若您希望能夠改變指定給變數的資料的型態，請將此變數宣告為 Variant。如果您只是不小心加了一個不正確的型態宣告字元，請將其更正。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


不能有型態宣告字元

���

在 Visual Basic 中是可以使用型態宣告字元，但有些資料型態 (包括 Byte、Boolean、Date、Object 與 Variant) 是沒有型態宣告字元的。這個錯誤的起因與解決方法如下所示：

•	您嘗試在一個變數宣告中使用型態宣告字元，但此變數已經搭配 Dim、Static、Public 及等等使用了 As 子句。

請移掉型態宣告字元或是 As 子句。

•	您嘗試使用型態宣告字元來引用一變數，但此變數先前隱含宣告時並沒有指定型態宣告字元：

MyVar = 20	' 隱含宣告。

0	MyVar% = 25	' 錯誤產生。

請移掉型態宣告字元或重新宣告原變數。

附註   若一個明確的變數宣告中有型態宣告字元，之後對其引用時，此字元是可以省略的。例如：

Dim MyStr$

0	MyStr = "Because it was explicitly declared, the $ is optional."

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


必須有型態宣告字元

是否有必要使用型態宣告字元取決於識別項的宣告形式。這個錯誤的起因與解決方法如下所示：

•	一個原本以型態宣告字元隱含宣告的變數，卻沒有以型態宣告字元來引用它。例如：

MyStr$ = "Implicit declaration"

0	MyStr = "Trying to refer to MyStr$, but error results" _

1	 & "from calling it MyStr."

請用明確的宣告或是在其後的引用加上型態宣告字元。

附註   若一個明確的變數宣告中有型態宣告字元，之後對其引用時，此字元是可以省略的。例如：

Dim MyStr$

0	MyStr = "Because it was explicitly declared, the $ is optional."

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


型態不符合：必須是陣列或使用者自訂型態

���

引數或是參數的型態包含它是否是一陣列或是一使用者自訂型態。這個錯誤的起因與解決方法如下所示：

•	您準備將陣列或是使用者自訂型態中的一個元件、一簡單的變數、literal、常數指定給您的引數。然而，參數預期會傳入的則是整個陣列或使用者自訂型態。

請改變引數或是改變參數定義。

•	您準備將一陣列或使用者自訂型態指定給您的引數，但這些陣列的型態或使用者自訂型態卻與參數中所定義的不同。

請傳入一個陣列其型態是參數所預期的，或是改變參數宣告的定義。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


無法從磁碟中讀取

讀取磁碟時發生一個一般性錯誤。這個錯誤的起因與解決方法如下所示：

•	磁碟機門沒有關好。

若磁碟是可抽取的，請檢查磁碟機門。如果有必要的話把它關好。

•	磁碟片可能插反了。

請依正確方向重新插入磁碟片。

•	磁碟片可能沒有正確地格式化。

如果您不在意損失目前存在上面的資料，請重新格式化磁片。

•	您遭遇到一個網路上的問題。

請重新啟動您的網路。

•	您插入的磁片式是某種密度，使得磁碟機無法閱讀。

請換另一台磁碟機，或是把您要的資料拷貝到您的磁碟機所能讀取的磁碟片中。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


無法寫入磁碟

在寫入磁碟時發生一個一般性錯誤。這個錯誤的起因與解決方法如下所示：

•	磁碟機門沒有關好。

若磁碟是可抽取的，請檢查磁碟機門。如果有必要的話把它關好。

•	磁碟片可能插反了。

請依正確方向重新插入磁碟片。

•	磁碟片可能沒有正確地格式化。

如果您不在意損失目前存在上面的資料，請重新格式化磁片。

•	您遭遇到一個網路上的問題。

請重新啟動您的網路。

•	您插入的磁片式是某種密度，使得磁碟機無法閱讀。

請換另一台磁碟機，或是把您要的資料拷貝到您的磁碟機所能讀取的磁碟片中。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


無法預期的錯誤，請洽詢 Microsoft 技術支援部門

���

這種情況可能嚴重也可能不嚴重。這個錯誤的起因與解決方法如下所示：

•	在主應用程式或 Visual Basic 中，發生了一個非預期的錯誤。

您不必假設這是一個嚴重的錯誤。不過您應該留意錯誤代號並將其回報給 Microsoft 技術支援部門。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


搜尋字串中有不成對的括號

一個左括號一定要有一個右括號與它配對。這個錯誤的起因與解決方法如下所示：

•	您在一個搜尋字串中設置了一個括號，但卻沒有與其成對的括號。

請在適當位置擺上一個可以與此括號成對的括號。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


無法辨識此專案所使用的語系

這個要被載入的專案其指定的 code locale 並不被這個應用程式支援。這個錯誤的起因與解決方法如下所示：

•	這個專案是在支援此 code locale 的系統上建立的，但後來卻被移到一個不能辨認此code locale 的系統。例如，目前機器的 ole2nls.dll 可能就不認識此 code locale。

請在目前的系統安裝合適的動態連結程式庫(DLL)。

•	找不到這個專案的正確的物件程式庫。

請確定正確的物件程式庫是否在正確的地方，例如，確定您的路徑有把這些物件程式庫的所在目錄包含進去。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


使用者自訂型態不能以 ByVal 的方式傳遞

���

使用者自訂型態只能傳址 (預設值)，而不能傳值。這項錯誤可能直到執行到此呼叫時才會回報。這個錯誤的起因與解決方法如下所示：

•	您在一個使用者自訂型態的參數定義中放置了一個 ByVal 關鍵字。

請移除這個 ByVal 關鍵字。如果您不希望因程序或函數的呼叫而造成引數的改變，宣告一個該型態的臨時變數 然後將此變數傳入此程序中。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


使用者自訂型態尚未定義

���

在 Visual Basic 中您可以建立您自己的資料型態，但它們必須先在 Type...End Type 陳述式中或是在一個註冊過的物件程式庫、型態程式庫中被定義，這個錯誤的起因與解決方法如下所示：

•	您嘗試以一個未定義的資料型態來宣告變數或是引數，或者是您指定了一個未知的類別或是物件名稱。

請在一個模組中使用 Type 陳述式來定義新的資料型態。若您正嘗試建立一個類別的引用，則這個類別必須要被專案所見。若您正在引用一個在您程式中的類別，您必須有一個類別模組在您的專案中有特定名稱。

•	您想宣告的型態是在另一個模組中，但是這個型態已經被宣告成 Private。

請在一般模組中定義此型態，這樣可以讓它成為 Public。

•	這是一個正確的型態，但是定義它的物件程式庫或型態程式庫並沒有在 Visual Basic 中註冊。

請顯示「設定引用項目」對話方塊，然後選擇適當的物件程式庫或是型態程式庫。例如，如果您不選定「設定引用項目」對話方塊中的 Data Access Object，一些型態像是 Database、Recordset、TableDef 就會無法被辨識，然後在程式碼中引用它們便會產生此錯誤。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


使用者自訂型態不能沒有成員

���

使用者自訂型態中最少要有一個元件。這個錯誤的起因與解決方法如下所示：

•	您在 Type...End Type 定義中指定了一個空的使用者自訂型態。

請檢查 Type 陳述式中是否有註解符號是不小心放上去的。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


變數未定義

���

您使用 Option Explicit 陳述式來保護您的模組，讓模組裡面不要有任何未經宣告的變數，如此可以避免因編輯錯誤而導致建立新變數的可能性。這個錯誤的起因與解決方法如下所示：

•	您已經使用了 Option Explicit 陳述式來要求變數必須明確宣告，但您卻仍然在不經宣告的情況下使用一變數。

請明確地宣告此變數，或是如果您是不小心拼錯變數名稱，請將其更正。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


此處尚未建立所需的變數

在「監看」視窗或「即時運算」視窗裡顯示一個變數或是在「即時運算」視窗中指定值給此變數之前，您必須建立此變數。這個錯誤的起因與解決方法如下所示：

•	您嘗試還沒在中斷模式下執行「單步執行」指令之前，就顯示一個變數

逐行執行程式碼以強制編譯這個新的陳述式。

•	您嘗試顯示一個剛加到程序中的區域變數的值，但這個程序是整個呼叫鏈結中的最下，也就是在 「呼叫堆疊」 對話方塊中是屬於較下面那些程序。

您必須真正回到該程序才能顯示該變數。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


必須是變數 - 無法指定給這個運算式

���

這個錯誤通常都發生在您企圖將一個值指定給一個無法接受這項指定的某個東西。這個錯誤的起因與解決方法如下所示：

•	您企圖使用數值運算式來當作 Len 函數的引數。

Len 函數不接受數值運算式、數值 literal 及二進位數值運算式，但它接受字串、數值變數、字串運算式及使用者自訂型態變數。

•	您使用函數呼叫或是運算式做為 Input #、Let、Get、Put 的引數。例如，您可能曾使用一個引數，這個引數看來似乎是一個對陣列變數的正確引用，但事實上是一個同名的函數呼叫

請不要將函數呼叫做為 Input #、Let、Get、Put 的引數。

•	您企圖指定一個值給一個先前已宣告為常數的識別項。

請更改識別項的名字。

•	您嘗試使用一個非變數來當作 For...Next 的計數器。

請使用變數來當計數器。

•	您嘗試指定一值給一個唯讀屬性或一個包含超過一個變數 (如 X + Y) 的運算式。每一個指定都會將一個值放在記憶體中的一個位置。您所指定的運算式必須代表一個單一可寫入的位置。

請將指定寫到一個單一、可接受資料的變數名稱。

•	您嘗試使用一個未經宣告但已在型態程式庫中定義為常數的變數。

請改變此變數的名字，或是明確的宣告它。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


警告：所指定的語系設定無法跨平台

並非所有的語系設定都具可攜性：

•	您正在您的程式碼中使用一個自訂的語系設定。

當您為您的程式碼中選擇一個自訂的語系／地區選項設定時，程式碼中的語言習慣便會依據系統「控制台」中該語系的設定。您可以使用自訂的地區設定，但您的程式碼可能無法在其他地區設定或其他設定不同的系統上運作。主應用程式會依據它所執行的機器上「控制台」中的設定來分析一些字串。

0	若目標機器的 「控制台」 中的設定與撰寫程式碼的機器不同，由主應用程式分析出來的字串便無法運作，例如，有些程式碼是與小數點符號相關，而每個地區的小數點符號都不一樣。所以，除非您不準備把您的式送給其他使用者，不然您不應該使用一個自訂的語系設定。如果您計畫將您的程式送給其他使用者，請選擇一個已定義好的地區設定。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


有 Wend，卻沒有 While

���

每個 Wend 陳述式必須有一個與其對應的 While 陳述式在前。

•	您在沒有前置 While 陳述式的情況下，使用了一個 Wend 陳述式。

請檢查引起這個問題的 While...Wend 迴圈內是否有一個無窮迴圈。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


有 While，卻沒有 Wend

���

一個 While 陳述式在缺乏與其對應的 Wend 陳述式的情況下被使用。這個錯誤的起因與解決方法如下所示：

•	您準備要建構一個 While...Wend 區塊，卻沒有用適當的 Wend 陳述式來結束它。

在一個 While...Wend 結構內可能還有個 While...Wend 結構，請檢查它是否不正確地被對應。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


With 物件必須是使用者自訂型態、Object，或 Variant

���

並不是所有型態的變數都可以在 With...End With 區塊中使用。這個錯誤的起因與解決方法如下所示：

•	您試著在一個 With 區塊中使用一個不是 Object 型態、使用者自訂型態、或 Variant 型態的變數。

請檢查是否您拼錯了物件、使用者自訂型態、或 Variant 變數的名稱。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


維數不正確

���

您引用一個陣列 時，其索引數目必須與陣列宣告時的維度相同。這個錯誤的起因與解決方法如下所示：

•	您以不同於一陣列本身實際的維度來引用一個陣列。例如，有個陣列的定義為 Dim X(5) (一維陣列)，如果您用 X(2,4) (二維陣列)的方式來引用它，便會產生此錯誤。

請檢查該陣列的宣告並檢查是否每個引用之處其索引數目都與此陣列的宣告維度相同。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


此操作將重設您的專案 - 繼續嗎？

您可以在中斷模式中編輯程式碼，但某些部分的編輯動作會造成停止繼續執行。這個錯誤的起因與解決方法如下所示：

•	您企圖進行一個會停止繼續執行的編輯動作。例如，您宣告了一個靜態變數。

如果您選擇了「是」，則將會停止執行，接下來您便可編輯您的程式碼。若您選擇「否」，則可以從中斷點繼續執行程式碼。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


您必須以 #End If 來結束 #If 區塊

���

#If 是一個條件編譯指令。這個錯誤的起因與解決方法如下所示：

•	偵測到了一個 #If 區塊並沒有被 #End If 所終止。

請把 #End If 加到適當位置。

詳細資訊，請選擇有疑問的項目，並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


私用物件模組無法在公共物件模組中被當作公共程序的參數或傳回型態、公共資料成員、或公共使用者定義型態的資料欄來使用

���

這個錯誤的原因與解決方案方法如下：

•	試圖使用一個私用物件模組作為公共物件模組的參數、或公共自程序傳回型態、資料成員、或公共使用者定義型態的資料欄，這是不允許的。


只有在公共物件模組中定義的公共使用者定義型態可被當作類別模組公共程序的參數或傳回型態、或作為公共使用者定義型態的資料欄

���

這個錯誤的原因與解決方法如下：

•	試圖使用一個公共使用者定義型態作為類別模組公共程序的參數或傳回型態、或作為公共使用者定義型態的資料欄。只有在公共物件模組中定義的公共使用者定義型態才可以這樣使用。


物件程式庫不正確或包含對某個找不到其定義的物件的引用

���

這個錯誤的原因與解決方法如下：

•	一個物件程式庫包含有對找不到的物件定義的引用，或物件程式庫不正確。


引數不為選擇性 (錯誤 449)

���

引數的數字和型態必須與預期相符。此錯誤有以下的起因和解決方法：

•	引數的數字不正確。

提供所有必要的引數，例如，Left 函數需要兩個引數；第一個代表要處理的字元字串，第二個表示從字串左方傳回的字元數。因為無法選擇要不要加，所以必須全部都給才行。

•	省略的引數為非選擇性的。

只有呼叫的是使用者自訂程序，且程序中宣告引數為 Optional，才可以省略引數。您可以在呼叫時提供所有必要的引數，或是將參數宣告為 Optional。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


DLL 呼叫規格錯誤 (錯誤 49)

���

傳到動態連結程式庫 (DLL) 或 Macintosh程式碼資源區常式的引數必須符合常式所需要的。呼叫規格可以處理數字、型態、引數的順序等。此錯誤有以下的起因和解決方法：

•	您的程式呼叫 DLL 的常式時 (在Windows中) 或程式碼資源區 (在Macintosh上)，傳的引數型態錯誤。

請確定引數型態和您所呼叫之常式的宣告符合。

•	您的程式呼叫 DLL 的常式時 (在Windows中) 或程式碼資源區 (在Macintosh上)，傳的引數數目錯誤。

請確定引數數目和您所呼叫之常式的宣告符合。

•	您的程式呼叫 DLL 的常式沒有使用 StdCall 呼叫規格。

如果 DLL 常式需要的是傳值 引數，那麼請確定此常式的宣告中，這些引數是以 ByVal 宣告。

•	您的 Windows DLL Declare 陳述式包括了 CDecl。

CDecl 關鍵字僅適用於 Macintosh。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


不正確的檔案模式 (錯誤 54)

���

在處理檔案內容中的陳述式，必須可以在開啟檔案的模式下使用。此錯誤有以下的起因和解決方法：

•	將 Put 或 Get 陳述式指定到一個循序檔。

Put 和 Get 只能引用在以Random 或 Binary 存取模式所開啟的檔案上。

•	將 Print # 陳述式使用在非 Output 或 Append 存取模式所開啟的檔案上。

用其他的陳述式放置資料到檔案中或重新以適合的模式開啟檔案。

•	將 Input # 陳述式使用在非 Input 存取模式所開啟的檔案上。

用其他的陳述式放置資料到檔案中或重新以 Input 模式開啟檔案。

•	您試圖寫到一唯讀檔案。

更改檔案的讀寫屬性或放棄寫入。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


錯誤的檔案名稱或數目 (錯誤 52)

���

此錯誤發生在存取某檔案時。此錯誤有以下的起因和解決方法：

•	陳述式引用到如下的檔案代碼或檔案名稱：

•	在 Open 陳述式中沒有提到或雖有提到但已經關閉。

在 Open 陳述式中提到此檔名。注意如果您呼叫 Close 陳述式時沒有用適當的引數，可能會不小心關閉目前所有開啟的檔案和檔案號碼。

•	超出檔案號碼範圍 (1 - 511)。

如果您的程式碼中會產生檔案號碼的話，請確定產生的檔案號碼是否正確。

•	不正確的檔名或檔案號碼。

檔案名稱必須遵循作業系統規格。在 Microsoft Windows，可使用以下的規格：

•	檔案或目錄名稱可以有兩部份：檔名和選擇性副檔名。兩部份以句點隔開，例如，myfile.new。

•	檔名可達 255 字元。

•	檔名必須以字母或數字做為開頭。它可以包含大小寫字元 (檔案名稱不分大小寫)，但以下的字元除外：雙引號 (")、標點 (')、斜號 (/)、反斜號 (\)、冒號 (:)、垂直號 (|)。

•	檔名可以包含空白。

•	以下的名稱將保留且不能用在檔案或目錄上：CON、AUX、COM1、COM2、COM3、COM4、LPT1、LPT2、LPT3、PRN、NUL。例如，如果您要在 Open 陳述式中將檔名設為 PRN 的話，那麼 Print # 和 Write # 陳述式的預設印表機將會指向 Open 陳述式中的檔案號碼。

•	以下是正確的 Microsoft Windows 檔案名稱；

LETTER.DOC

My Memo.Txt

BUDGET.92

12345678.901

Second Try.Rpt

•	在 Macintosh 上，檔案名稱可以包含任何的字元，除了冒號 (:) 以外，而且也可有空白，不過 Null 字元 (Chr(0)) 在任何檔案名稱上是不允許的。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


資料錄的長度不正確 (錯誤 59)

���

Get 或 Put 陳述式的資料錄變數長度必須和 Open 陳述式所指定的相同。此錯誤有以下的起因和解決方法：

•	資料錄變數長度和其 Open 陳述式所指示的不同。

請確定在定義了資料錄變數型態的使用者自訂型態中，固定長度變數的和與 Open 陳述式的 Len 子句所描述的值相同。例如，假設 RecVar 是一適當型態變數。您可以使用 Len 函數來指定長度，如下：

Open MyFile As #1 Len = Len(RecVar)

•	在 Put 陳述式的變數是 (或包括) 一個變數長度字串。

因為 2 位元 descriptor 會以 Put 將變數長度字串加到隨機存取檔案，變數長度字串必須至少 2 字元，但小於 Open 陳述式的 Len 子句所指示的資料錄長度。

•	在 Put 陳述式的變數為 (或包括) Variant。

和變數長度字串一樣，Variant 資料型態也必須是 2 位元 descriptor。Variants 必須是 4 位元 descriptor，才能包含變數長度字串。因此，對於在 Variant 的變數長度字串，字串長度必須至少 4 字元，但小於 Len 子句所指示的資料錄長度。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


資料錄的個數不正確 (錯誤 63)

���

此錯誤發生在存取檔案時。此錯誤有以下情況和解決方法：

•	在 Put 或 Get 陳述式的資料錄號碼小於或等於零。

檢查產生資料錄號碼的計算是否正確。請確定含有資料錄號碼的變數是否拼字正確。除非您在模組中加上 Option Explicit，不然變數名稱拼錯了，會被視為隱含宣告，且會將初始值視為零。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


無法產生必要的暫時檔案 (錯誤 322)

新增可執行的檔案需要有一個暫時性檔案。此錯誤有以下情況和解決方法：

•	TEMP 環境變數所設的磁碟目錄已滿。

從已滿的磁碟中刪除檔案或在 TEMP 環境變數中指定其他的磁碟。

•	TEMP 環境變數所指定的磁碟或目錄不正確或唯讀。

在 TEMP 環境變數中指定一個正確的磁碟，或從指定的磁碟或目錄中移除唯讀的設定。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


無法執行所要求的動作 (錯誤 17)

如果此動作會導致專案的目前狀態無效，則動作將無法執行。此錯誤有以下情況和解決方法：

•	所要求的動作無法在專案目前的狀態作用。例如，當程式正處於中斷模式時，使用 References 對話方塊來加入一個引用到新的專案或物件程式庫，就會發生錯誤。

停止執行目前的程式碼，然後重試此動作。

•	您欲更改正在執行的程式碼。例如，您企圖從檔案讀出程式碼然後加到正在執行的模組中。

雖然您可以更改專案中目前非真正執行的模組，但您不能更改正在執行中的模組。如欲做如此的改變，您必須停止目前執行中的模組，再加入或更改，然後重新執行。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


無法更名為其他磁碟機 (錯誤 74)

���

Name 陳述式必須在目前的磁碟機來重新命名檔案。此錯誤有以下情況和解決方法：

•	用 Name 陳述式將一檔案移到不同的磁碟機。

使用 FileCopy 將檔案寫到另一磁碟機，然後用 Kill 陳述式刪除舊的檔案。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


無法儲存檔案到 TEMP 目錄 (錯誤 735)

���

一些元件常常需要儲存暫時性資料到磁碟中。此錯誤有以下情況和解決方法：

•	無法找到名稱為 TEMP 的目錄。

新增一名為 TEMP 的目錄，然後將 TEMP 環境變數設定為此路徑。

•	磁碟機或分割區包含的 TEMP 目錄空間不夠來放置資料。

將不要的檔案清除以增加磁碟機中可使用的空間，或在另一分割區新增一 TEMP 目錄，然後將 TEMP 環境變數設定為此路徑。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


物件類別不支援 Automation (錯誤 430)

���

並非所有的物件均有 Automation 介面。此錯誤有以下情況和解決方法：

•	雖然在 GetObject 或 CreateObject 函數呼叫中找到此物件類別，但並沒有可程式化的介面。

除非一物件有支援 Automation，否則您不能寫程式碼來控制物件的行為。檢查新增此物件的應用程式之文件，以了解在此物件類別上使用 Automation 的限制。

•	您將專案從 .dll 變成 .exe，或是從 .dll 變成 .exe。例如：如果您有已編譯且已註冊的 .dll 伺服器，之後您又將專案型態變成 .exe 並重新編譯，但是因為 .dll 及 .exe 已在系統中註冊，因此您兩種物件均無法建立。您必須自行移除舊的 .dll 或 .exe 的註冊資料，才能避免此問題。

導致此錯誤的原因是，將與專案相容及將專案從 .exe 變成 .dll 組合。在與專案相容方面，會保留 CLSID，但是不會保留 IID。由於保留了 CLSID，此類別最後會變成同時註冊兩個伺服器�}一個是內部伺服器，另一個是本電腦的伺服器。建立執行個體後，它會選擇內部伺服器。而當查詢介面時，.dll 並不會支援 IID，因為它是新的。

詳細資訊，可選取有疑問的項目並按下 F1[;;vbe> (在Windows中) 或 HELP (在Macintosh上)<]。


程式碼資源區鎖定錯誤 (錯誤 455)

這個錯誤只會在Macintosh上發生。當您存取一程式碼資源，您必須鎖住它。此錯誤有以下情況和解決方法：

•	在程式碼資源上呼叫了程序。雖然找到程式碼資源，但當欲鎖住資源時，發生了錯誤。

檢查 Hlock 所傳回的錯誤。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


找不到程式碼資源區 (錯誤 454)

此錯誤只有在 Macintosh 上會發生。此錯誤有以下情況和解決方法：

•	在程式碼資源上呼叫了程序，但找不到程式碼資源。

檢查確定是否可使用和適當引用此資源。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


從遠端呼叫的型態程式庫或物件程式庫的連線已中斷(錯誤 442)

���

在遠端存取期間 (當存取的物件為另一處理的一部份，或正在另一機器上執行)，連接到含有物件資訊的程式庫時，產生了中斷。此錯誤有以下情況和解決方法：

•	與遠端處理的物件程式庫或型態程式庫的連接中斷。

欲重新連接，請依下列步驟：

1.	重新啟動 Application 物件。

2.	在錯誤對話方塊中輸入它的說明主題按下 「確定」，然後會顯示出 「設定引用項目」 對話方塊。

3.	失去的引用在左側會出現 MISSING 字樣。

0	4.	移除失去的引用。

1	5.	在 References 對話方塊中，按下核取方塊選取您在步驟 1 中的物件。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


週邊設備 I/O 錯誤 (錯誤 57)

外部裝置時常會有非預期的錯誤。此錯誤有以下情況和解決方法：

•	當您的程式在使用像印表機或磁碟機這類裝置時，發生了輸出入錯誤。

確定裝置運作正常，然後再試一次。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


週邊設備無法使用 (錯誤 68)

此錯誤有以下的起因和解決方法：

•	您欲存取的周邊設備沒有上線或是根本不存在。

檢查周邊設備的電源以及周邊設備和電腦間的連線是否正常。如果您是要使用網路上的印表機，那麼請確定您的電腦和印表機有邏輯連接(logical connection)，例如， LPT1 連接上網路印表機 ID。

•	您的網路連接可能斷線了。

重新連上網路然後再操作。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


磁碟已滿 (錯誤 61)

���

此錯誤有以下的起因和解決方法：

•	磁碟沒有足夠的空間完成 Print #、Write # 或 Close 動作。

將一些檔案移到其他磁碟或刪除掉一些檔案。

•	磁碟沒有足夠的空間來新增所需檔案。

將一些檔案移到其他磁碟或刪除掉一些檔案。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


磁碟尚未就緒 (錯誤 71)

此錯誤有以下的起因和解決方法：

•	指定的磁碟機中沒有磁碟。

將磁碟放到磁碟機然後再試一次。

•	指定的磁碟機的門沒關好。

將門關好然後再試一次。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


除以零 (錯誤 11)

除以零是不可能的。此錯誤有以下情況和解決方法：

•	運算式的除數為零。

檢查在運算式中變數的拼字。拼字錯誤的變數名稱會被當成數值變數並且初始值為零。檢查前一個在運算式中變數的動作，尤其是從其他程序傳到程序的引數。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


載入 DLL 時發生錯誤 (錯誤 48)

���

動態連結程式庫 (DLL) 就是在 Declare 陳述式的 Lib 子句中所描述的程式庫。此錯誤有以下的起因和解決方法：

•	此檔案並非可執行的 DLL。

如果此檔案是原始程式碼檔案，它必須編譯並連結成可執行 DLL 形式。

•	此檔案並非 Microsoft Windows DLL。

取得此檔案的 Microsoft Windows DLL 版。

•	此檔案是早期的 Microsoft Windows DLL，而且和 Microsoft Windows 保護模式不相容。

取得更新的版本。

•	此 DLL 引用到其他不存在的 DLL。

取得此引用的 DLL 並讓提供其他 DLL 使用。

•	此 DLL 或所引用 DLL 並不在您所指定的目錄中。

移動 DLL 到所引用目錄或將 DLL 所在的目錄加到路徑中。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


檔案已存在 (錯誤 58)

���

此錯誤有以下的起因和解決方法：

•	此錯誤發生在執行階段要新增一檔案名稱時， 例如，在 Name 陳述式中所指定的檔案名稱和已存在的相同。

在 Name 陳述式中指定一個新的檔案名稱或刪除舊有的檔案。

•	當使用 Save As 命令來儲存目前所載入的專案，但此專案名稱已經存在時。

如果您不想取代掉其他的專案的話，請使用不同的專案名稱。

詳細資訊，可選取有疑問的項目並按下 F1。


檔案已開啟 (錯誤 55)

���

有時候檔案必須在其他 Open 或其他動作發生前先關閉。此錯誤有以下的起因和解決方法：

•	對一已經開啟的檔案執行循序輸出模式 Open 陳述式。

您必須將欲開啟成其他模式的循序存取模式檔案先關閉。例如，您必須先將開啟成 Input 的檔案先關閉再開啟成 Output。

•	陳述式如 Kill、SetAttr 或 Name 等，引用到一個開啟的檔案。

在執行此陳述式前先關閉此檔案。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


找不到檔案 (錯誤 53)

所指定的檔案找不到。此錯誤有以下的起因和解決方法：

•	陳述式如 Kill、SetAttr 或 Name 等，引用到一個不存在的檔案。

檢查檔案名稱的拼字以及路徑說明。

•	欲呼叫動態連結程式庫 (DLL) 中的程序 或 Macintosh程式碼資源區，但找不到在 Declare 陳述式的 Lib 子句中所指定程式庫檔案名稱或資源當案名稱。

檢查檔案名稱的拼字以及路徑說明。

•	在發展環境中，如果您欲開啟不存在的專案或載入不存在的文字檔案，將發生錯誤。

檢查檔案名稱或專案名稱的拼字以及路徑說明。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


沒有設定 For 迴圈的初始值 (錯誤 92)

���

您必須初始化 For 迴圈的計數器。此錯誤有以下情況和解決方法：

•	您跳到了 For...Next 迴圈中間。

將跳入迴圈的動作移除，然後放標籤到 For...Next 迴圈。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


輸入已超過檔案結尾 (錯誤 62)

���

您不能讀取過去的 end-of-file 位置。此錯誤有以下情況和解決方法：

•	Input # 或 Line Input # 陳述式到已讀取完的檔案或空的檔案中讀取資料。

在 Input # 陳述式之前直接使用 EOF 函數來偵測檔案結尾。

•	在 Binary 存取的檔案上使用 EOF 函數。

EOF 只能用在循序 Input 存取的檔案上。在 Binary 存取的檔案上使用 Seek 和 Loc。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


內部錯誤 (錯誤 51)

���

請確定此錯誤不是由 Error 陳述式或 Raise 方法所產生。此錯誤有以下情況和解決方法：

•	在 Visual Basic 中發生了內部性運作失常。

除非此呼叫不是由 Error 陳述式或 Raise 方法所產生，不然請聯絡 Microsoft 產品支援服務，告知發生情況。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


不正確的剪貼簿格式 (錯誤 460)

剪貼簿只接受特定格式的資料。此錯誤有以下情況和解決方法：

•	從元件放置資料到剪貼簿，但資料的格式與剪貼簿不相容。

查閱元件的文件以決定是否可使用剪貼簿來傳遞資料。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


不正確的檔案格式 (錯誤 321)

���

磁碟檔案經常以特有的格式來存放資料。此錯誤有以下情況和解決方法：

•	載入一個檔案到元件中，但檔案中資料的格式與元件不相容。

查閱元件的文件以決定磁碟檔案資料適合的格式，以及元件是否提供轉換格式的支援。

•	儲存一個元件到檔案中，但元件資料的格式與檔案不相容。

查閱元件的文件以決定元件是否提供轉換格式的支援。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


序數不正確 (錯誤 452)

呼叫動態連結程式庫 (DLL) 時，使用 #num 語法將數字代號來替代程序名稱。此錯誤有以下的起因和解決方法：

•	欲將 num 運算式轉成序數時失敗。

請確定運算式所表示的數字是正確或是用程序名稱呼叫。

•	num 中所含無法指定任何 DLL 函數。

請確定 num 可指定一個 DLL 函數。

•	型態程式庫中的錯誤宣告使得內部使用了不正確的序數。

註解中的程式碼分離出造成問題的程序呼叫。可以在程序中寫 Declare 陳述式並且將問題告知型態程式庫供應商。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


模式比對字串不正確 (錯誤 93)

���

指定在一個搜尋的 Like 動作中，模式比對字串不正確。此錯誤有以下情況和解決方法：

•	一普通的錯誤字元清單運算式例子就是 [a-b，其右邊方括弧不見了。

請檢查清單運算式的字元是否正確。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


程序呼叫或引數不正確 (錯誤 5)

���

有些程序無法完成呼叫動作。此錯誤有以下的起因和解決方法：

•	引數值超出了應該的範圍。例如，Sin 函數只接受特定範圍的值。小於 2,147,483,648 之正的引數是可接受的，而 2,147,483,648 以上則會產生錯誤。

檢查引數之許可範圍。

•	如果所要呼叫的程序不適於所在平台的話，也會發生此錯誤。例如，有些程序可能只適用於 Microsoft Windows 或 Macintosh 等。

檢查程序的特定平台資訊。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


屬性陣列索引不正確 (錯誤 381)

���

屬性值可能由一組陣列的值所組成。此錯誤有以下情況和解決方法：

•	元件的屬性陣列最低為零，最高則為陣列數減 1。不過，也可以最低為 1，最高為陣列數。

檢查元件的文件以確定在指定的屬性的索引值在正確的範圍內。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


Null 的使用不正確 (錯誤 94)

���

Null 是 Variant 子型態，用來指示資料項所含的為一個非正確的資料。此錯誤有以下情況和解決方法：

•	您欲獲得 Null 的 Variant 變數或運算式值。例如：

MyVar = Null

For Count = 1 To MyVar

. . .

Next Count

請確定變數所含為正確值。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


找不到指名引數 (錯誤 448)

除非指名引數出現在程序定義中，不然在程序執行上可能無法使用。此錯誤有以下情況和解決方法：

•	指定一個指名引數，但程序上未定義接受此引數名稱。

檢查引數名稱的拼字。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


需要屬性陣列索引 (錯誤 385)

���

屬性值是由陣列組成，而非單一值。此錯誤有以下情況和解決方法：

•	沒有指定所要存取的屬性陣列索引值。

檢查元件的文件以找出陣列的適當索引範圍。然後再指定適當的索引值到您的屬性存取陳述式。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


物件不支援目前的地區設定 (錯誤 447)

並非所有物件均支援全部的地區設定。此錯誤有以下的起因和解決方法：

•	在目前的專案上，存取的物件並不支援此地區設定。例如，如果目前專案的地區設定為加拿大法語，那麼所要存取的物件也必須支援那個地區設定。

檢查物件所支援的是那一個地區設定。

•	動態連結程式庫 (DLL) 中物件仰賴的國際語言支援服務 或 Macintosh程式碼資源區，例如，OLE2NLS.DLL，有可能超過期限了。

獲取更新版的 DLL，且支援目前專案地區的 DLL。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


物件不支援指名引數 (錯誤 446)

並非所有物件均支援指名引數。此錯誤有以下情況和解決方法：

•	存取的物件其方法不支援指名引數。

當執行此物件的方法時，請指定引數到適當位置。請看元件的文件以獲得更多引數位置及型態的資訊。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


物件不支援此動作 (錯誤 445)

並非所有物件均支援所有動作。此錯誤有以下情況和解決方法：

•	所引用的方法或屬性此物件不支援。

請看物件的文件以獲得更多資訊並檢查屬性和方法的拼字。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


Property let程序未定義，並且property get程序不能傳回一個物件 (錯誤 451)

���

只有特定的屬性、方法和動作適用於 Collection 物件。此錯誤有以下情況和解決方法：

•	所指定的動作或屬性雖只限於集合物件，但此物件並非集合物件。

檢查物件或屬性名稱的拼字，或確定此物件為一 Collection 物件。同時檢查 Add 方法將物件加到集合物件的語法是否正確，並且檢查所有識別項其拼字是否正確。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


此處需要物件 (錯誤 424)

���

引用屬性和方法經常需要一個明確的物件定位項。此錯誤有以下的起因和解決方法：

•	當引用物件屬性或方法時沒有提供正確的物件定位項。

如果沒有提供物件定位項的話，請指定一個物件定位項。例如，從表單的模組中引用表單屬性時，雖然可以省略物件的定位項，但是當您從一般模組中引用一屬性時，則必須指定定位項。

•	提供一個物件定位項，但無法認出物件。

檢查物件定位項的拼字並確定您所引用的程式中，此物件是可見的。在 Collection 物件中，請檢查每個 Add 方法的使用以確定語法是否正確，以及所有元件的拼字是否正確。

•	提供正確的物件定位項，但呼叫的其他部份有錯誤。

將不正確的路徑當作主機應用程式中 File Open 命令的引數，可能會造成錯誤。請檢查引數。

•	在指定物件引用時，沒有使用 Set 陳述式。

如果您指定 CreateObject 呼叫的傳回值為 Variant 變數，那麼如果省略 Set 陳述式的話，此錯誤就可能會發生。在以下的程式碼例子中，新增一 個Microsoft Excel 執行個體，且傳回 Variant  RetVal 的預設屬性 ("Microsoft Excel" 字串 ) 並指派給 Variant  RetVal，之後欲使用 RetVal 當作物件引用時發生了此錯誤：

Dim RetVal	' 為一 Variant。

' 預設屬性指定為型態 8，即 Variant RetVal。

RetVal = CreateObject("Excel.Application")

RetVal.Visible = True	' 錯誤在此發生。

當指定物件引用時，請使用 Set 陳述式。

•	當您使用正常的物件，但在此物件上執行不正確動作時，就會發生錯誤。例如，如您想指定某個值到唯讀的屬性時，就有可能收到此錯誤。

請檢查物件的文件以確定您欲執行的動作皆正確。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


沒有設定物件變數或 With 區塊變數 (錯誤 91)

���

新增物件變數有兩步驟。第一，您必須先宣告物件變數。然後您必須使用 Set 陳述式指定一個正確的引用到物件變數。同樣地，With...End With 區塊必須先用 With 陳述式進入點來執行初始化。此錯誤有以下的起因和解決方法：

•	您使用的物件變數尚未引用到一個正確物件。

對物件變數指定或再指定一個引用。例如，如果在下列的程式碼省略 Set 陳述式的話，那麼引用 MyObject 將會產生錯誤：

Dim MyObject As Object	' 新增物件變數。

Set MyObject = Sheets(1)	' 新增一正確的物件引用。

MyCount = MyObject.Count	' 指定計數值給 MyCount。

•	使用的物件變數已經設為 Nothing。

Set MyObject = Nothing	' 釋放此物件。

MyCount = MyObject.Count	' 引用了已釋放的物件。

再指定引用給物件變數。例如，使用新的 Set 陳述式設定新的引用給物件。

•	此物件是正確的物件，但未被設定，因為在 References 對話方塊中並未選取該物件所在的物件程式庫。

在 Add References 對話方塊選擇物件程式庫。

•	GoTo 陳述式的目的地在 With 區塊內。

不要跳進 With 區塊。確定此區塊使用 With 陳述式進入點以執行初始化。

•	當選了 Set Next Statement 命令時，在 With 區塊內指定了一命令列。

With 區塊必須用 With 陳述式執行初始化。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


Automation 錯誤 (錯誤 440)

���

當您存取自動物件時，發生了特殊型態的錯誤。此錯誤有以下情況和解決方法：

•	當執行某個方法，或者取得或設定物件變數屬性時發生錯誤。新增此物件的應用程式會報告此錯誤。

檢查 Err 物件的屬性以決定錯誤的來源和性質。同樣地，也可以在存取陳述式前，直接使用 On Error Resume Next 陳述式，然後檢查錯誤。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


物件不支援此屬性或方法 (錯誤 438)

並非所有物件均支援所有屬性和方法。此錯誤有以下情況和解決方法：

•	對此 Automation 物件您所指定的方法或屬性並不存在。

請看物件的文件以獲得更多此物件的資訊，並檢查屬性和方法的拼字是否正確。

•	指定 Friend 程序做為呼叫後連結。

在編譯階段必須知道 Friend 程序的名稱，它不能出現在後連結式的呼叫上。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


記憶體不足 (錯誤 7)

當需要更多的記憶體空間，或是遇到 64K 區段限制時。此錯誤有以下的起因和解決方法：

•	您開啟了太多的應用程式、文件或資源檔案。

關閉不需要的應用程式、文件或資源檔案。

•	您的模組或程序太大了。

將龐大的模組或程序分成好幾個小的。如此雖無法節省記憶體空間，但可跳開 64K 區段限制。

•	在 Microsoft Windows 標準模式下執行。

重新開啟 Microsoft Windows 成加強模式。

•	在 Microsoft Windows 加強模式下執行，但超出了虛擬記憶體的空間。

空出一些磁碟空間以增加虛擬記憶體，或至少確定有空餘的空間。

•	執行一些常駐程式。

減少一些常駐程式。

•	您載入太多的周邊設備驅動程式。

減少一些不必要的周邊設備驅動程式。

•	您的 Public 變數超出了空間。

減少 Public 變數的數量。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


堆疊空間不足 (錯誤 28)

���

堆疊是記憶體的一個工作區域，會隨著您程式執行的需要而增長或縮小。此錯誤有以下的起因和解決方法：

•	有太多使用中的 Function、Sub 或 Property 程序呼叫。

檢查巢狀程序是否太大的，尤其是遞迴程序，即呼叫自己的程序。請確定遞迴能適時終止，使用 「呼叫」 對話方塊來檢視那些程序為使用中的 ( 在堆疊上 )。

•	區域變數需要更多可用的區域變數空間。

試著在模組層次中宣告某些變數。您也可以在靜態程序 ( 即在 Property、Sub 或 Function 關鍵字前加上 Static) 宣告所有變數，或可以在程序內使用 Static 陳述式來宣告各個 Static 變數。

•	有太多固定長度字串。

固定長度字串在程序裡可快速存取，但會比可變長度字串使用更多堆疊空間，因為字串資料本身會放在堆疊上。可試著重新定義一些固定長度字串成為變數長度字串。當您宣告一變數長度字串，只有字串描述子 ( 非資料本身 ) 會放在堆疊上。您也可以在沒有堆疊空間的模組層次上定義字串。在模組層次宣告的變數是預設成 Public，所以在模組的所有程序皆可見到字串。

•	太多巢狀 DoEvents 函數呼叫。

利用 「呼叫」 對話方塊來檢視那些程序為使用中的 ( 在堆疊上 )。

•	程式碼引起了事件重疊。

所謂事件重疊就是引起一個事件，此事件會呼叫已在堆疊上的事件程序。事件重疊和無法預估的遞迴程序呼叫是相似的，但不太明明顯，因為是由 Visual Basic 所呼叫，而不是在您的程式碼中呼叫。使用 「呼叫」 對話方塊來檢視那些程序為使用中的 ( 在堆疊上 )。

要顯示 「呼叫」 對話方塊，請在 Debug 視窗中選取 「程序」 方塊 右方的 「呼叫」 按鈕或選擇 「呼叫」 指令。詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


字串空間不足 (錯誤 14)

Visual Basic 允許您使用大的字串。然而，其他程式的需求和處理字串的方法可能導致此錯誤。此錯誤有以下的起因和解決方法：

•	使用的運算式為計算所建立的暫時字串，可能產生此錯誤。例如，下列的程式碼在一些作業系統上將產生超出字串空間的錯誤：

MyString = "Hello"

For Count = 1 To 100

MyString = MyString & MyString

Next Count

指定字串成其他名稱的變數。

•	系統記憶體不足，以致於無法分配空間給字串。

移除不需要的應用程式以增加可用的記憶體空間。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


溢位 (錯誤 6)

當指定超出目標的限制時就會發生溢位。此錯誤有以下的起因和解決方法：

•	此指定的結果、計算或資料型態轉換太大以致於無法在變數型態所允許的範圍內表示出來。

指定值到足夠表示的型態之變數上。

•	指定給屬性時超出此屬性能接受的範圍。

確定您的指定適合此屬性的範圍。.

•	當您試圖在計算中使用數字時，數字被強迫轉換成一個整數，但是結果超出了整數的範圍。例如：

    Dim x As Long

    x = 2000 * 365   ' 錯誤：溢位

要解決該問題，按如下方式輸入數字：

    Dim x As Long

    x = CLng(2000) * 365

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


找不到路徑 (錯誤 76)

���

此檔案路徑包括磁碟機和目錄以及子目錄，且必須要能指出檔案的位置。路徑可以是關聯的或絕對的。此錯誤有以下情況和解決方法：

•	在檔案存取或磁碟存取期間，例如，Open、MkDir、ChDir 或 RmDir，此時作業系統是無法找出指定路徑的。

再指定一次路徑。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


路徑/檔案存取錯誤 (錯誤 75)

���

在檔案存取或磁碟存取期間，例如，Open、MkDir、ChDir 或 RmDir，作業系統無法在路徑和檔案名稱間建立連接。此錯誤有以下的起因和解決方法：

•	檔案描述的格式不正確。

檔案名稱可以包含完整的絕對式或關聯式路徑。完整的絕對式路徑以磁碟機名稱 ( 如果路徑在別台磁碟機 ) 為開始，並且列出從根目錄到檔案的路徑。任何非完整絕對式則是關聯至目前磁碟機和目錄。

•	儲存的檔案將會取代掉已存在的唯讀檔案。

更改目的檔案的唯讀屬性或以別的檔案名稱儲存。

•	開啟的唯讀檔案為循序 Output 或 Append 模式。

將此檔以 Input 模式開啟，或是更改檔案的唯讀屬性。

•	您企圖變更資料庫或文件內的 Visual Basic 專案。

您不能對此專案進行設計變更。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


沒有使用權限 (錯誤 70)

���

寫到有防寫保護的磁碟，或存取了遭鎖住的檔案。此錯誤有以下的起因和解決方法：

•	開啟一個防寫保護的檔案成為循序 Output 或 Append。

開啟檔案成為 Input 或更改檔案的防寫屬性。

•	開啟檔案的磁碟，對於循序 Output 或 Append 是防寫保護的。

從磁碟移除防寫保護的周邊設備，或開啟檔案為 Input。

•	寫入的檔案被其他處理鎖住了。

等其他處理釋放後再開啟此檔案。

•	想要存取登記資料，但使用者權限不包括此類存取。

在 32 位元 Microsoft Windows 系統上，使用者必須有存取系統登記資料的權限。請更改您的權限或由系統管理者來更改。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


印表機錯誤 (錯誤 482)

���

此錯誤有以下情況和解決方法：

•	印表機發生錯誤，但沒有其他的資訊傳回到此傳送檔案的電腦。

必須親自檢查印表機，以確定所有電腦和印表機間的連接相當穩固。大部分印表機都有提供顯示器以顯示錯誤資訊。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


Property Get 無法用於執行階段 (錯誤 393)

���

���

並非所有屬性皆會傳回執行階段資訊。此錯誤有以下情況和解決方法：

•	存取的屬性在執行階段是唯讀的。

終止執行然後在設計階段檢視此屬性。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


Property Get 無法用於唯寫屬性 (錯誤 394)

���

並非所有屬性皆會傳回資訊。此錯誤有以下情況和解決方法：

•	想要存取的屬性並不傳回資訊。

您無法決定屬性的狀態。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


找不到屬性或方法 (錯誤 423)

物件名稱的拼字必須要和在物件程式庫中定義相符。此錯誤有以下情況和解決方法：

•	引用到 object.method 或 object.property，但 method 或 property 沒有定義。

可能將 object 的名稱拼錯。欲看 object 定義了什麼屬性和方法，可叫出物件瀏覽。選擇相關的物件程式庫來看屬性和方法的清單。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


找不到屬性 (錯誤 422)

���

並非所有物件均支援同樣的屬性。此錯誤有以下情況和解決方法：

•	此物件不支援指定的屬性。

請檢查屬性名稱的拼字，您有可能欲存取像 "text" 的屬性，但其實此物件支援的是 "caption" 或類似的指名屬性。請檢查此物件的文件。

詳細資訊，可選取疑問項目並按 F1 (在Windows中) 或 HELP (在Macintosh上)。


Property Set 無法用於執行階段 (錯誤 382)

���

在執行階段有可能無法取得到屬性的引用。此錯誤有以下情況和解決方法：

•	在執行階段的唯讀或唯寫中取得到屬性的引用。

您可以對讀寫來使用一個引用，此屬性必須在執行階段支援讀寫動作皆有的引用。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


Property Set 無法用於唯讀屬性 (錯誤 383)

���

在執行階段有可能無法取得到屬性的引用。此錯誤有以下情況和解決方法：

•	在執行階段的唯讀中想要取得到屬性的引用。

您可以對讀寫來使用一個引用，所以此屬性必須在執行階段支援讀寫動作皆有的引用。只能在屬性上使用 Property Get。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


無法使用 Property Set (錯誤 387)

���

並非所有屬性均可傳回引用。此錯誤有以下情況和解決方法：

•	不會傳回引用下想要取得到屬性的引用。

只用 Property Let 和 Property Get 存取此屬性。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


所取代的文字太長 (錯誤 746)

���

取代動作沒有超出指定的最大長度。此錯誤有以下情況和解決方法：

•	取代動作超出許可的長度。

查閱元件的文件以得知最大長度。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


回復且無錯誤 (錯誤 20)

���

Resume 陳述式只能在錯誤處理程式內出現，而且只能在主動錯誤處理程式中執行。此錯誤有以下的起因和解決方法：

•	將 Resume 陳述式放在錯誤處理程式碼之外。

請將此陳述式移到錯誤處理程式之內，或刪除它。

•	程式碼即使沒有錯誤也跳到了錯誤處理程式之中。

也許您拼錯了行標籤。不能橫躍程序地跳至標籤，所以請搜尋程序中註明錯誤處理程式的標籤。如果您找到重複的且同為 GoTo 陳述式的標籤，而非屬於 On Error GoTo 陳述式的目標標籤的話，請更改行標籤以迎合所要的目標標籤。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


Return 必須和 GoSub 搭配使用 (錯誤 3)

���

Return 陳述式必須有一個對應的 GoSub 陳述式。此錯誤有以下情況和解決方法：

•	您的 Return 陳述式沒有對應的 GoSub 陳述式。

確定沒有不小心刪除了 GoSub 陳述式。

 For...Next、While...Wend 和 Sub...End Sub 是在編譯期間找對應項，而GoSub 和 Return 則是在執行期間。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


找不到指定的 DLL 函數 (錯誤 453)

在使用者程式庫引用中有找到動態連結程式庫 (DLL)，但在 DLL 內找不到指定的 DLL 函數。此錯誤有以下的起因和解決方法：

•	在函數宣告中指定了錯誤的序數：

檢查序數或以名稱呼叫函數。

•	所給的 DLL 名稱雖正確，但指定的函數其版本並非目前所擁有的。

機器上是正確的版本，但如果路徑中含有錯誤版本的目錄是在含有正確版本的目錄之前的話，就會存取到錯誤的 DLL。檢查您的機器上不同的版本，如果您是較舊的版本，請聯繫供應商以取得較新的版本。

•	如果您是在 32- 位元 Microsoft Windows 平台上工作的話，DLL 名稱和別名 ( 如果使用的話 ) 均必須正確。

確定 DLL 名稱和別名均正確。

•	有些 32- 位元 DLL 包含少許不同版本的函數，以適應 Unicode 和 ANSI 字串。函數名稱尾端的 "A" 表示是 ANSI 版本。函數名稱尾端的 "W" 表示是 Unicode 版本。

如果函數有字串型態引數，請試著在函數名稱尾端加上 "A"。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


運算式太過複雜 (錯誤 16)

在不同平台間，符點運算式許可的子運算式數並不同。例如，在 32- 位元 Microsoft Windows 作業系統，符點運算式的巢狀深度只能到 8。此錯誤有以下情況和解決方法：

•	符點運算式包含太多巢狀子運算式。

將運算式分成幾個運算式以避免不必要的錯誤。

注意   在 Visual Basic 較早的版本，錯誤 16 是 " 字串運算式太過複雜 "，此錯誤不會再出現了。然而，如果您有早期的程式碼會去處理此錯誤，應該將其移除以避免和此新的錯誤搞混。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


找不到要搜尋的文字 (錯誤 744)

���

此錯誤有以下情況和解決方法：

•	找不到您指定的文字。

文字不存在。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


Sub、Function，或 Property 未定義 (錯誤 35)

���

呼叫的 Sub、Function 或 Property 程序必須定義。此錯誤有以下的起因和解決方法：

•	程序名稱拼錯。

檢查拼字並改正。

•	從另一專案呼叫程序，但並沒有在 References 對話方塊將引用加到專案。

新增引用

1.	顯示 References 對話方塊。

2.	尋找含有您要呼叫的程序之專案名稱。如果 References 對話方塊中沒有所要的專案名稱，請按 Browse 按鈕來搜尋它。

3.	選取專案名稱左邊的核取方塊。

0	4.	按下 OK。

•	呼叫的程序看不到所指定的程序。

在模組中宣告為 Private 的程序無法從模組外部的程序來呼叫。如果 Option Private Module 作用的話，其他專案無法使用模組中的程序。

搜尋並設置程序。

•	宣告的視窗動態連結程式庫 (DLL) routine 常式 或 Macintosh程式碼資源區常式，不在指定的程式庫或程式碼資源區。

•	檢查序數 ( 如果您使用的話 ) 或常式名稱。請確定 DLL 的版本 或 Macintosh程式碼資源區常式是正確的。常式有可能只存在於較後的 DLL 版本 或 Macintosh程式碼資源區常式。如果在路徑中，錯誤版本的目錄在含有正確版本的目錄之前的話，就會存取到錯誤的 DLL 或 Macintosh程式碼資源區常式。給的 DLL 名稱正確 或 Macintosh程式碼資源區常式，但並非含有指定函數的版本。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


陣列索引超出範圍 (錯誤 9)

���

只能在定義的範圍內存取陣列元件和集合物件成員。此錯誤有以下的起因和解決方法：

•	引用了不存在的陣列元件.

陣列索引對此陣列索引範圍可能過大或過小，或是在應用程式中此點沒有指定範圍。檢查陣列的宣告以確認其上界和下界。若您使用的是重訂範圍的陣列，使用 UBound 和 LBound 函數來決定陣列存取。如果索引指定為變數，請檢查變數名稱的拼字。

•	宣告陣列時沒有指定元件數目。例如，下列的程式碼就會導致此錯誤：

Dim MyArray() As Integer

MyArray(8) = 234	' 導致錯誤 9。

Visual Basic 並不會將沒有指定範圍的陣列自動設為 0 - 10。您必須使用 Dim 或 ReDim 來指定陣列中元件的數目。

•	引用了不存在的集合物件成員。

試著使用 For Each...Next 結構代替指定元件索引。

•	使用速寫法陣列索引，結果指定了錯誤的元件。

例如，當您在集合物件上使用 ! 運算子時，! 自動指定了一個索引鍵。例如 object!keyname.value 和 object.item(keyname).value 是一樣的。在此例中，集合物件中如果 keyname 表示一個錯誤索引鍵，錯誤就會產生。若要改進此錯誤，在集合物件中使用正確的索引鍵名稱或索引。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


此元件不支援此集合中的事件 (錯誤 459)

���

並非每一元件均有支援事件的客戶吸收。此錯誤有以下情況和解決方法：

•	想要與一個元件共同使用WithEvents變數，該元件不能作為指定事件集合的事件來源。例如，您可能正吸收一個物件的事件，然後建立另一個物件，而它將 Implements第一個物件。盡管您可能認為可以從已實現的物件吸收事件，但這並不能自動進行。Implements僅僅為方法和屬性實現介面。

•	不能對一個不是事件來源的元件吸收事件。WithEvents 不支援私用的 UserControls，因為引發 ObjectEvent 所需要的型態資訊在執行階段無法使用。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


DLL 應用程式的用戶端過多 (錯誤 47)

Visual Basic 中動態連結程式庫 (DLL) 一次只能提供給 50 個主機應用程式存取。此錯誤有以下情況和解決方法：

•	您的應用程式和其他 Visual Basic 主機應用程式 ( 一些可能是您的應用程式存取的 ) 都同時存取 Visual Basic DLL。

減少存取 Visual Basic 的應用程式數量。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


檔案過多 (錯誤 67)

限制同時間開啟磁碟檔案的數量。此錯誤有以下的起因和解決方法：

•	MS-DOS 作業系統：在根目錄下開啟太多檔案，超過了作業系統的許可。

MS-DOS 作業系統限制了根目錄下可以開啟的檔案數，限制的檔案數為 512。如果您的程式是在根目錄下開啟、關閉或儲存檔案的話，請將您的程式改為在子目錄下工作。

•	MS-DOS 作業系統：開啟的檔案數超過 CONFIG.SYS 檔案中 files= 所設的數量。

將 CONFIG.SYS 檔案中 files= 所設定的檔案數加大然後重開機。

•	Macintosh：您的程式欲開啟的檔案數超過 40 個。

在 Macintosh，標準限制是 40 個。此限制可用公用程式來更改啟動區塊的 MaxFiles 參數。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


型態不符合 (錯誤 13)

���

目前 Visual Basic 能夠強迫轉換值以完成資料型態的指定動作，對於較早的版本是無法做到的。然而，此錯誤仍可能發生並且有 下列幾種情況和解決方法：

•	變數或屬性型態不正確。例如，一個需要整數值的變數並不接受字串值，除非可以辨識整個字串成為整數。

儘量在相容的資料型態間作指定的動作。例如，Integer 可以指定給 Long，Single 可以指定給 Double，而任何型態 ( 除了使用者自訂型態 ) 可以指定給 Variant。

•	將物件傳給需要單一屬性或值的程序。

傳遞適當的單一屬性或呼叫適當的物件方法。

•	使用了運算式所要的模組或專案名稱，例如：

Debug.Print MyModule

指定可以顯示的運算式。

•	將傳統 Basic 錯誤處理常式與擁有 Error 子型態 (10, vbError) 的 Variant 值混合，例如：

Error CVErr(n)

欲辨識錯誤，您必須將其對應到 Visual Basic 或使用者自訂錯誤，然後產生錯誤。

•	CVErr 值無法轉成 Date。例如：

MyVar = CDate(CVErr(9))

使用 Select Case 陳述式或一些類似的結構來對應傳回的 CVErr。

•	在執行階段，此錯誤通常指示在不正確子型態的運算式中使用的 Variant，或 Variant 含有出現在 Print # 陳述式的陣列。

欲印出陣列，可用迴圈來顯示每個元件。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


發生使用者中斷 (錯誤 18)

中斷執行是相當有用的，但如果不小心處理的話，將會使應用程式結束執行。此錯誤有以下情況和解決方法：

•	使用者按 CTRL+BREAK 或其他中斷鍵。

•	在發展環境中可繼續執行。提供在執行階段情況發生時，在適當方式下處理此錯誤。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


變數使用 Visual Basic 不支援的型態 (錯誤 458)

並非所有程式語言均能使用出現在型態程式庫或物件程式庫的變數。此錯誤有以下情況和解決方法：

•	使用定義在型態程式庫或物件程式庫的變數，但 Visual Basic 並不支援其資料型態。

在  Visual Basic 程式中您不能使用 Visual Basic 無法辨識的變數。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


引數的個數錯誤或指定了不正確的屬性 (錯誤 450)

���

傳給程序的引數數量必須和程序定義的參數數量一樣。此錯誤有以下的起因和解決方法：

•	在呼叫程序時，所給的引數數量和程序所要的不一樣。

檢查程序宣告或定義以確定引數清單。

•	所使用索引指定的控制項並非控制項陣列中的一項。

•	索引清單視為引數，但並不是所要的索引或引數，所以發生錯誤。可移除索引清單，或跟在程序後新增控制項陣列。在設計階段將 Index 屬性設為非零值。

•	想要指定一個值給唯讀屬性，或想要指定的屬性給不存在的 Property Let 程序。

指定一個值給屬性，將值當作引數傳遞給物件的 Property Let 程序是一樣的。適當地定義 Property Let 程序；它必須比對應的 Property Get 程序超出一個以上的引數。如果屬性是唯讀的，就不能指定一個值給它。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


ActiveX 元件不能建立物件或傳回此物件的引用 (錯誤 429)

���

新增物件需要在系統註冊區中登記的物件類別，而且任何相關的動態連結程式庫 (DLL)須能使用。此錯誤有以下的起因和解決方法：

•	類別沒有註冊。例如，系統註冊中沒有類別的陳述，或雖有陳述類別，但找不到檔案或指定的檔案型態錯誤。

如果可能的話，試著啟動物件的應用程式。如果註冊資訊逾期或錯誤，應用程式應該檢查註冊並更正資訊。如果啟動應用程式沒有解決問題，請重新執行應用程式的安裝程式。

•	物件需要的 DLL 無法使用，可能因為找不到或是已損毀。

確定所有相關的 DLL 均可使用。例如，Data Access Object (DAO) 需要支援多平台的 DLL。如果那是造成錯誤的原因，您可能必須為此物件重新執行安裝程式。

•	物件在機器上，但其為正確使用權的 Automation 物件而且在具體的範例使用權中不能確認有效。

一些物件只能在元件找到使用權鍵後，才能被具體的範例說明，並且在目前機器上的範例中說明，確定物件已被註冊。當通過正確安裝的型態程式庫或物件程式庫，對一個物件進行引用時，就自動提供正確的鍵。

如果CreateObject或 GetObject的呼叫結果是用範例說明的，那麼物件必須找到鍵。在這種情況下，它可以搜尋系統註冊區，或搜尋在安裝時建立的指定檔案。例如，副檔名是 .lic的檔案。如果此鍵未找到，則物件不能被說明。如果一般使用者建立應用程式不正確，要移除必須檔案，或修改系統注冊區，則物件不能找到此鍵。如果此鍵找不到，物件也不能用範例說明。在這重情況下，範例說明只能在發展系統中工作，而不能在使用者系統中工作。它對使用者重新安裝使用權物件是必須的。

•	使用 GetObject 函數去擷取引用至以 Visual Basic 所新增的物件類別。

GetObject 不能用來獲取引用至以 Visual Basic 所新增的物件類別。

•	存取物件遭到拒絕。

例如，您可能欲存取目前正在使用的資料物件，如此的物件將會被鎖住以防止死結情形發生。如果是這樣的情形，您可以在利用其他時間去存取物件。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


屬性值不正確 (錯誤 380)

大部份屬性只接受特定型態和特定範圍的值。此錯誤有以下情況和解決方法：

•	指定不適當的值給屬性。

請看屬性的說明主題以決定屬性是適合何種特定型態和特定範圍的值。

詳細資訊，可選取項目項目並按 F1 (在Windows中) 或 HELP (在Macintosh上)。


圖片不正確 (錯誤 481)

���

只有圖片可以指定給 Picture 屬性或 Picture 物件。此錯誤有以下情況和解決方法：

•	指定非圖示、點陣圖或 Microsoft Windows metafile 的資料給 Picture 屬性或 Picture 物件。

請看屬性的說明主題以決定 Picture 物件或 Picture 屬性可接受的圖片型態。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


資源檔案中有不正確的格式 (錯誤 325)

當存取資源檔案時，擷取的資源必須為正確的格式。此錯誤有以下情況和解決方法：

•	欲擷取的資源檔案有不正確的格式，或檔案的特定資源有不正確的格式。

如果檔案內容有損壞，請從原磁碟重新安裝此檔案。如果錯誤仍在，請聯絡資源產品的供應商以獲取更新的檔案或適當格式的資源版本。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


此鍵值已經被集合物件中的某個元件使用 (錯誤 457)

���

在 Add 方法指定一字串索引鍵此為唯一可識別集合物件中特定成員。此錯誤有以下情況和解決方法：

•	您為集合物件成員指定的索引鍵已經用來識別其他集合物件成員。

對此成員選擇一個不同的索引值。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


此陣列的長度是固定的或暫時被鎖住 (錯誤 10)

���

並非所有陣列均可重訂範圍。即使陣列宣告成動態且在 Variant 變數之內的陣列有時會暫時鎖住。此錯誤有以下的起因和解決方法：

•	使用ReDim 來改變固定大小陣列的元件數目。例如，在下列的程式碼，在 NextOne 程序中 SomeArr 接收了固定大小的陣列，然後欲調整 SomeArr 的大小：

Sub FirstOne

Dim FixedArr(25) As Integer	' 新增一固定大小的陣列並

NextOne FixedArr()	' 將之傳給其它程序。

End Sub

Sub NextOne(SomeArr() As Integer)

ReDim SomeArr(35)	' 發生錯誤 10。

. . .

End Sub

將陣列用 ReDim ( 如果是在程序內宣告陣列 ) 宣告為動態的而非固定大小，或宣告時不指定元件數目 ( 如果是在模組層次宣告陣列 )。

•	對模組層次動態陣列重訂範圍，而某一個元件已經當引數傳給了程序。例如，在下列的程式碼中，ModArray 是模組層次動態陣列，卻將其第 56 個元件以 by reference 傳給 Test 程序：

Dim ModArray () As Integer	' 新增一模組層次動態陣列。

. . .

Sub AliasError()

ReDim ModArray (1 To 73) As Integer

Test ModArray (45)	' 傳遞模組層次動態陣列元件

' 給 Test 程序。

End Sub

Sub Test(SomeInt As Integer)

ReDim ModArray (1 To 40) As Integer  ' 錯誤在此處發生。

End Sub

在此例並不需要傳遞模組層次動態陣列元件，因為在模組中所有程序均可看到它。然而，如果傳遞元件，對於在程序內引用參數，陣列會被鎖住以避免記憶體的配置釋放，如此當程序結束返回時，會導致無法預測的行為出現。

•	指定一個值給含有陣列的 Variant 變數，但 Variant 目前卻是鎖住的。例如，如果您的程式碼使用了 For Each...Next 迴圈對含有陣列的 variant 執行動作的話，在進入迴圈後陣列將鎖住，而在迴圈結束後釋放：

SomeArray = Array(9,8,7,6,5,4,3,2,1)

For Each X In SomeArray

SomeArray = 301	' 因為陣列鎖住導致錯誤。

Next X

使用 For...Next 代替 For Each...Next 迴圈來執行。當陣列是 For Each...Next 迴圈的物件時，您雖可以讀取陣列，但不能寫入。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


在 Automation 的運作過程中找不到檔案名稱或物件類別名稱 (錯誤 432)

���

GetObject 函數需要一個正確的檔案名稱與其路徑，或系統有登記的類別名稱。此錯誤有以下情況和解決方法：

•	呼叫 GetObject 函數時所指定的檔案名稱或類別找不到。

檢查名稱然後再試一次。請確定 class 參數的名稱和系統所登記的相符。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


Automation 物件沒有預設值 (錯誤 443)

���

當您指定一物件名稱時沒有註明屬性或方法，Visual Basic 會假設您引用了物件的預設成員 ( 屬性或方法 )。然而，並非所有物件都設有預設成員。此錯誤有以下情況和解決方法：

•	Visual Basic 無法決定指定物件的預設成員。

檢查物件的文件並且對屬性或方法作說明。

詳細資訊，可選取有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh上)。


遠端伺服器不存在或無法使用 (錯誤 462)

���

CreateObject 函數需要正確的伺服器。此錯誤有以下的起因和解決方法：

•	已指定伺服器參數，但是無法到達或是找不到伺服器。

詳細資訊，可選取有疑問的項目並按下 F1 (在 Windows 中) or HELP (在 Macintosh 上)。


類別未在本地電腦上註冊 (錯誤 463)

���

CreateObject 函數需要正確的伺服器。此錯誤有以下的起因和解決方法：

•	已指定伺服器參數，但是指定的類別 progid (CreateObject 函數的第一個參數) 並未註冊本地系統。

詳細資訊，可選取有疑問的項目並按下 F1 (在 Windows 中) or HELP (在 Macintosh 上)。


找不到方法或資料成員 (錯誤 461)

���

集合物件、物件、或使用者自訂的型態 不包含引用的成員。此錯誤有以下的起因和解決方法：

•	您將物件或成員名稱拼錯。

檢查名稱拼字，並檢查 Type 陳述或物件的相關文件，以便決定所屬成員，以及物件或成員名稱的正確拼法。

•	您指定的集合物件索引超出範圍。

檢查 Count 屬性，以確定集合物件成員是否存在。請注意，集合物件索引是從 1 開始，而不是從 0 開始。因此，Count 屬性會傳回最大可能索引值。

詳細資訊，可選取有疑問的項目並按下 F1 (在 Windows 中) or HELP (在 Macintosh 上)。


<Item> 是不正確的控制項型態 (錯誤 720)

���

只有正確的 ActiveX 元件可以指定為表單上的控制項。此錯誤的原因和解決方案如下：

•	您企圖將 ActiveX 元件指定為表單上的控制項，這是未經確認為正確的控制項元件。

請參閱有關建立 ActiveX 控制項的「說明」主題，以決定什麼是構成可接受控制項的元件。

詳細資訊，可選取有疑問的項目並按下 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。


無法預測的錯誤；離開

發生一個非預期的錯誤，而且 Visual Basic 無法繼續執行。這可能是硬體的問題或是電腦系統裡其它軟體的影響。


正確的值是由 1 到 32 的整數

您想要設定的 TabStop 寬度已超過了允許的範圍。介於 1 到 32 (包含) 的整數是這個資料欄所可以接受的範圍。


正確的值是由 2 到 60 的整數

您想要設定的 Grid Width 或 Grid Height 已超過了允許的範圍。介於 2 到 60 (包含)的整數是這個資料欄所可以接受的範圍。


指定版本為二進位表單，而且不能載入Visual Basic

二進位表單是由早期版本的 Visual Basic 所建立，不能載入到目前版本的 Visual Basic 中。只有 Visual Basic 2.0 及 3.0 版能將二進位表單轉成 ASCII。如果您有 Visual Basic 2.0 或 3.0 版，可以將 1.0 版所建立的表單載入並將其存成文字檔。然後將這些表單匯入目前版本的 Visual Basic 。


此專案檔是唯讀的

���

此專案檔不可以寫入。要改變它必需先將它存成不同的檔名或將唯讀屬性移除。


這是唯讀檔案

���

此檔案不可以寫入。要改變它必需先將它存成不同的檔名或將唯讀屬性移除。


程序名稱重複

同一個範圍內的程序名稱必須是唯一的。您必須改變程序的名稱。


指定的專案檔含有一個不正確的索引鍵值。正確的範圍是 0 到 'item3'

索引鍵值的範圍是有限制的。請將索引鍵值保持在所指定的範圍。


專案名稱過長，部分名稱已被刪除。

���

如果專案名稱超過了允許的長度，它會被縮短為可允許的最大長度。


指定的專案檔含有一個不正確的索引鍵，專案無法載入

當專案檔案包含不正確的索引鍵時，您無法載入此專案。


指定的項目是不正確的索引鍵，指定的檔案無法載入

當檔案包含不正確的索引鍵時，您無法載入此檔案。


指定的專案檔含有不正確的索引鍵值

您指定的索引鍵值是不正確的，請您重新指定。


因記憶體不足造成無法執行；離開

Visual Basic 無法取得足夠的記憶體來執行。請關閉其它的應用程式然後再試一次。


作業系統版本不正確；必須是由指定的 Windows NT 4.0建立或由指定的 Windows 95 建立的版本

若要執行這個版本的 Visual Basic，您必須要在 Windows 95 或 Windows NT 4.0 中才能執行。


產生指定系統錯誤

Visual Basic 遇到一個由系統或外部元件所產生的錯誤。


指定檔案的版本過舊，無法載入

您試圖載入一個 Visual Basic 1.0 版或目前版本之後的表單。目前的版本並沒有支援此功能。


指定的專案檔已損壞，導致無法載入

Visual Basic 無法讀取此專案檔。這可能是因為此檔案已經被 Visual Basic 以外的編輯器修改了。若要解決這個問題，您可以復原已對檔案所做的修改。


無法寫入指定設計師的快取檔案。載入時，將使用一般檔案。

您的 ActiveX 設計師不能將資訊寫入到快取記憶體，所以設計師只會載入不是利用快取記憶體的資訊。

為了增進您下次啟始 Visual Basic 的速度，ActiveX 設計師會編寫一個快取記憶檔。設計師可能會因為磁碟空間太少或對磁碟機沒有正確的使用權限而無法寫入快取記憶檔。請確定您有足夠的可用磁碟空間並且擁有磁碟機的使用權限。如果此問題還是存在，請與 ActiveX 設計師的廠商聯繫。


記憶體不足導致無法載入檔案

Visual Basic 無法取得足夠的記憶體載入檔案。請關閉其它的應用程式然後再試一次。


程序名稱重覆

您利用相同的名稱定義(或試圖去定義)超過一個以上的程序。請您更改其中某一程序的名稱。請確定同一程序中的重覆 Declare 陳述式擁有同樣的 Alias 子句。


找不到 Windows 說明 .exe 檔案
無法顯示說明

Windows 說明應用程式是無效的。如果 MSDN 程式庫檢視器有在您的電腦上，請確認它在您所指定的目錄上。如果它沒有在您的電腦上，您必須在可以檢視「說明」之前先安裝它。


無法顯示系統資訊

當您選擇關於 Microsoft Visual Basic 對話方塊中的系統資訊時，Visual Basic 無法顯示系統的資訊。您的系統可能沒有足夠記憶體，或所需檔案已經損壞或遺漏。


應用程式的描述不可以超過 2000 個字元

您所屬應用程式的描述不可以超過 2000 個字元，請從描述中刪除某些字元。


必須指定列印的項目

您並沒有指定要列印的東西。當您選取 [檔案] 功能表的 [列印] 之後，請至少核取 [列印] 對話方塊中的 [表單] 或 [程式碼] 核取方塊。


指定的物件名稱不正確

表單以及控制項的名稱必須以字母為開頭，並且其最大長度為 40 個字元 --- 包含字母、數字以及底線(_)。

請注意表單或控制項的 Name 屬性與 Label 屬性 --- Caption、Text 以及 Value 等屬性不同 --- 它們會在執行階段標識或顯示出控制項的內容。這些屬性可以是被限制的關鍵字，它們的啟始字元可以是數字，並且可以包含非數字與字母的字元。


指定的名稱與既有的模組、專案與物件程式庫相衝

這個錯誤可能是因為下列的原因：

•	您所載入的表單、使用者控制項、使用者文件或屬性頁所包含的物件中有名稱衝突。這可能是因為此檔案已經被 Visual Basic 以外的編輯器修改了。

•	當您將表單的名稱更改成與專案、其它表單或模組相同的名稱時，這個錯誤也會發生。或當您將專案的名稱更改成與表單或模組相同的名稱時，這個錯誤也會發生。


無法在此時設定專案名稱

在此時無法設定專案名稱。


找不到指定的 ActiveX 元件或註冊不正確

元件必須在系統註冊區中註冊，這項錯誤的原因及解決方法如下：

•	這個元件的註冊資訊不正確，所以無法發現這個元件。

請更改註冊。如果必要的話，重新安裝此元件。

•	該元件被直接刪除，而沒有使用解除安裝程式。

在註冊區指定的目錄中，將該元件檔案置換掉。

如需其它資訊，請選擇有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


專案被保護，所以無法執行此動作

當一個專案被保護後，有些動作是禁止的。這項錯誤發生的原因及解決方法如下：

•	不小心對此專案加上保護。

將保護移除，然後再試一次。

•	這個專案被刻意保護。

在當初加上保護的人把它移除之前，無法執行此動作。

如需要其它資訊，請選擇有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


在目前對話結束之前，無法開始新的記錄。

不能執行 [巢狀] 的記錄。這項錯誤的原因及解決方法如下：

•	已經有記錄器正在執行。

在開始一個新的記錄之前，先結束目前的記錄。

如需要其它資訊，請選擇有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


在移除之前，您想先匯出指定物件嗎？

您可以將表單及模組匯出，並在需要時載入。這項錯誤的發生原因及解決方法如下：

•	您正將表單或模組從一個專案中移除。

若要保留模組，請先將它匯出。以後可以再匯入。

如需要其它資訊，請選擇有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


Visual Basic for Applications 不支援指定檔案所含有的表單物件類別；無法載入這個檔案。

Visual Basic for Appications 只支援 UserForm 的表單物件。這項錯誤發生的原因及解決方法如下：

•	您試圖載入 Visual Basic 之前版本的表單，或目前單機版本 Visual Basic 的表單。

可能最容易的方法就是以 Visual Basic for Applications 工具箱中的 UserForm 來重新設計表單。如果可以的話，將表單以 ASCII 格式加以儲存，將表單修改後再匯入，前提則是你必須完全的瞭解不同表單包裝的格式及限制。

如需要其它資訊，請選擇有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


無法載入指定的檔案。

並不是所有的檔案都可載入 Visual Basic for applications。這項錯誤的原因及解決方法如下：

•	您試圖載入的檔案格式，Visual Basic 無法辯識，或者是檔案損壞。

無法載入此檔案。

如需要其它資訊，請選擇有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


使用這個指令將會停止偵錯。

某些指令或動作使得 Visual Basic 停止程式碼的分析。這項錯誤的原因及解決方法如下：

•	某些編輯動作， 如宣告一個 Static 變數 及某些指令， 如加入新的模組或表單，會使執行中或暫停的程式碼停止。

如果不想停止執行中的程式碼，就不要加入或執行這個指令。

如需要其它資訊，請選擇有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


您必須先將專案儲存起來，然後才能引用。

不能引用未存檔的專案。這項錯誤的原因及解決方法如下：

•	嘗試引用尚未存檔的專案。

在引用前先將專案存檔。

如需要其它資訊，請選擇有疑問的項目並按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


物件用法不正確 (錯誤 425)

大部分的物件只能以特定方式使用，您可能嘗試使用一個物件於其相關範圍之外。例如與拖放事件有關的物件引用，就只能使用在相關事件中。


無法列印表單畫面到這種印表機 (錯誤 486)

必須用可繪圖的印表機來列印表單畫面。


這種物件不能使用 Show() (錯誤 371)

必須是適當的物件才能使用 Show 方法。


找不到指定的 ActiveX 控制項 (錯誤 363)

已載入表單有一個不屬於本專案的 ActiveX 控制項。這項錯誤的原因及解決方法如下：

•	您可能編輯了專案的 .vbp 檔案，並加入一個含有不屬於本專案之 ActiveX 控制項的表單。

請在表單載入後，使用 [檔案] 功能表中的 [新增檔案] 指令，將該 ActiveX 控制項新增到本專案中。

•	您可能編輯了專案的 .vbp 檔案，並加入一個表單，其中含有版本較早的 ActiveX 控制項。

請在表單載入後，刪除表單中較早的版本，再放入新版本的控制項。


ActiveX 元件註冊不正確 (錯誤 336)

ActiveX 元件尚未登錄在系統註冊區中。


找不到資料值 (錯誤 327)

找不到資料值。


圖片不正確 (錯誤 481)

指定了不正確的圖形格式給 Picture 屬性。這項錯誤的原因及解決方法如下：

•	您試圖指定點陣圖、圖示或 Windows 中繼檔( .wmf) 以外的圖形格式，給表單或控制項的 Picture 屬性。

請確認要指定到 Picture 屬性的檔案，是一個 Visual Basic 所支援的圖形檔案。


印表機錯誤 (錯誤 482)

發生某些問題，使得印表工作停頓。這項錯誤的原因及解決方法如下：

•	您尚未在 Windows 的 [控制台] 中安裝好印表機。

請開啟 [控制台]，按兩下 [印表機] 圖示，並按一下 [新增印表機] 來安裝印表機。

•	印表機未上網路。

請實際檢查印表機的連線狀態。

•	印表機卡紙或是沒紙。

實際將這些問題排除。

•	您嘗試將表單，列印到一個只能接受文字的印表機。

換到一個可以列印圖形的印表機。


印表機驅動程式不支援指定的屬性 (錯誤 483)

現用印表機的驅動程式不支援 Printer 物件的這項屬性。這項錯誤的原因及解決方法如下：

•	Printer 物件屬性的功能，取決於印表機廠商所提供的驅動程式。有些屬性的設定可能沒有效用，或是好幾個不同屬性的設定之效用可能都相同。某些設定可能會產生錯誤。

詳細資訊，請參閱驅動程式的說明文件。


問題可能來自印表機，請檢查印表機的安裝是否正確 (錯誤 484)

發生某些問題，使得無法從系統取得印表機資訊。這項錯誤的原因及解決方法如下：

•	您尚未在 Windows 的 [控制台] 中安裝印表機。

請開啟 [控制台]，按兩下 [印表機] 圖示，並按一下 [新增印表機] 來安裝印表機。

•	印表機未上網路。

請實際檢查印表機的連線狀態。

•	印表機卡紙或是沒紙。

實際將這些問題排除。


圖片的格式不正確 (錯誤 485)

您試圖載入的來源檔案，格式不符合物件的某些屬性。這項錯誤的原因及解決方法如下：

•	您試圖使用 LoadResPicture 方法載入一個點陣圖，指定給表單的 Icon 屬性。

請將屬性改成 Picture 屬性，或是將 LoadResPicture 的 format 引數改成 vbResIcon。

•	您試圖用 LoadResPicture 方法來載入游標，做為物件或控制項的 MousePointer 屬性之外的某些屬性。

請將屬性改為 MousePointer。


無法清除剪貼簿 (錯誤 520)

剪貼簿被開啟但未清除。這項錯誤的原因及解決方法如下：

•	其它應用程式正在使用剪貼簿，並且不會將之釋放給您的應用程式。

請在程式碼中為這種情形設定一個錯誤處理常式，並提供一個含有 [重試] 及 [取消] 按鈕的訊息方塊，讓使用者在暫停後可再重試。


無法開啟剪貼簿 (錯誤 521)

剪貼簿已由其它應用程式開啟。這項錯誤的原因及解決方法如下：

•	其他的應用程式正在使用剪貼簿，且無法將之釋放給您的應用程式。

請在程式碼中為這種情形設定一個錯誤處理常式，並提供一個含有 [重試] 及 [取消] 按鈕的訊息方塊，讓使用者在暫停後可再重試。


指定的格式與資料本身不符合 (錯誤 461)

指定的 Clipboard 格式與要執行的方法不相容。這項錯誤的原因及解決方法如下：

•	您試圖以 vbCFText 或 vbCFLink 之外的剪貼簿格式，來使用GetText方法或 SetText 方法。

在使用這些方法前，請先使用 GetFormat 方法來測試剪貼簿的目前內容是否符合指定的格式。

•	您試圖以 vbCFBitmap、vbCFDIB 或 vbCFMetafile 之外的剪貼簿格式，來使用 GetData方法或 SetData 方法。

在使用這些方法前，請先使用 GetFormat 方法來測試剪貼簿的目前內容是否符合指定的格式。


不正確的剪貼簿格式 (錯誤 460)

指定的剪貼簿格式與執行的方法不相容。這項錯誤的原因及解決方法如下：

•	您試圖以 vbCFText 或 vbCFLink 之外的剪貼簿格式，來使用 GetText 方法或 SetText 方法。

請移除不正確的格式，並從兩個正確格式中指定一個。

•	您試圖以 vbCFBitmap、vbCFDIB 或 vbCFMetafile 之外的剪貼簿格式，來使用 GetData 或 SetData 方法。

請移除不正確的格式，並從三個正確圖形格式中指定一個。


找不到此元件的使用權資訊，您無法在設計環境中使用這項功能 (錯誤 429)

您並未被授權使用這個 ActiveX 控制項。這項錯誤的原因及解決方法如下：

•	您試圖在設計階段將 ActiveX 控制項放置在一個表單上，或試圖在專案上新增一個帶有ActiveX 控制項的表單，但是在註冊區並未發現相關的資訊。

註冊區的資訊可能被刪除了或是損壞。請重新安裝 ActiveX 控制項或是接洽控制項的供應商。


表單己經顯示；不能再以強制回應的方式顯示此表單 (錯誤 400)

您不能用 Show 方法，以強制回應的方式顯示一個可見的表單。這項錯誤的原因及解決方法如下：

•	您試圖在可見的表單上，使用將 style 引數設定成 1 - vbModal 的 Show。

請在以強制回應的方式顯示表單之前，使用 Unload 陳述式或 Hide 方法。


必須先關閉或隱藏最上方的強制回應表單 (錯誤 402)

嘗試關閉或隱藏的強制回應表單，並非位在 z-order 的最上方。這項錯誤的原因及解決方法如下：

•	另一個強制回應表單在 z-order 中，高於目前所要關閉或隱藏的強制回應表單。

首先對 z-order 中較高的強制回應表單，使用 Unload 陳述式或 Hide 方法。強制回應表單是以將 style 引數設定成 1 - vbModal 的 Show 方法來顯示的。


無法載入或載出此物件 (錯誤 361)

Load 陳述式或 Unload 陳述式中引用不正確的物件或控制項。這項錯誤的原因及解決方法如下：

•	您試圖載入或載出一個不可載入的物件，例如 Screen、Printer 或 Clipboard。

從程式碼中刪除錯誤的陳述式。

•	您試圖載入或載出不屬於控制項陣列的控制項。例如，假設存在有一個 Name 屬性為 Text1 的 TextBox，則 Load Text1 將會造成這項錯誤。

請從程式碼中刪除錯誤的陳述式，或者改變控制項的引用項目。

•	您試圖在父功能表的 Click 事件中載出一個功能表控制項。

請在其它程序中載出此功能表控制項。

•	您試圖載出功能表中最後一個可見的功能表項目。

請在載出功能表項目之前，先檢查控制項陣列中其它功能表項目的 Visible 屬性設定，或是從程式碼中刪除錯誤的陳述式。


已載入物件 (錯誤 360)

控制項陣列中的控制項已經載入。這項錯誤的原因及解決方法如下：

•	您試圖以 Load 陳述式，於執行階段新增一個控制項到控制項陣列中，但是所引用的索引值已經存在。

請將索引改成一個新值，或是檢查程式碼是否以相同的索引值，執行 Load 陳述式超過一次以上。


找不到表單 (錯誤 424)

找不到表單。這項錯誤的原因及解決方法如下：

您試圖以 Add 方法新增一個表單到 UserForms 集合物件，但是沒有這個名稱的表單類別。例如， UserForms.Add "MyForm"，其中 MyForm 並不存在。

附註���請確認專案是否可以用此類別名稱。


在目前狀態下無法載出 (錯誤 365)

某些情況下，不能從一個表單中載出一個表單或控制項。這項錯誤的原因及解決方法如下：

•	在一個有 Paint 事件之表單上的表單或控制項，其 Paint 事件程序中有一個 Unload 陳述式。

請從 Paint 事件程序中移除此 Unload 陳述式。

•	在 ComboBox 的 Change、Click 或 DropDown 事件中有一個 Unload 陳述式。

請從事件程序中移除 Unload 陳述式。

•	在 HScrollBar 或 VScrollBar 控制項的 Scroll 事件中有一個 Unload 陳述式。

從事件程序中移除 Unload 陳述式。

•	在 Data、Form、MDIForm 或 PictureBox 控制項的 Resize 事件中有一個 Unload 陳述式。

請從事件中移除 Unload 陳述式。

•	在 MDIForm 的 Resize 事件中有一個 Unload 陳述式，其試圖載出一個 MDI 子表單。

請從事件中移除 Unload 陳述式。

•	在 Data 控制項的 RePosition 事件或 Validate 事件中有一個 Unload 陳述式。

請從事件中移除 Unload 陳述式。

•	在 OLE Container 控制項的 ObjectMove 事件中有一個 Unload 陳述式。

請從事件中移除 Unload 陳述式。


無法載入指定的系統 DLL (錯誤 298)

找不到由作業系統提供的 .dll 檔案；例如，DDEML.DLL、 VERSION.DLL 或 WINSPOOL.DRV。這項錯誤的原因及解決方法如下：

•	可能檔案並未放在適當的路徑。

請確認 DLL 放在 Windows System 的路徑。

•	DLL 損壞或被刪除。

重新載入 DLL。

•	記憶體或交換檔不足。

請試著關閉一些其它的應用程式，以節省記憶體。


在檔案名稱中有不能使用字元周邊設備名稱 (錯誤 320)

於 Visual Basic 中，檔案名稱不能與字元周邊設備相同。這項錯誤的原因及解決方法如下：

•	您試圖使用如 AUX、CON、COM1、COM2、LPT1、 LPT2、LPT3、LPT4 或 NUL 等做為檔名。

請為檔案取另一個名稱。


檔案格式不正確 (錯誤 321)

Visual Basic 表單檔案損壞。這項錯誤的原因及解決方法如下：

•	表單中有一個損壞的 ActiveX 控制項。

請試著更換表單上的 ActiveX 控制項。

•	目前版本的 ActiveX 控制項中之屬性數目，不符合所須的屬性數目。

請試著換成較早版本或較晚版本的 ActiveX 控制項。


不合法的參數，無法寫入陣列 (錯誤 328)

您傳遞了不正確的參數給方法。這項錯誤的原因及解決方法如下：

•	在 User 控制項的 WriteProperties 事件中，試圖做 PropBag.WriteProperty X，其中 X 是一個陣列。而這是不支援的動作。

您必須個別寫出陣列的各元件。


無法存取系統註冊區 (錯誤 335)

您試圖讀取或寫入系統註冊區，但沒有成功。


找不到 ActiveX 元件 (錯誤 337)

找不到所需要的 exe或 .dll 檔案。


ActiveX 元件執行不正確 (錯誤 338)

ActiveX 元件的.exe檔無法正確執行。註冊區中的資訊可能有問題。


已載出物件 (錯誤 364)

表單無法從本身的 _Load 程序中載出。這項錯誤的原因及解決方法如下：

•	一個在其 _Load 程序中有 Unload 陳述式的表單，被隱含地載入。例如，下面將會隱含地載入 YourForm，如果其尚未載入的話：MyForm.BackColor = YourForm.BackColor.

請從 Form_Load 程序中移除 Unload 陳述式。


此指定的檔案是舊的版本。此程式需要較新的版本 (錯誤 368)

ActiveX 控制項是舊的版本。這項錯誤的原因及解決方法如下：

•	目前版本的 ActiveX 控制項中之屬性數目不符合所須的屬性數目。

請以較新版本的 ActiveX 控制項來置換。


屬性值不正確 (錯誤 380)

將不適當的值指定給一個屬性。這項錯誤的原因及解決方法如下：

•	您試圖將一個物件或控制項的屬性的值，設定為超出其所允許的範圍。

請將屬性值改為正確的設定。例如，MousePointer 屬性就必須設定在整數的 0 �} 15 或 99 的範圍內。


$無法在執行階段設定指定屬性 (錯誤 382)

這個屬性在執行階段是唯讀的。這項錯誤的原因及解決方法如下：

•	您試圖設定或改變一個只能在設計階段設定的屬性。

請從程式中移除屬性的引用，或是將引用改成在執行階段只傳回屬性值。


此指定屬性是唯讀的 (錯誤 383)

這個屬性在設計階段及執行階段均為唯讀的。這項錯誤的原因及解決方法如下：

•	您試圖設定或修改一個只能讀取的屬性。

請從程式碼中移除這個引用，或是將引用改成在執行階段只傳回屬性值。


無法在執行階段讀取此指定屬性 (錯誤 393)

這個屬性只在設計階段可使用。這項錯誤的原因及解決方法如下：

•	您試圖在執行階段讀取一個只能在設計階段存取的屬性。

請修改程式碼，並移除這個屬性的引用。


此指定屬性是唯寫的 (錯誤 394)

這個屬性是不能讀取的。這項錯誤的原因及解決方法如下：

•	這個屬性不能讀取；例如，ctl.property = 3 可能是正確的，但 "Print�ctl.property" 則會產生錯誤。

請修改程式碼，並移除這個屬性的引用。


沒有使用物件的權限 (錯誤 419)

您並沒有存取此物件的權限。這項錯誤的原因及解決方法如下：

•	您目前沒有權力存取這個物件。

改變您的權限，請洽詢系統管理者或是該物件的建立者。


無法建立 AutoRedraw 影像 (錯誤 480)

Visual Basic 無法建立持續的點陣圖，以自動重繪表單或圖片。這項錯誤的原因及解決方法如下：

•	沒有足夠的記憶體將 AutoRedraw 屬性設定成 True。

設定 AutoRedraw 屬性為 False，並在 Paint 事件程序中執行您自己的重繪，還是將 PictureBox 控制項或 Form 物件變得小一點，再試一次將 AutoRedraw 設定成 True 的動作。


記憶體不足 (錯誤 31001)

對特定的工作，您的無法配置還是存取足夠的記憶體或磁碟空間。


沒有物件 (錯誤 31004)

試圖對一不存在的物件執行某個動作。


物件類別尚未設定 (錯誤 31018)

當設定Action = 0 (建立內嵌方法)時，如果未指定來源文件(SourceDoc 屬性)，則 Class 屬性必須設定成在系統上可用的物件類別名稱。

在設計階段，要顯示可用之物件類別名稱的清單，滑鼠右鍵按一下 OLE 收納器控制項，並選擇 [插入物件] 指令。


無法啟動物件 (錯誤 31027)

這物件的來源文件並未載入，或建立此物件的應用不可用。

這個錯誤發生在試圖啟動一個連結物件 ( 設定 Action = 7 )，且在 SourceDoc 屬性中所指定的檔案已被刪除，或不再存在。

這個錯誤也發生在啟動一個物件 ( 設定 Action = 7 )，而由 Verb 屬性所指定的動作不正確。某些提供物件的應用程式可支援不同的動作，取決於應用程式的狀態。應用程式提供的所有動作，均列在 ObjectVerbs 屬性清單中。然而，某些動作在應用程式的目前狀態下無效。


無法建立內嵌的物件 (錯誤 31032)

在建立物件的應用程式中，無法建立如 SourceDoc 屬性中所指定的物件。

例如，這個錯誤的發生是在嘗試要內嵌一個試算表物件，而 SourceDoc 指定的試算表太大，以致試算表應用程式無法載入時。


儲存檔案錯誤 (錯誤 31036)

Visual Basic 無法將物件寫入指定的檔案 (設定 Action = 11，或 18)。可能的原因是：

•	FileNumber 屬性不正確。

•	指定的檔案並不是以 Binary 模式開啟的。

•	磁碟空間不足。


載入檔案錯誤 (錯誤 31037)

���

在試圖讀取指定檔案時 (設定 Action = 12) 發生錯誤。可能的原因是：

•	FileNumber 屬性不正確。

•	檔案並不是以 Binary 模式開啟的。

•	檔案沒有適當的存檔 (設定 Action = 11)。

•	檔案損壞。

•	檔案位置並不是在正確的 OLE 物件的起點。


在指定的行上：指定的表單名稱不正確；無法載入這個表單

此 ASCII 檔案所包含的表單名稱在 Visual Basic 中是不正確的字串。此表單並沒有被載入。


在指定的行上：無法建立內嵌的指定物件

���

當從文字檔中載入表單、使用者控制項、使用者文件，或屬性頁的時候，無法建立嵌入的物件。舉例而言，您將會產生這個錯誤，如果先前已經在表單中插入一個 Microsoft Word 文件，當您從系統中移除 Microsoft Word 的時候。這個訊息會被寫入到錯誤記錄檔中。


在指定的行上：無法建立內嵌的指定物件；找不到授權資料

當從文字檔中載入表單、使用者控制項、使用者文件，或屬性頁的時候無法建立嵌入的物件，這是因為找不到授權檔案。您必須要有授權才能使用這個物件。請與物件的供應商連繫以取得更詳細的資料。這個訊息會被寫入到錯誤記錄檔中。


在指定的行上：控制項最大容許的巢狀層次超過了指定項目

ASCII 檔所包含控制項的巢狀層次超過 7 個。


在指定的行上：所有的控制項必須在功能表之前，無法載入指定的控制項

控制項出現在 ASCII 表單檔案中的位置不正確。所有的控制項必須在功能表之前載入。


在指定的行上：指定的上層功能表不能載入為分隔符號

ASCII 檔案所包含 Menu 控制項的上層或最上層功能表，被定義成功能表分隔符號。上層功能表不能載入為功能表分隔符號。這個分隔符號不能被設定。


在指定的行上：在指定的上層功能表中無法設定核取屬性，上層功能表不能有核取記號

一個 Checked 屬性設定為 True.的最上層 Menu 控制項，出現在 ASCII 表單檔案中。最上層功能表不可以有核取記號。此 Menu 控制項會被載入，但是它的 Checked 屬性不會被設定。


在指定的行上：在指定的功能表中無法設定Shortcut屬性，上層功能表不可以有快速鍵

一個有設定快速鍵的最上層 Menu 控制項，出現在 ASCII 表單檔案中。最上層功能表不可以有快速鍵。此 Menu 控制項會被載入，但是它的 Shortcut 屬性不會被設定。


在指定的行上：指定的表單名稱已在使用中；無法載入此表單

ASCII 檔所包含表單的名稱已經在應用程式的某處使用中。此表單不會被載入。


在指定的項目中發現屬性相衝，所以將使用預設值

表單、使用者控制項、屬性頁、使用者文件，或物件類別模組的某些屬性與它們型態必須設定的屬性相衝突。舉例而言，表單必須要將 VB_PredeclaredId 屬性設定成 True。如果此檔案是由 Visual Basic 以外的編輯器所修改，則會發生此錯誤。


指定的項目是唯讀檔案

您要求儲存一個唯讀檔案。唯讀檔案在 【專案總管】 中是以 [image] 來顯示。您不能儲存一個唯讀檔案。請使用 [另存新檔]。


在指定的行上：無法建立指定的引用

無法建立由某個程式行所指示的引用。


在指定的行上：無法載入指定的檔案

語法錯誤會使 Visual Basic 無法分析以及載入一個檔案，而表單名稱的衝突也會使它無法載入一個 ASCII 表單。該表單並不會被載入，且表單的名稱也不會顯示在【專案總管】中。

請您確定引起此錯誤的檔案是一個正確格式的 ASCII 表單，並且沒有與專案中其它的表單相衝突。


載入時發生錯誤

請檢查錯誤 log 檔以獲得更詳細的說明資訊。


無法載入指定的項目。把它從增益集中移除嗎？

Visual Basic 不能載入您在 [增益功能管理員] 對話方塊的 [可使用的增益功能] 清單中所選取的增益集。您可以按一下 [是]，從清單中移除它；或按一下 [否]，而將它留在清單中。不管選擇了那一個，您都不能載入它。


Visual Basic 無法載入指定的項目，因為其並不在系統註冊區中。請確定所有的增益功能都已正確安裝了。

Visual Basic 不能載入您在 [增益功能管理員] 對話方塊的 [可使用的增益功能] 清單中所選取的增益集，因為它沒有在系統註冊區做適當的註冊或尚未註冊過。


顯示更詳細的錯誤嗎？

您可以按一下 [確定] 以檢視更多的錯誤，若不要則可按一下 [取消]。


指定的項目無法被載入

語法錯誤會使 Visual Basic 無法分析以及載入一個檔案，而表單名稱的衝突也會使它無法載入一個 ASCII 表單。該表單並不會被載入，並且表單的名稱也不會顯示在【專案總管中】。

請您確定引起此錯誤的檔案是一個正確格式的 ASCII 表單，並且沒有與專案中其它的表單相衝突。


版本號碼遺失或不正確

不是找不到版本記號，就是無法辨識所指定的版本。請您確定第一個程式行不是空白，或 ASCII 表單中是否有註解指出正確的版本。


指定的項目被指定的專案引用，所以無法更新

所指定的控制項正被一個以上的專案引用。為某個專案更新它，可能會使得其它專案的引用變成不正確。


無法移除此控制項或引用的物件；正在使用中

您想要移除的 ActiveX 控制項或引用，正被專案中的某個表單所使用。先從表單中移除此控制項或引用的物件，然後將它在清單中的選擇取消。


此時無法離開

當 Visual Basic 正在執行或處於中斷模式，以及有對話方塊或訊息方塊正在顯示的時候，您都不能離開 Windows 。


載入指定的項目錯誤。載入屬性時發生錯誤。繼續嗎？

您想要載入的表單與控制項的名稱，可能與專案中已存在表單的名稱相衝突。舉例而言，您載入一個包含 Form1 的 Form2 就可能會引發這個錯誤。


載入指定的項目錯誤。載入控制項時發生錯誤。繼續嗎？

這個錯誤訊息會在其它的錯誤發生之後才出現。在您為上述錯誤採取了適當動作後，您仍然會看到這個訊息。若您仍要載入此控制項請按一下 [是] ；若要取消載入請按一下 [否]。


指定的項目是舊的檔案格式。在儲存時，會被存成新的格式

這個檔案是由先前的 Visual Basic 版本所建立。儲存時，它將會被儲存成目前版本的格式。


專案中己有指定的項目

您指定的檔案已經是專案的一部份，您不能再新增相同的檔案到專案中。您所儲存檔案的名稱也不能與專案中其它檔案的名稱相同。


載入時錯誤。詳情請參考指定的項目

某些非預期的事情出現在 ASCII 表單檔案中。Visual Basic 會建立一個記錄檔以提供有關此錯誤的更詳細資料。您應該檢查此記錄檔以決定此問題的嚴重性。某時候您可以放心地忽略這些錯誤。然而，有時候，這些錯誤可能會讓表單無法如預期一般的執行。


字串太長導致無法處理；放棄載入表單

表單中即將載入的內嵌字串太長，以至於無法處理。


專案中一個或多個檔案已被修改。您是否要現在儲存這些修改嗎？

專案中檔案的某一屬性或程式碼陳述式已經改變過，並且此改變尚未被儲存。這是您在載入其它專案之前的最後一次儲存機會。


指定的項目無法被註冊

所指定的檔案不能在系統註冊區中註冊。這個錯誤與 Visual Basic 發展環境的元件所使用的型態程式庫相關，並且指出在系統註冊區中，此指定檔案的項目已經損壞或此 DLL 本身已經遺漏或損壞。


其他應用程式目前正在存取您程式中的物件。現在結束此程式會造成那些程式的錯誤。真的要結束嗎？

您正在執行的 Visual Basic 程式所包含的 Automation 物件正被一個以上的其它應用程式所存取。中止您的程式，可能會在其它的應用程式中引起錯誤。您可以按一下 [是] 來結束您的程式，或按一下 [否] 來繼續程式的執行。


在指定的項目中有一或多個屬性不正確。可能是沒有正確地設定屬性的值

所指定的專案檔案中，有一個或多個不正確的屬性設定。此錯誤只有在與專案檔案有相關時才會出現。


在指定的項目中發現名稱相衝，所以將使用指定的名稱

此表單的名稱在某表單、使用者控制項、屬性頁或使用者文件的原始檔案中出現兩次。如果此檔案是由 Visual Basic 以外的編輯器所修改，則會發生此錯誤。


在指定的行上：指定的控制項的名稱不正確

ASCII 檔案所包含的某個控制項名稱，在 Visual Basic 中是不正確的字串。此控制項不會被載入。


在指定的行上：指定的屬性名稱不正確

ASCII 檔案所包含的某個屬性名稱，對此控制項而言是不正確的屬性。


在指定的行上的項目中，屬性名稱不可以是含有引號的字串

一個含有引號的字串出現在 ASCII 表單檔案中，其原本應為屬性名稱。屬性名稱不可以放到引號裡面 (" ")。


在指定的行上：指定的屬性有一個不正確的屬性索引

ASCII 檔案所包含的某個屬性名稱，其屬性索引超過 255。


在指定的行上：無法載入指定的屬性

ASCII 檔案包含一個未知的屬性。此屬性在表單載入的時候會被捨棄掉。


在指定的行上：指定的屬性必須是含有引號的字串

ASCII 檔案所包含的某個屬性應該出現在引號之中，但是引號被遺漏掉了。這行在表單描述中的程式行會被忽略掉。


在指定的行上：指定的屬性值不正確

ASCII 檔案所包含的某個屬性值，對此控制項而言是不正確的。此屬性會設定成它的預設值。


在指定的行上：指定的屬性所引用的檔案有誤

對於 ASCII 檔案中對某個檔案的引用，Visual Basic 無法在指定的目錄中找到。


在指定的行上：無法設定指定的屬性

對於 ASCII 檔案中表單描述所指示的特定控制項，Visual Basic 無法設定它的屬性。


在指定的行上：指定的控制項的指定的物件類別尚未被載入

ASCII 檔案所包含的控制項物件類別無法被 Visual Basic 識別。此物件類別將以自訂控制項的方式，新增到您的專案中。


在指定的行上：找不到索引屬性，而且指定的控制項已存在

此控制項無法被載入，因為它沒有索引，且它的名稱與先前被載入控制項的名稱相同。


在指定的行上：控制項名稱太長；請適當刪減

ASCII 檔案所包含的某個控制項名稱長度超過 40 個字元。此控制項會被載入，但是其名稱會縮短為 40 個字元。


在指定的行上：物件類別名稱太長；請適當刪減

ASCII 檔案所包含的某個物件類別名稱長度超過 40 個字元。此物件類別會被載入，但是其名稱會縮短為 40 個字元。


在指定的行上：語法錯誤：指定的屬性漏掉了等號 (=)。

ASCII 檔案所包含的某個屬性名稱與值之間少了等號 (=) 。此屬性不會被載入。


在指定的行上：無法載入指定的控制項；包含的控制項不是一個正確的收納器

您試圖將控制項載入到一個不正確的收納器中。


在指定的行上：無法載入指定的控制項；名稱已被使用

ASCII 文字檔案中的控制項名稱不能被載入，因為它的名稱已經在應用程式的某處使用中。


在指定的行上：在指定的檔案中，有不正確或遺漏的控制項物件類別

ASCII 檔案在表單描述中包含一個未知的控制項物件類別，或是此物件類別名稱在 Visual Basic 中是不正確的字串。


在指定的行上：在指定的檔案中，有不正確或遺漏的的控制項名稱

ASCII 檔案在表單描述中包含一個未知的控制項名稱，或是此控制項名稱在 Visual Basic 中是不正確的字串。


在指定的行上：無法載入指定的控制項；找不到授權資料

當從文字檔中載入表單、使用者控制項、使用者文件，或屬性頁的時候無法載入 ActiveX 控制項。此控制項可能遺漏或毀壞了，您可以重新安裝此控制項並再試一遍。此訊息會被寫入到錯誤記錄檔案中。


在指定的行上：指定的CLSID 不正確

當從文字檔中載入表單、使用者控制項、使用者文件，或屬性頁的時候無法載入物件。檔案中 CLSID 的指定是不正確的。它只適用於屬性物件，例如 Font 物件。此訊息會被寫入到錯誤記錄檔案中。


無法建立對指定的項目的引用

當載入檔案並建立一個引用的時候發生了錯誤，所以此引用並未被新增。


指定的項目無法載入，其名稱已被使用了

您不能同時載入某特定種類的兩個相同項目。


ChDir 陳述式範例

本範例使用 ChDir 陳述式來改變目前的工作目錄或資料夾。在 Macintosh 中，預設的磁碟機名稱是「HD」，並且路徑部分由冒號取代反斜線分隔。同樣，可以指定 Macintosh 資料夾來取代 \Windows。最後，在 Macintosh 中，萬用字元不再有特殊的意義，只作為普通的字元。

' 將目前的目錄或資料夾改為「MYDIR」。

ChDir "MYDIR"

' 假設目前的磁碟機是「C:」，下列陳述式將把

' 預設目錄改至「D:」，而「C:」仍舊是現行目錄。

ChDir "D:\WINDOWS\SYSTEM"


ChDrive 陳述式範例

本範例使用 ChDrive 陳述式來改變目前的磁碟機。在 Macintosh 中，「HD:」是預設的磁碟機名稱並且 ChDrive 將改變目前資料夾到指定的磁碟機的根資料夾中。下面的範例假定機器存在磁碟機 D。

ChDrive "D"	' 將「D」磁碟設成現行磁碟。


CurDir 函數範例

本範例使用 CurDir 函數來傳回目前的路徑。在 Macintosh 中，使用 CurDir 可以忽略磁碟機的名稱。預設的磁碟機名稱是「HD」，並且路徑部分由冒號取代反斜線分隔。同樣，可以指定 Macintosh 資料夾來取代 \Windows。

' 假設 C 磁碟的現行路徑為「C:\WINDOWS\SYSTEM」(在 Microsoft Windows 中)。

' 假設 D 磁碟的現行路徑為「D:\EXCEL」。

' 假設 C 為目前的磁碟機。

Dim MyPath

MyPath = CurDir	' 傳回「C:\WINDOWS\SYSTEM」。

MyPath = CurDir("C")	' 傳回「C:\WINDOWS\SYSTEM」。

MyPath = CurDir("D")	' 傳回「D:\EXCEL」。


Dir 函數範例

本範例使用 Dir 函數來檢查某些特定的檔案或目錄是否存在。在Macintosh中，「HD:」是預設的磁碟機名稱，並且路徑部分由冒號取代反斜線分隔。而且，Microsoft Windows的萬用字元在Mac中可作為有效字元出現在檔案名中。也可以用 MacID函數指定檔案群組。

Dim MyFile, MyPath, MyName

' 傳回「WIN.INI」(在 Microsoft Windows 中)(如果該檔案存在)。

MyFile = Dir("C:\WINDOWS\WIN.ini")

' 如果超過一個 *.ini 檔案存在電腦裏，也可以傳入指定的副檔名加以搜尋。

' 函數將傳回第一個找到符合條件的檔案名稱。

MyFile = Dir("C:\WINDOWS\*.ini")

' 若再呼叫此函數，但不傳入任何引數，則函數將傳回和第一個找到的檔案相同目錄下第二個找到的 *.ini 檔案。

MyFile = Dir

' 傳回第一個找到隱藏的 *.TXT 檔案。

MyFile = Dir("*.TXT", vbHidden)

' 將「C:\」根目錄下的子目錄顯示出。

MyPath = "c:\"	' 指定路徑。

MyName = Dir(MyPath, vbDirectory)	' 找尋第一個子目錄。

Do While MyName <> ""	' 執行迴圈。

' 跳過目前的目錄及上層目錄。

If MyName <> "." And MyName <> ".." Then

' 使用位元比對來確定 MyName 代表一目錄。

If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then

Debug.Print MyName	' 將目錄名稱顯示出來。

End If

End If

MyName = Dir	' 尋找下一個目錄。

Loop


Environ 函數範例

本範例使用 Environ 函數來得到從環境變數表中 PATH 陳述式的長度及路徑項目數。在Macintosh中不可用。

Dim EnvString, Indx, Msg, PathLen	' 宣告變數。

Indx = 1	' 設定索引值的初值為 1。

Do

EnvString = Environ(Indx)	' 取得環境變數。

If Left(EnvString, 5) = "PATH=" Then	' 檢查是否為 PATH 項。

PathLen = Len(Environ("PATH"))	' 取得長度。

Msg = "PATH entry = " & Indx & " and length = " & PathLen

Exit Do

Else

Indx = Indx + 1	' 若不是一個 PATH 項，

End If	' 則跳過此項，繼續檢查下一項。

Loop Until EnvString = ""

If PathLen > 0 Then

MsgBox Msg	' 顯示訊息。

Else

MsgBox "No PATH environment variable exists."

End If


FileCopy 陳述式範例

本範例使用 FileCopy 陳述式來複製檔案。範例中假設 SRCFILE 為一個含有某些資料的檔案。

Dim SourceFile, DestinationFile

SourceFile = "SRCFILE"	' 指定來源檔名。

DestinationFile = "DESTFILE"	' 指定目的檔名。

Filecopy SourceFile, DestinationFile	' 將來源檔的內容複製到目的檔中。


FileDateTime 函數範例

本範例使用 FileDateTime 函數來得知檔案建立，或上次修改的日期與時間。日期與時間的顯示格式是依照您的電腦的地區設定而定的。

Dim MyStamp

' 假設 TESTFILE 上次被修改的時間為 February 12, 1993，4:35:47 PM。

' 假設 English/U.S. 地區設定。

MyStamp = FileDateTime("TESTFILE")	' 傳回「2/12/93 4:35:47 PM」。


FileLen 函數範例

本範例使用 FileLen 來傳回檔案的長度 (以 Byte 為單位)。範例中假設 TESTFILE 為一個含有某些資料的檔案。

Dim MySize

MySize = FileLen("TESTFILE")	' 傳回檔案長度 (以 Byte 為單位)。


GetAttr 函數範例

本範例使用 GetAttr 函數來得知檔案及目錄，或資料夾的屬性。在 Macintosh 中，只有常數vbNormal， vbReadOnly， vbHidden和 vbAlias是可用的。

Dim MyAttr

' 假設 TESTFILE 為隱藏檔。

MyAttr = GetAttr("TESTFILE")	' 傳回 2。

' 如果 TESTFILE 為隱藏檔，則顯示出非零的數值。

Debug.Print MyAttr And vbHidden

' 假設 TESTFILE 為唯讀且隱藏檔。

MyAttr = GetAttr("TESTFILE")	' 傳回 3。

' 如果 TESTFILE 為唯讀且隱藏檔，則顯示出非零的數值。

Debug。Print MyAttr And (vbHidden + vbReadOnly)

' 假設 MYDIR 代表一目錄或資料夾。

MyAttr = GetAttr("MYDIR")	' 傳回 16。


Kill 陳述式範例

本範例使用 Kill 陳述式將磁碟中的檔案刪除。

' 假設 TESTFILE 檔案中包含某些資料。

Kill "TestFile"	' 刪除該檔。

' 將現行目錄下所有 *.TXT 檔案全部刪除。

Kill "*.TXT"


MkDir 陳述式範例

本範例使用 MkDir 陳述式來建立一個目錄或資料夾。如果沒有指定要建立在哪一個磁碟機中，新目錄或資料夾將會建在現行磁碟機中。

MkDir "MYDIR"	' 建立新的目錄或資料夾。


Name 陳述式範例

本範例使用 Name 陳述式來更改檔案的名稱。範例中假設所有使用到的目錄資料夾都已事先存在電腦裏。在 Macintosh 中，「HD:」 是預設的磁碟機名稱，並且路徑部分由冒號取代反斜線分隔。

Dim OldName, NewName

OldName = "OLDFILE": NewName = "NEWFILE"	' 定義檔案名稱。

Name OldName As NewName	' 更改檔名。

OldName = "C:\MYDIR\OLDFILE": NewName = "C:\YOURDIR\NEWFILE"

Name OldName As NewName	' 更改檔名，並將檔案搬移至另一個目錄中。


QBColor 函數範例

本範例使用 QBColor 函數將 MyForm 表單的 BackColor 屬性，改成 ColorCode 引數指定的色彩。QBColor 可接受 0 到 15 的整數值。

Sub ChangeBackColor (ColorCode As Integer, MyForm As Form)

MyForm.BackColor = QBColor(ColorCode)

End Sub


RGB 函數範例

本範例示範如何使用 RGB 函數來傳回一個代表 RGB 色彩值的整數，此函數通常用在和色彩有關的方法或屬性。範例中的 MyObject 物件及其屬性是作為示範說明之用。如果 MyObject 並不存在，或者它並沒有 Color 屬性，程式會發生錯誤狀況。

Dim RED, I, RGBValue, MyObject

Red = RGB(255, 0, 0)	' 傳回代表紅色的色彩值。

I = 75	' 設定偏移值。

RGBValue = RGB(I, 64 + I, 128 + I) 	' 和 RGB(75, 139, 203)的結果一樣。

MyObject.Color = RGB(255, 0, 0)	' 設定 MyObject 的 Color 屬性為紅色。


RmDir 陳述式範例

本範例使用 RmDir 陳述式刪除一個已存在的目錄或資料夾。

' 假設 MYDIR 為一空的目錄或資料夾。

RmDir "MYDIR"	' 將 MYDIR 移除。


SetAttr 陳述式範例

本範例使用 SetAttr 陳述式來設定檔案的屬性。在 Macintosh 中，只有常數vbNormal， vbReadOnly， vbHidden和 vbAlias是可用的。

SetAttr "TESTFILE", vbHidden	' 設定檔案為隱藏。

SetAttr "TESTFILE", vbHidden + vbReadOnly	' 設定檔案為唯讀且隱藏。


ChDir 陳述式

��� [image] ���

改變目前的目錄或檔案夾。

語法

ChDir path

Chdir ( 路徑 ) 引數是必要的引數，它是用來表示目錄或檔案夾的字串運算式，路徑也可以加上磁碟機名稱，如果沒有指定磁碟機，則 ChDir 所改變的目錄或檔案夾會在目前的磁碟機。

請注意

ChDir 陳述式會改變現有目錄位置，但不會改變磁碟機位置，例如，如果現在的磁碟機是 C，則底下的陳述式會將現有目錄切換到磁碟機 D，但是 C 仍然是現有的磁碟機位置：

ChDir "D:\TMP"

在 Power Macintosh中，預設的磁碟機總是改為在path 陳述句中指定的磁碟機。完整路徑指定由標籤名開始，相對路徑由冒號 (:) 開始。ChDir可以辨認路徑中指定的別名：

ChDir "MacDrive:Tmp"	' 在 Macintosh 中。

注意，當改變相對路徑時，在Microsoft Windows和Macintosh中使用不同符號：

ChDir ".."	' 在 Microsoft Windows 中，上移一層目錄.

ChDir "::"	' 在 Macintosh 中，上移一層目錄.


ChDrive 陳述式

��� [image] ���

改變目前的磁碟機。

語法

ChDrive drive

磁碟機引數是必要的，它是用來表示現有磁碟機的字串運算式，如果你使用長度為零的字串 ("")，則目前的磁碟機將不會改變，如果引數中有多個字元，則 ChDrive 只會使用第一個字母。

在Macintosh中，ChDrive將目前資料夾改變到指定磁碟機的根資料夾。


CurDir 函數

��� [image] ���

傳回一個 Variant (String)，用來代表目前的路徑。

語法

CurDir[(drive)]

drive 引數是選擇性引數，它是用來指定目前磁碟機的字串運算式，如果沒有指定磁碟機，或 drive 是空字串 ("") ，則 CurDir 會傳回目前磁碟機的路徑。 在Macintosh中，CurDir忽略任何指定的drive ，並只簡單地傳回目前磁碟機的路徑。


Dir 函數

��� [image] ���

傳回一個 String ，用以表示合乎條件、檔案屬性、磁碟標記的一個檔案名稱、或目錄、檔案夾名稱。

語法

Dir[(pathname[, attributes])]

Dir 函數語法具有以下幾個單元：

單元	描述
pathname	選擇性引數，用來指定檔案名稱的字串運算式。可以包含目錄或檔案夾、以及磁碟機。如果沒有 pathname，則會傳回長度為零的字串 ("")。
attributes	選擇性引數，此為常數或數值運算式，其總和用來指定檔案屬性，如果省略，則會傳回與pathname 相符合但不包含屬性的檔案。
設定值

attributes 引數的設定值可為：

常數	值	描述
vbNormal	0	(預設) 指定沒有屬性的檔案。.
VbReadOnly	1	除無屬性的檔案外，另指定唯讀檔案。
vbHidden	2	除無屬性的檔案外，另指定隱藏檔案。
vbSystem	4	除無屬性的檔案外，另指定系統檔案。 在Macintosh 中無法使用。
vbVolume	8	指定標籤檔案；如果指定了其它屬性，vbVolume 將被忽略。 在Macintosh中無法使用。
vbDirectory	16	除無屬性的檔案外，另指定路徑或檔案夾。
vbAlias	64	指定的檔名是別名，只在Macintosh上可用。
附註   這些常數是由 VBA 所指定，在你的程式碼中的任何位置，都可以使用這些常數來取代真正的數值。

請注意

在 Microsoft Windows中，Dir 支援萬用字元 ( * 和 ? ) 來指定多重檔案。在Macintosh中，這些字元可當作正確的檔名字元，而不能作為通用字元來指定多重檔案。

由於 Macintosh 不支援通用字元，請使用檔案類型來指定檔案組。可以使用 MacID 函數指定檔案類型而不用檔名。例如，下列陳述句傳回目前資料夾中第一個TEXT檔案的名稱：

Dir("SomePath", MacID("TEXT"))

要重覆檔案夾的所有檔案，請指定一空字串：

Dir("")

在 Microsoft Windows 中，如果在Dir函數中使用MacID函數，將產生錯誤。

任何大於 256的attributes值都被認為是 MacID函數的值。

第一次呼叫 Dir 函數時，必須指定 pathname，否則會產生錯誤。如要同時指定檔案屬性，則必須包括 pathname。

Dir 會傳回第一個符合 pathname 的檔案名稱，若要取得其它符合 pathname 的檔案名稱，請重新呼叫 Dir，且不要使用引數，如果已沒有合乎條件的檔案，則 Dir 會傳回一個空字串 ("")，一旦傳回值為空字串時，如要再次呼叫 Dir ，也必須要再指定 pathname ，否則會產生錯誤。你可以在不保留合乎目前 pathname 的檔名情況下，切換到一個新的 pathname，但是，你不能以遞迴方式來呼叫 Dir 函數，以 vbDirectory 屬性來呼叫 Dir 無法連續地傳回子目錄。

提示   由於檔名並不會以特別的次序來傳回，因此可將傳回的檔名儲存在一個陣列中，然後再排序這個陣列。


Environ 函數

��� [image] ���

傳回 String，它會關聯於一個作業系統環境變數。在Macintosh中無法使用。

語法

Environ({envstring | number})

Environ 函數語法含有以下這些指名引數：

單元	描述
envstring	選擇性引數，此為包含一個環境變數名稱的字串運算式。
number	選擇性引數，此為一個數值運算式，用來表示在環境字串表格中的環境字串的數值順序。number 引數可以是任何的數值運算式，但在在計算前，它會先轉換為一個整數。
請注意

如果在環境字串表格中找不到 envstring，則會傳回一個空字串 ("")。如果找到，則 Environ 會傳回一段文字，乃關於所指定的 envstring ； 也就是說，這段文字會等於 (=) 環境字串表格中的環境變數。

如果你指定 number，則在環境字串表格中所佔的數值位置上的字串會傳回。在這種情況下，Environ 會傳回所有的文字，包括 envstring，如果在特定位置上沒有環境字串，那麼 Environ 會傳回一個空字串。


FileCopy 陳述式

��� [image] ���

複製一個檔案。

語法

FileCopy source, destination

FileCopy 陳述式語法含有以下這些指名引數：

單元	描述
source	必要引數，此為字串運算式，用來表示要被複製的檔案名稱，source 可以包含目錄或檔案夾、以及磁碟機。
destination	必要引數，此為字串運算式，用來指定要複製的目地檔案名稱，destination 可以包含目錄或檔案夾、以及磁碟機。
請注意

如果你想要使用 FileCopy 陳述式於一個已開啟的檔案，則會發生錯誤。


FileDateTime 函數

��� [image] ���

傳回一個 Variant (Date)，此為一個檔案在建立時或最後修改的日期或時間。

語法

FileDateTime(pathname)

pathname 引數是必要的，此為用來指定一個檔案名稱的字串運算式，pathname 可以包含目錄或檔案夾、以及磁碟機。


FileLen 函數

��� [image] ���

傳回一個 Long，代表一個檔案的長度，單位是位元組。

語法

FileLen(pathname)

pathname 引數是必要的，此為用來指定一個檔案名稱的字串運算式，pathname 可以包含目錄或檔案夾、以及磁碟機。

請注意

當你呼叫 FileLen 函數時，如果所指定的檔案正在開啟中，則所傳回的值是這個檔案在開啟前的大小。

附註   若要取得一個開啟檔案的長度大小，請使用 LOF 函數。


GetAttr 函數

��� [image] ���

傳回一個 Integer，此為一個檔案、目錄、或檔案夾的屬性。

語法

GetAttr(pathname)

pathname 引數是必要的，此為用來指定一個檔案名稱的字串運算式，pathname 可以包含目錄或檔案夾、以及磁碟機。

Return Values

由 GetAttr 所傳回的值，是底下這些屬性值的總和：

常數	值	描述
vbNormal	0	一般
vbReadOnly	1	唯讀
vbHidden	2	隱藏
vbSystem	4	系統檔案。在Macintosh中無法使用。
vbDirectory	16	目錄或檔案夾。
vbArchive	32	上次備份後，檔案改變。在Macintosh中無法使用。
vbAlias	64	指定的檔名是別名。只在Macintosh上可用。
附註   這些常數是由 VBA 所指定，在你的程式碼中的任何位置，可以使用這些常數來取代真正的值。

請注意

若要判斷是否有設定某個屬性，請在 GetAttr 函數與想要得知的屬性值之間使用 And 運算子與位元比較，如果所得的結果不為零，則表示有設定這個屬性值。例如，在底下的 And 運算式中，如果保存 (Archive) 屬性沒有設定，則傳回值會為零：

Result = GetAttr(FName) And vbArchive

如果檔案的保存屬性有設定，則會傳回非零的數值。


Kill 陳述式

��� [image] ���

從磁碟中刪除檔案。

語法

Kill pathname

pathname 引數是必要的，此為用來指定一個檔案名稱的字串運算式，pathname 可以包含目錄或檔案夾、以及磁碟機。

請注意

在Microsoft Windows中，Kill 支援萬用字元 ( * 和 ? ) 來指名多重檔案.然而在 Macintosh 中，這些字元作為合法檔名字元使用，不能作為通用字元指定多個檔案。

由於 Macintosh 不支援通用字元，使用檔案類型來識別需要刪除的組檔案。可以使用 MacID 函數來指定檔案類型，而不用對每個單獨檔案重複使用指令。例如，下列陳述句刪除目前資料夾內的所有TEXT檔案。

Kill MacID("TEXT")

如果在Microsoft Windows中，使用包含 MacID函數的 Kill陳述句，則產生錯誤。

如果你使用 Kill 來刪除一個已開啟的檔案，則會產生錯誤。

附註   若要刪除目錄，請使用 RmDir 陳述式。


MkDir 陳述式

��� [image] ���

建立一個新的目錄或檔案夾。

語法

MkDir path

path 引數是必要的，此為用來指定所要建立的目錄或檔案夾的字串運算式。path 可以包含磁碟機，如果沒有指定磁碟機，則 MkDir 會在目前磁碟機中建立新的目錄或檔案夾。


Name 陳述式

��� [image] ���

重新命名一個檔案、目錄、或檔案夾。

語法

Name oldpathname As newpathname

Name 陳述式語法具有以下幾個單元：

單元	描述
oldpathname	必要引數，此為已存在檔案名稱的字串運算式，可包含目錄或檔案夾、以及磁碟機。
newpathname	必要引數，此為用來指定新的檔案名稱及位置的字串運算式，可包含目錄或檔案夾、以及磁碟機。而由 newpathname 所指定的檔案名稱不能早已存在。
請注意

Name陳述句重新命名檔案並將之移到一個不同的目錄或資料夾中。如有必要，Name可跨越磁碟機移動檔案。但當newpathname和oldpathnamebut都在相同的磁碟機中時，只能重新命名已經存在的目錄或資料夾。Name不能建立新檔案，目錄或資料夾。

使用 Name 指令在一個已開啟的檔案上，將會產生錯誤，想要改變一個已開啟檔案的名稱之前，你必須先關閉它，Name 引數不能包括萬用字元 ( * 和 ? )。


QBColor 函數

��� [image] ���

傳回一個 Long，用來表示所對應顏色數目的 RGB 碼。

語法

QBColor(color)

color 引數是必要的，它是一個介在 0 到 15.的整數。

設定值

color 引數有以下這些設定值：

值	顏色	值	顏色
0	黑色	8	灰色
1	藍色	9	淡藍色
2	綠色	10	淡綠色
3	青藍色	11	淡青藍色
4	紅色	12	淡紅色
5	紫紅色	13	淡紫紅色
6	黃色	14	淡黃色
7	淺灰色	15	白色
請注意

color 引數代表：使用於 Basic ( 諸如 Microsoft Visual Basic for MS-DOS 以及 Basic Compiler)較早版本的顏色值，由最不重要的位元組開始，其傳回值會成為 VBA 所使用的相關顏色值，也就是代表 RGB 系統中的紅、綠、藍三原色的值。


RGB 函數

��� [image] ���

傳回一個 Long，用來表示一個 RGB 顏色值。

語法

RGB(red, green, blue)

RGB 函數語法含有以下這些指名引數：

單元	描述
red	必要引數，Variant (Integer)，其數值範圍從 0 到 255，表示顏色的紅色成份。
green	必要引數，Variant (Integer)，其數值範圍從 0 到 255，表示顏色的綠色成份。
blue	必要引數，Variant (Integer)，其數值範圍從 0 到 255，表示顏色的藍色成份。
請注意

應用程式的方法和屬性可以接受顏色設定，不過這個設定值必須是可以代表一個 RGB 顏色值的數值，一個 RGB 顏色值是用來指定一個顏色中紅、綠、藍三原色的相對成份。

RGB 中的引數，如果其值超過 255，會被當作 255。

底下的表格顯示一些標準常見的顏色，以及這些顏色的紅、綠、藍三原色的成份：

顏色	紅色值	綠色值	藍色值
黑色	0	0	0
藍色	0	0	255
綠色	0	255	0
青藍色	0	255	255
紅色	255	0	0
紫紅色	255	0	255
黃色	255	255	0
白色	255	255	255
該函數傳回的RGB顏色值與Macintosh作業系統使用的不相容。這些值可能在Macintosh上的Microsoft應用程式上下文中使用，但當通訊色直接改變到Macintosh作業系統時，不能使用。


RmDir 陳述式

��� [image] ���

刪除一個現有的目錄或檔案夾。

語法

RmDir path

path 引數是必要的，此為字串運算式，用來指定所要刪除的目錄或檔案夾，path 可以包含磁碟機，如果沒有指定磁碟機，則 RmDir 會在目前磁碟機中刪除目錄或檔案夾。

請注意

如果你想要使用 RmDir 來刪除一個含有檔案的目錄或檔案夾，則會發生錯誤，請先使用 Kill 陳述式來刪除目錄或檔案夾中的所有檔案。


SetAttr 陳述式

��� [image] ���

為一個檔案設定屬性資訊。

語法

SetAttr pathname, attributes

SetAttr 陳述式語法含有以下這些指名引數：

單元	描述
pathname	必要引數，此為用來指定一個檔案名稱的字串運算式，可包含目錄或檔案夾、以及磁碟機。
attributes	必要引數，為常數或數值運算式，其總和用來表示檔案的屬性。
設定值

attributes 引數設定值可為：

常數	值	描述
vbNormal	0	一般 ( 預設值 )
vbReadOnly	1	唯讀。
vbHidden	2	隱藏。
vbSystem	4	系統檔案在Macintosh中無法使用。.
vbArchive	32	保存。
vbAlias	64	指定檔名為別名，只在Macintosh中可用。
附註   這些常數是由 VBA 所設定，在你的程式碼中的任何位置，可以使用這些常數來取代真正的數值。

請注意

如果你想要設定一個已開啟檔案的屬性，則會產生執行中錯誤。


Close 陳述式範例

本範例使用 Close 陳述式來關閉所有作 Output 使用的檔案。

Dim I, FileName

For I = 1 To 3	' 執行迴圈三次。

FileName = "TEST" & I	' 建立檔案名稱。

Open FileName For Output As #I	' 開啟檔案。

Print #I, "This is a test."	' 將字串寫入檔案。

Next I

Close	' 將三個已開啟的檔案全部關閉。


EOF 函數範例

本範例使用 EOF 函數來偵測是否已至檔尾。範例中假設 MYFILE 為一包含數個文字行資料的檔案。

Dim InputData

Open "MYFILE" For Input As #1	' 開啟輸入檔。

Do While Not EOF(1)	' 檢查是否已到檔尾。

Line Input #1, InputData	' 讀入一行資料。

Debug.Print InputData	' 將資料在「立即」視窗中顯示。

Loop

Close #1	' 關閉檔案。


FileAttr 函數範例

本範例使用 FileAttr 函數來傳回一個已開啟檔案的檔案模式及其檔案代碼。傳回檔案控制代碼只適用於16-bit系統；在32-bit系統中，把 2作為第二個引數傳回時會產生錯誤。

Dim FileNum, Mode, Handle

FileNum = 1	' 指定檔案代碼。

Open "TESTFILE" For Append As FileNum	' 開啟檔案。

Mode = FileAttr(FileNum, 1)	' 傳回 8 (增加檔案模式)。

Handle = FileAttr(FileNum, 2)	' 傳回檔案代碼。

Close FileNum	' 關閉檔案。


FreeFile 函數範例

本範例使用 FreeFile 函數來傳回下一個可用的檔案代碼。範例中使用迴圈的方式，共開啟五個輸出檔，並對每個檔案寫入一些資料。

Dim MyIndex, FileNumber

For MyIndex = 1 To 5	' 迴圈執行五次。

FileNumber = FreeFile	' 取得未使用的檔案代碼。

Open "TEST" & MyIndex For Output As #FileNumber	' 建立檔案名稱。

Write #FileNumber, "This is a sample."	' 輸出文字至檔案中。

Close #FileNumber	' 關閉檔案。

Next MyIndex


Get 陳述式範例

本範例使用 Get 陳述式來將資料從檔案中讀到變數中。範例中假設 TESTFILE 檔案中含有五筆使用者自訂型態的資料記錄。

Type Record	' 定義使用者自訂的資料型態。

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record, Position	' 宣告變數。

' 以隨機存取的方式來開啟檔案。

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

' 使用 Get 陳述式來讀取檔案內容。

Position = 3	' 定義記錄編號。

Get #1, Position, MyRecord	' 將此記錄讀入變數中。

Close #1	' 關閉檔案。


Input # 陳述式範例

本範例使用 Input # 陳述式將檔案內的資料讀入至兩個變數中。範例中本範例假設 TESTFILE 內含數行以 Write # 陳述式寫入之資料；也就是說，每一行資料中的字串部份都是用雙引號括起來，而數字皆以逗號隔開，例如，("Hello", 234)。

Dim MyString, MyNumber

Open "TESTFILE" For Input As #1	' 開啟輸入檔案。

Do While Not EOF(1)	' 執行迴圈直到檔尾為止。

Input #1, MyString, MyNumber	' 將資料讀入兩個變數中。

Debug.Print MyString, MyNumber	' 將資料在「立即」視窗中顯示。

Loop

Close #1	' 關閉檔案。


Input 函數範例

本範例使用 Input 函數來一次讀取檔案中一個字元，並將之顯示到「立即」視窗。本範例假設 TESTFILE 檔案內含數行文字資料。

Dim MyChar

Open "TESTFILE" For Input As #1	' 開啟檔案。

Do While Not EOF(1)	' 執行迴圈直到檔尾為止。

MyChar = Input(1, #1)	' 讀取一個字元。

Debug.Print MyChar	' 顯示到「立即」視窗。

Loop

Close #1	' 關閉檔案。


Line Input # 陳述式範例

本範例使用 Line Input # 陳述式從循序檔中讀取一行資料，並將該行資料指定給一個變數。本範例假設 TESTFILE 檔案內含數行文字資料。

Dim TextLine

Open "TESTFILE" For Input As #1	' 開啟檔案。

Do While Not EOF(1)	' 執行迴圈直到檔尾為止。

Line Input #1, TextLine	' 讀入一行資料並將之指定給變數。

Debug.Print TextLine	' 在「立即」視窗中顯示。

Loop

Close #1	' 關閉檔案。


Loc 函數範例

本範例使用 Loc 函數來傳回在開啟的檔案中目前讀寫的位置。 本範例假設 TESTFILE 檔案內含數行文字資料。

Dim MyLocation, MyLine

Open "TESTFILE" For Binary As #1	' 開啟檔案。

Do While MyLocation < LOF(1)	' 執行迴圈直到檔尾為止。

MyLine = MyLine & Input(1, #1)	' 讀入一個字元到變數中。

MyLocation = Loc(1)	' 取得現在位置。

' 在「立即」視窗中顯示。

Debug.Print MyLine : Tab : MyLocation

Loop

Close #1	' 關閉檔案。


Lock 及 Unlock 陳述式範例

本範例示範如何使用 Lock 及 Unlock 陳述式。當使用者正在修改資料中某個記錄時，其它程序不可以來存取這筆資料記錄。 本範例假設 TESTFILE 檔案內含五個使用者自訂型態的資料記錄。

Type Record	' 定義使用者自訂之資料型態。

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record, RecordNumber	' 宣告變數。

' 以隨機存取的方式來開啟檔案。

Open "TESTFILE" For Random Shared As #1 Len = Len(MyRecord)

RecordNumber = 4	' 指定記錄編號。

Lock #1, RecordNumber	' 鎖住該筆記錄。

Get #1, RecordNumber, MyRecord	' 讀入該筆記錄。

MyRecord.ID = 234	' 修改記錄。

MyRecord.Name = "John Smith"

Put #1, RecordNumber, MyRecord	' 將修改過的記錄存回檔案中。

Unlock #1, RecordNumber	' 解除該筆記錄之鎖定。

Close #1	' 關閉檔案。


LOF 函數範例

本範例使用 LOF 函數來得知已開啟檔案的大小。本範例假設 TESTFILE 檔案內含文字資料。

Dim FileLength

Open "TESTFILE" For Input As #1	' 開啟檔案。

FileLength = LOF(1)	' 取得檔案長度。

Close #1	' 關閉檔案。


Open 陳述式範例

本範例示範 Open 陳述式的不同用法來做到檔案的輸出與輸入。

下列程式碼將 TESTFILE 檔案以「循序輸入」的模式開啟。

Open "TESTFILE" For Input As #1

' 若要以其它模式開啟此檔，必需先將此檔關閉。

Close #1

下列程式碼以「二進位」模式開啟檔案，並限制只能對該檔作輸出的動作。

Open "TESTFILE" For Binary Access Write As #1

' 若要以其它模式開啟此檔，必需先將此檔關閉。

Close #1

下列程式碼以「隨機」模式開啟檔案，檔案中含有數筆使用者自定型態的資料記錄。

Type Record	' 定義使用者自訂之資料型態。

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record	' 宣告變數。

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

' 若要以其它模式開啟此檔，必需先將此檔關閉。

Close #1

下列程式碼以「循序輸出」模式開啟檔案；任何程序都可以對此檔作輸出或輸入的動作。

Open "TESTFILE" For Output Shared As #1

' 若要以其它模式開啟此檔，必需先將此檔關閉。

Close #1

下列程式碼以「二進位」模式開啟檔案，並限制只能對該檔做輸入的動作；且其它程序不可以讀取此檔，因為有「鎖定」的動作。

Open "TESTFILE" For Binary Access Read Lock Read As #1


Print # 陳述式範例

本範例使用 Print # 陳述式將資料寫入一個檔案。

Open "TESTFILE" For Output As #1	' 開啟輸出檔案。

Print #1, "This is a test"	' 將文字資料寫入檔案。

Print #1,	' 寫入空白行至檔案中。

Print #1, "Zone 1"； Tab ； "Zone 2"	' 寫入資料至兩個寫入區 (print zones)。

Print #1, "Hello" ； " " ； "World"	' 以空格隔開兩個字串。

Print #1, Spc(5) ； "5 leading spaces "	' 在字串之前寫入五個空格。

Print #1, Tab(10) ； "Hello"	' 將資料寫在第十個資料行。

' 設定 Boolean、Date、Null 及 Error 等變數的值。

Dim MyBool, MyDate, MyNull, MyError

MyBool = False : MyDate = #February 12, 1969# : MyNull = Null

MyError = CVErr(32767)

' True、False、Null，及 Error 會依照您的電腦系統的地區設定

' 來顯示。日期表示法會以一般「短式日期」的格式顯示。

Print #1, MyBool ； " is a Boolean value"

Print #1, MyDate ； " is a date"

Print #1, MyNull ； " is a null value"

Print #1, MyError ； " is an error value"

Close #1	' 關閉檔案。


Put 陳述式範例

本範例使用 Put 陳述式將資料寫入檔案中。範例中共有五筆使用者自訂資料型態的記錄寫入。

Type Record	' 定義使用者自訂之資料型態。

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record, RecordNumber	' 宣告變數。

' 以「隨機存取」模式開啟檔案。

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

For RecordNumber = 1 To 5	' 執行五次迴圈。

MyRecord.ID = RecordNumber	' 定義 ID。

MyRecord.Name = "My Name" & RecordNumber	' 建立字串。

Put #1, RecordNumber, MyRecord	' 將資料記錄寫入檔案中。

Next RecordNumber

Close #1	' 關閉檔案。


Reset 陳述式範例

本範例使用 Reset 陳述式關閉所有已開啟檔案並且將所有檔案暫存區內的資料寫到磁碟中。請注意，在範例中 Variant 變數 FileNumber 用來當作字串及數值來使用。

Dim FileNumber

For FileNumber = 1 To 5	' 執行迴圈五次。

' 開啟輸出檔案。檔案名稱為 TEST 加上檔案代碼 FileNumber

' 跟在 # 之後時則用到的是它的數值。

Open "TEST" & FileNumber For Output As #FileNumber

Write #FileNumber, "Hello World"	' 寫入資料至檔案中。

Next FileNumber

Reset	' 關閉檔案並將暫存區內的資料寫到磁碟中。


Seek 函數範例

本範例使用 Seek 函數來傳回目前的檔案讀取位置。範例中假設 TESTFILE 檔案內含有數筆使用者自訂的資料型態的資料記錄。

Type Record	' 定義使用者自訂之資料型態。

ID As Integer

Name As String * 20

End Type

如果以「隨機」的模式開啟檔案，Seek 傳回值為下一筆記錄的編號。

Dim MyRecord As Record	' 宣告變數。

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

Do While Not EOF(1)	' 執行迴圈直到檔尾為止。

Get #1, , MyRecord	' 讀入下一筆記錄。

Debug.Print Seek(1)	' 在「立即」視窗中顯示記錄編號。

Loop

Close #1	' 關閉檔案。

如果以其它模式開啟檔案 (非 Random 模式)，則 Seek 所傳回的為下一個讀寫動作會發生在哪個字元的位置。假設 TESTFILE 檔案內含數行的文字資料。

Dim MyChar

Open "TESTFILE" For Input As #1	' 開啟輸入檔案。

Do While Not EOF(1)	' 執行迴圈到檔尾為止。

MyChar = Input(1, #1)	' 讀入下一個字元。

Debug.Print Seek(1)	' 將下一字元的位置顯示到「立即」視窗 (Debug window)。

Loop

Close #1	' 關閉檔案。


Seek 陳述式範例

本範例使用 Seek 陳述式來設定下一次對該檔做讀寫動作時的位置。範例中假設 TESTFILE 檔案內含數筆使用者自訂的資料型態的資料記錄。

Type Record	' 定義使用者自訂之資料型態。

ID As Integer

Name As String * 20

End Type

如果以「隨機」的模式開啟檔案，Seek 將檔案讀寫位置設定到下一筆記錄的地方。

Dim MyRecord As Record, MaxSize, RecordNumber	' 宣告變數。

' 以隨機檔的模式來開啟檔案。

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

MaxSize = LOF(1) \ Len(MyRecord)	' 取得檔案中共有資料記錄的筆數。

' 迴圈中讀入所有的記錄，但是從最後一筆開始往前讀取。

For RecordNumber = MaxSize To 1 Step - 1

Seek #1, RecordNumber	' 設定讀寫位置。

Get #1, , MyRecord	' 讀入一筆記錄。

Next RecordNumber

Close #1	' 關閉檔案。

如果以其它模式開啟檔案 (非 Random 模式)，則 Seek 所設定的讀寫位置是下一個讀寫動作會發生在哪個字元的位置。假設 TESTFILE 檔案內含數行的文字資料。

Dim MaxSize, NextChar, MyChar

Open "TESTFILE" For Input As #1	' 開啟輸入檔案。

MaxSize = LOF(1)	' 取得檔案的總字元數。

' 迴圈中讀入所有的字元，但從最後一個字元往前讀取。

For NextChar = MaxSize To 1 Step -1

Seek #1, NextChar	' 設定讀寫位置。

MyChar = Input(1, #1)	' 讀入一字元。

Next NextChar

Close #1	' 關閉檔案。


Spc 函數範例

本範例使用 Spc 函數將對檔案或「立即」視窗的輸出結果做定位動作。

' Spc 函數可以和 Print # 陳述式一起使用。

Open "TESTFILE" For Output As #1	' 開啟輸出檔案。

Print #1, "10 spaces between here"； Spc(10)； "and here."

Close #1	' 關閉檔案。

下列陳述式在顯示到「立即」視窗 (使用 Print 方法顯示) 的文字之前加上 30 個空格。

Debug.Print Spc(30)； "Thirty spaces later. . ."


Tab 函數範例

本範例使用 Tab 函數將對檔案或「立即」視窗的輸出結果做定位動作。

' Tab 函數可以和 Print # 陳述式一起使用。

Open "TESTFILE" For Output As #1	' 開啟輸出檔案。

' 第二個字輸出到第 20 個資料行的位置。

Print #1, "Hello" : Tab(20) : "World."

' 如果省略引數，則直接跳至下一個輸出區 (print zone)。

Print #1, "Hello" : Tab : "World"

Close #1	' 關閉檔案。

Tab 函數也可與 Print 方法合用。下列 陳述式便從第 10 個資料行開始顯示文字。

Debug.Print Tab(10) : "10 columns from start."


Width # 陳述式範例

本範例使用 Width # 陳述式來設定檔案的輸出行寬。

Dim I

Open "TESTFILE" For Output As #1	' 開啟輸出檔案。

VBA.Width 1, 5	' 設定輸出行寬為 5。

For I = 0 To 9	' 執行迴圈 10 次。

Print #1, Chr(48 + I)；	' 每行輸出五個字元。

Next I

Close #1	' 關閉檔案。


Write # 陳述式範例

本範例使用 Write # 陳述式來輸出資料至一個循序檔。

Open "TESTFILE" For Output As #1	' 開啟輸出檔案。

Write #1, "Hello World", 234	' 寫入以逗號隔開的資料。

Write #1,	' 寫入空白行。

Dim MyBool, MyDate, MyNull, MyError

' 指定 Boolean、Date、Null 及 Error 等變數值。

MyBool = False : MyDate = #February 12, 1969# : MyNull = Null

MyError = CVErr(32767)

' Boolean 資料以 #TRUE# 或 #FALSE# 的格式寫入。

' 日期表示法以通用日期格式寫入，例如：#1994-07-13# 代表

'July 13，1994(1994 年 1 月 13)。Null 資料以 #NULL# 格式寫入。

' Error 資料以 #ERROR 錯誤代碼# 的格式寫入。

Write #1, MyBool ； " is a Boolean value"

Write #1, MyDate ； " is a date"

Write #1, MyNull ； " is a null value"

Write #1, MyError ； " is an error value"

Close #1	' 關閉檔案。


Close 陳述式

��� [image] ���

關閉以 Open 陳述式所開啟的輸入/輸出(I/O)檔案。

語法

Close [filenumberlist]

選擇性引數 filenumberlist 可包含一或多個檔案代碼，其中 filenumber 為任何正確的檔案代碼，其語法如下：

[[#]filenumber] [, [#]filenumber] . . .

請注意

若您省略 filenumberlist 引數，則所有以 Open 陳述式開啟的檔案將會被關閉。

當您關閉作為 Output 或 Append 之用的檔案時，則會將屬於此檔案的最後輸出暫存區寫入作業系統暫存區，接著作業系統會釋放所有與該檔案相關的暫存區空間。

當系統執行 Close 陳述式之後，將會結束檔案與其檔案代碼之間的關連。


EOF 函數

��� [image] ���

傳回一個 Integer，包含布林值 True，以用來指出目前已經到達檔案的結尾。

語法

EOF(filenumber)

必要引數 filenumber 是一個 Integer，包含任何正確的檔案代碼。

請注意

使用 EOF 函數可避免因嘗試在檔案結尾處讀取資料而產生的錯誤。

EOF 函數會一直傳回 False，直到到達檔案的結尾。當 EOF 被使用於 Random 或 Binary 存取型態的檔案時，它會一直傳回 False；直到前一次執行的 Get 陳述式無法讀取整筆資料。

對於 Binary 存取型態的檔案，當嘗試用 Input 函數讀取整個檔案時，則會在 EOF 函數傳回 True 時產生錯誤。如果要用 Input 函數讀取二進位檔案時，最好以 LOF 和 Loc 函數來取代 EOF 函數 ，或者將 Get 函數與 EOF 函數配合著使用。


FileAttr 函數

��� [image] ���

傳回一個 Long型態的值，用來表示由 Open 陳述式所開啟檔案之檔案模式。

語法

FileAttr(filenumber, returntype)

FileAttr 函數的語法具有以下幾個指名引數：

單元	說明
filenumber	必要的引數。它是個 Integer 型態，包含任何正確的檔案代碼。
returntype	必要的引數。它是個 Integer 型態，可用數字來指定欲傳回何種型態的資訊。指定 1 可傳回一個代表檔案模式的數值。在16 位元的系統中， 指定 2 可以傳回作業系統的檔案代碼。不過 Returntype 2 在 32 位元的系統是不被支援的，並會導致錯誤的發生。
傳回值

當引數 returntype 的值是 1 時，則用下列的傳回值來代表檔案存取的模式：

檔案模式	值
Input	1
Output	2
Random	4
Append	8
Binary	32


FreeFile 函數

��� [image] ���

傳回一個 Integer 型態的值，用來代表下一個可供 Open 陳述式使用的檔案代碼。

語法

FreeFile[(rangenumber)]

選擇性引數 rangenumber 是一個 Variant，它可以指定一個範圍，以便傳回該範圍之內的下一個可用的檔案代碼。指定 0(預設值)將傳回一個值介於 1 和 255 之間的檔案代碼。指定 1 將傳回一個值介於 256 和 511 之間的檔案代碼。

請注意

FreeFile 函數會產生一個尚未被使用的檔案代碼。


Get 陳述式

��� [image] ���

將一個已開啟的磁碟檔案讀入一個變數之中。

語法

Get [#]filenumber, [recnumber], varname

Get 陳述式的語法具有以下幾個單元：

單元	說明
filenumber	必要的引數。任何正確的檔案代碼。
recnumber	選擇性引數。它是一個 Variant (Long)型態，用來指定記錄代碼 (Random 模式的檔案) 或是位元組代碼 (Binary 模式的檔案)，以表示將從該位置開始讀取資料。
varname	必要的引數。一個正確的變數名稱，以將讀出的資料放入其中。
請注意

使用 Get 函數來讀取檔案資料時，則通常會以 Put 函數來寫入資料。

檔案裡的第一個記錄或位元組位於位置 1，第二個記錄或位元組則位於位置 2，依此類推。若省略 recnumber 引數， 則會讀取上個 Get 或 Put 陳述式的下一個記錄或位元組(或由上一個 Seek 函數所指定的位元組)。你必須將陳述式中所有的逗點皆包含進來，例如：

Get #4,,FileBuffer

下列規則適用於以 Random 模式所開啟的檔案：

•	當要讀取的資料長度小於 Open 陳述式的 Len 子句所指定的長度時， Get仍然會以指定的記錄長度作為邊界，來讀取隨後的記錄。介於記錄結尾與下一個記錄開頭之間的空白，將會被填入存在於此檔案暫存區內的資料。但是，因為填入的資料數量無法確定，所以通常會讓記錄的長度符合欲讀入的資料長度。

•	如果要用來存放讀入資料的變數 (由 varnam 引數所指定)，是一個可變長度字串，則 Get 陳述式會先讀入一個雙位元組的描述器，其中含有字串的長度，接著再將讀入的資料放入此變數中。在此情況下，由 Open 陳述式的 Len 子句所指定的記錄長度至少要比實際的字串長度大兩個位元組。

•	如果要用來存放讀入資料的變數 (由 varnam 引數所指定)，是一個屬於數值型態的 Variant，則 Get 陳述式會先讀入兩個位元組，用來指出 Variant 是屬於那一種 VarType，接著再將資料讀入此變數中。 舉例而言，讀取 VarType 3 的 Variant 時，Get 陳述式會讀入六個位元組：其中前兩個位元組指出了 Variant 是屬於 VarType 3 (Long) 的變數， 而接下來的四個位元組則包含了 Long 型態的資料。在此情況下，由 Open 陳述式中的 Len 子句所指定的記錄長度，至少必須比儲存變數所需的實際位元組多兩個位元組。

附註   您可以使用 Get 陳述式從磁碟中讀入一個 Variant 陣列，但您不能使用 Get 陳述式來讀取包含陣列的 Variant。另外，您也不能使用 Get 陳述式從磁碟中讀入物件資料。

•	如果要用來存放讀入資料的變數 (由 varnam 引數所指定)，是一個屬於VarType 8 (String) 的 Variant，則 Get 陳述式會先讀入兩個位元組，用來指出變數是屬於何種的 VarType，接下來的兩個位元組指出字串的長度，接著再將資料讀入此字串變數中。 在此情況下，由 Open 陳述式中的 Len 子句所指定的記錄之長度，至少必須比實際的字串長度多四個位元組。

•	如果要用來存放讀入資料的變數 (由 varnam 引數所指定)，是一個動態陣列，則 Get 陳述式會讀入一個描述器，其長度等於 2 加上 8 乘以維度的數目，即 2 + 8 * NumberOfDimensions。在此情況下，由 Open 陳述式中的 Len 子句所指定的記錄之長度，必須大於或等於所有讀入陣列的資料和陣列描述器所需的位元組數的總和。 舉例而言，下列的陣列宣告，在陣列要寫入磁碟時將需要 118 個位元組的空間：

Dim MyArray(1 To 5,1 To 10) As Integer

這 118 個位元組的分配情形如下：有 18 個位元組作為描述器之用 (2 + 8 * 2)，剩下 100 個位元組則作為資料儲存之用 (5 * 10 * 2)。

•	如果要用來存放讀入資料的變數 (由 varnam 引數所指定)，是一個固定大小的陣列，則 Get 陳述式只須讀入資料到變數中，而不用讀入描述器。

•	如果要用來存放讀入資料的變數 (由 varnam 引數所指定)，是任何其他型態的變數(不是可變長度的字串或是 Variant)，則 Get 陳述式只會讀入資料到變數中。在此情況下，由 Open 陳述式中的 Len 子句所指定的記錄之長度，必須大於或等於欲讀入的資料長度。

•	Get 陳述式在讀取使用者自訂型態的元件時，其方式和上述各點很相近，只不過它在元件之間不會填入任何資料。當使用者自訂型態中的動態陣列在寫入磁碟時，(用 Put 陳述式) 其最前面會被加入一個描述器，它的長度等於 2 加上 8 乘以維度的數目， 即 2 + 8 * NumberOfDimensions。在此情況下，由 Open 陳述式中的 Len 子句所指定的記錄長度，必須大於或等於讀入的所有個別元件，(包含任何陣列及其描述器) 所需的位元組數之總和。

對於以Binary 模式所開啟的檔案而言，上述所有屬於 Random 的規則，除了以下之外它皆可適用：

•	當 Open 陳述式中的 Len 子句沒有任何作用時，則 Get 陳述式會連續地從磁碟中讀取所有的變數；也就是，兩個記錄之間沒有填入任何間隔。

•	對於任何不屬於使用者自訂型態的陣列，Get 陳述式只會讀入資料，而不會讀入描述器。

•	對於非使用者自訂型態之可變長度字串，Get 陳述式會直接讀入資料到此可變長度字串中，而不管此字串是否具有一個雙位元組的描述器。因此，所讀入的位元組數會等於字串所包含的字元數。 舉例而言，下列的陳述式會從檔案代碼為 1 的檔案中讀入十個位元組的資料：

VarString = String(10," ")

Get #1,,VarString


Input # 陳述式

��� [image] ���

從已開啟的循序檔中讀取資料，並將資料指定給變數。

語法

Input #filenumber, varlist

Input # 陳述式的語法具有以下幾個單元：

單元	說明
filenumber	必要的引數。任何正確的檔案代碼。
varlist	必要的引數。以逗號分隔的數個變數，從檔案中讀入的資料將會依序放入這些變數之內。上述的變數不可以是一個陣列或是物件變數，不過可以是一個描述陣列元件的變數或是一個使用者自訂型態的變數。
請注意

使用 Input # 陳述式來讀取資料時，則通常會以 Write # 陳述式來寫入資料。Input # 陳述式僅能使用於以 Input 或 Binary 模式開啟的檔案。

在讀取資料時，標準的字串或數值資料會直接指定給變數，不會做任何轉換。下表說明如何處理其它型態的輸入資料：

資料	指定給變數的值
分隔逗號或空白列	Empty
#NULL#	Null
#TRUE# or #FALSE#	True 或 False
#yyyy-mm-dd hh:mm:ss#	以運算式所表示的日期和時間。
#ERROR errornumber#	errornumber(此變數是一個 Variant，用來標示出錯誤)
輸入資料中的雙引號符號(" ")將會被忽略。

備註���您不可寫入包含內嵌引號的字串 (例如 "1,2""X")，而與 Input # 陳述式一起使用：Input # 會將此字串分析為兩個完整的個別字串。

檔案中資料項目的順序必須與 varlist 中的變數順序相同，而且其相對變數的資料型態必須符合。如果所指定的變數屬於數字型態，而檔案中的資料不是數值型態，則此變數的值會被指定為零。

在讀取資料項目時，如果已經到達檔案的尾端，則會停止讀取資料，並且會產生一個錯誤。

附註   為了使 Input # 陳述式能正確地將檔案的資料讀入變數中， 則在將資料寫入檔案時，一般會使用 Write # 陳述式來代替 Print # 陳述式。使用 Write # 陳述式可確保個別的資料欄位被正確地隔開。


Input 函數

��� [image] ���

從以 Input 或 Binary 模式開啟的檔案中傳回一個 String，其內含有字元。

語法

Input(number, [#]filenumber)

Input 函數的語法具有以下幾個單元：

單元	說明
number	必要的引數。任何正確的數值運算式，用來指出欲傳回的字元個數。
filenumber	必要的引數。任何正確的檔案代碼。
請注意

使用 Input 函數來讀取檔案資料時，則通常會以 Print # 或 Put 來寫入資料。Input 函數只使用於以 Input 或 Binary 模式開啟的檔案。

不同於 Input # 陳述式，Input 函數會傳回它所讀入的所有字元，包括逗號、換行控制碼、空白行、標點符號及開頭空格等。

對於 Binary 存取型態的檔案，當嘗試用 Input 函數讀取整個檔案時，則會在 EOF 函數傳回 True 時產生錯誤。 如果要用 Input 函數讀取二進位檔案時，最好以 LOF 和 Loc 函數來取代 EOF 函數 ，或者將 Get 函數與 EOF 函數配合著使用。

附註   另外可以使用 InputB 函數來讀取文字檔中的位元組資料。不過在 InputB 函數中的引數 number 不是用來指出欲傳回的字元個數，而是用來指出欲傳回的位元組個數。


Line Input # 陳述式

��� [image] ���

從一個已開啟的循序檔中讀入一行資料，並將它指定給一個String變數.。

語法

Line Input #filenumber, varname

Line Input # 陳述式的語法具有以下幾個單元：

單元	說明
filenumber	必要的引數。任何正確的檔案代碼.。
varname	必要的引數。正確的 Variant 或 String 變數名稱。
請注意

使用 Line Input # 陳述式來讀取檔案資料時，則通常會以 Print # 陳述式來寫入資料。

Line Input # 陳述式一次只從檔案中讀取一個字元，直到它遇到換行控制碼 (Chr(13))或換行控制碼(Chr(13) + Chr(10))序列。換行控制碼序列會被跳過，而不會附加在字元或字串的尾端。


Loc 函數

��� [image] ���

傳回一個 Long型態的值，用來指出已開啟的檔案中目前的讀取或寫入位置。

語法

Loc(filenumber)

必要引數 filenumber 是一個 Integer，包含任何正確的檔案代碼。

請注意

Loc 函數對各種檔案存取模式的傳回值如下：

存取模式	傳回 值
Random	上一個對檔案讀取或寫入檔案的記錄代碼。
Sequential	檔案中目前的位元組位置除以 128 的值。然而，對於循序檔而言，Loc 函數的傳回值是不會被使用，同時也不需要的。

Binary	上一個讀取或寫入的位元組位置。


Lock，Unlock 陳述式

��� [image] ���

對於用 Open 陳述式所開啟的檔案，可以用 Lock 及 Unlock 陳述式來控制別的處理程序，對此檔案擁有全部或部份的存取權力。

語法

Lock [#]filenumber[, recordrange]
. . .

Unlock [#]filenumber[, recordrange]

Lock 和 Unlock 陳述式的語法具有以下幾個單元：

單元	說明
Filenumber	必要的引數。任何正確的檔案代碼。
Recordrange	選擇性引數。所要鎖定或解除鎖定的記錄範圍。
設定

引數 recordrange 的設定方法如下列所示：

recnumber | [start] To end

設定	說明
Recnumber	記錄代碼(Random 模式的檔案) 或位元組代碼(Binary 模式的檔案)，用指出欲開始鎖定或解除鎖定的位置。
Start	第一個欲鎖定或解除鎖定的記錄或位元組代碼。
end	最後一個欲鎖定或解除鎖定的記錄或位元組代碼。
請注意

Lock 與 Unlock 陳述式使用於數個處理程序需要同時存取同一個檔案時。

Lock 和 Unlock 陳述式通常是成對使用，且 Lock 和 Unlock 的引數必須能完全的符合。

檔案中的第一個記錄或位元組位於位置 1，第二個記錄或位元組則位於位置 2，依此類推。 若您只指定一個記錄，則只會針對該記錄做鎖定或解除鎖定。若您指定某個範圍的記錄並省略啟始記錄(start)，則會針對第一個到您所指定的結尾 (end) 這範圍內的記錄做鎖定或解除鎖定。若使用 Lock 陳述式卻沒指定 recnumber 引數，則會鎖定整個檔案；若使用 Unlock 陳述式卻沒有指定 recnumber ，則會解除整個檔案的鎖定。

若檔案已經以循序輸入或輸出的模式加以開啟，則 Lock 和 Unlock 將會影響整個檔案，而不會受 start 和 end 指定的範圍所影響。

注意   在關閉一個檔案或結束程式之前，務必要確定以 Unlock 陳述式解除對檔案的所有鎖定。若未正確地解除所有鎖定，則會產生無法預測的結果。


LOF 函數

��� [image] ���

傳回一個 Long 型態的值，它是以位元組為單位，用來代表由 Open 陳述式所開啟的檔案之大小。

語法

LOF(filenumber)

必要引數 filenumber 是一個 Integer，包含任何正確的檔案代碼。

附註   對於尚未開啟的檔案，可以使用 FileLen 函數來取得它的長度。


Open 陳述式

��� [image] ���

讓我們擁有對檔案做輸入/輸出(I/O)的能力。

語法

Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]

Open 陳述式的語法具有以下幾個單元：

單元	說明
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 陳述式仍會依照此檔名產生一個檔案。

如果所指定的檔案已由其它程序所開啟，且所指定的存取型態是不被允許的話，則 Open 動作會失敗，而且會有錯誤發生。

如果引數 mode 是 Binary 模式，則 Len 子句會被忽略掉。

重要   在 Binary、Input 和 Random 等模式下，您可以使用不同的檔案代碼去開啟同一個檔案，而不必先將檔案關閉。但在 Append 和 Output 模式下，若要以不同的檔案代碼去開啟同一個檔案，則您必須在開啟前先關閉該檔案。


Print # 陳述式

��� [image] ���

將格式化顯示的資料寫入循序檔中。

語法

Print #filenumber,[outputlist]

Print # 陳述式的語法具有以下幾個單元：

單元	說明
filenumber	必要的引數。任何正確的檔案代碼。
outputlist	選擇性引數。它是個運算式或是欲寫入的運算式清單。
設定

引數 outputlist 的設定方法如下列所示：

[{Spc(n) | Tab[(n)]}] [expression] [charpos]

設定	說明
Spc(n)	用來在輸出資料中插入空白字元，而 n 指的是欲插入的空白字元數。
Tab(n)	用來將插入點定位在某一絕對的欄位上，而 n 就是欄位號碼。 使用 Tab 而不加任何引數的話，則會將插入點定位在下一個輸出區塊的起頭。
Expression	它是個欲輸出的數值運算式或字串運算式。
Charpos	它是用來指定下一個字元的插入點。可使用分號來指定插入點是緊鄰在上一個顯示字元之後。Tab(n) 可以用來將插入點定位在某一絕對的欄位上，若使用 Tab 而不加任何引數的話，則會將插入點定位在下一個輸出區塊的起頭。如果省略引數 charpos 則下一個字元會顯示到下一行上。
請注意

使用 Print # 陳述式來讀取檔案資料時，通常會以 Line Input # 或 Input.來寫入資料。

如果省略引數 outputlist，並且在 filenumber 之後只含有一個分隔符號清單，則會將一空白行寫入檔案中。多個運算式之間可用一個空白或是一個分號來加以隔開；空白和分號的效果是一樣的。

對於 Boolean 型態的資料而言，不管是 True 或 False 都會被寫入檔案中。不論作業系統是做何種的地區設定，True 和 False 這兩個關鍵字並不會被轉換。

Date 型態的資料會使用作業系統所能辨認的標準短日期格式來寫入檔案中。當日期或時間部份沒有指定或設定為零，則只有被指定的部份會寫入檔案中。

如果 outputlist 的資料是 Empty 的話，則不會將任何資料寫入檔案。 然而，如果 outputlist 的資料是 Null 的話，則會將 Null 寫入檔案中。

對於 Error 型態的資料而言，輸出的資料會如同 Error errorcode 一樣。並且不論作業系統的地區設定，Error 關鍵字是不會被轉換的。

所有以 Print # 陳述式寫入檔案的資料是國際通用的；也就是，它會利用適當的十進位分隔符號，來將這些資料格式化。

因為 Print # 將資料的影像(image)寫入檔案，所以必須適當地將各項資料分隔開來，才能夠正確地寫入檔案。如果使用 Tab 並且不加任何引數來將輸出位置移動至下一個輸出區塊，則 Print # 也會將輸出欄位之間的空白寫入檔案之中。

附註   如果您以後想用 Input # 陳述式來讀取檔案資料，最好使用 Write # 陳述式將資料寫入檔案中，而不要使用 Print # 陳述式。因為使用 Write # 陳述式可藉由區隔來確保每個資料欄位的完整性，因此可用 Input # 陳述式再把資料讀出來。使用 Write # 陳述式也能確保任何地區的資料都可被正確讀取。


Put 陳述式

��� [image] ���

將一個變數的內容寫入磁碟檔案中。

語法

Put [#]filenumber,[recnumber], varname

Put 陳述式的語法具有以下幾個單元：

單元	說明
filenumber	必要的引數。任何正確的檔案代碼。
recnumber	選擇性引數。它是一個 Variant (Long)型態，包含有記錄代碼 (Random 模式的檔案) 或位元組代碼 (Binary 模式的檔案)，以用來指出欲開始寫入的位置。
varname	必要的引數。它是一個變數的名稱，包含欲寫入磁碟的資料。
請注意

使用 Put 陳述式來讀取檔案資料時，通常會以 Get 陳述式來寫入資料。

檔案裡的第一個記錄或位元組位於位置 1，第二個記錄或位元組則位於位置 2，依此類推。若您省略 recnumber 引數，則會讀取上個 Get 或 Put 陳述式的下一個記錄或位元組(或由上一個 Seek 函數所指定的位元組)。你必須將陳述式中所有的逗點皆含括進來 (即使沒有指定引數值)，請參考下面的範例：

Put #4,,FileBuffer

下列規則適用於以 Random 模式所開啟的檔案：

•	當要寫入的資料長度小於 Open 陳述式的 Len 子句所指定的長度時， Put 仍然會以指定的記錄長度作為邊界，來寫入隨後的記錄。介於記錄結尾與下一個記錄開頭之間的空白，將會被填入存在於此檔案暫存區內的資料。 但是，因為填入的資料數量無法確定，所以通常會讓記錄的長度符合欲寫入的資料長度。如果所要寫入的資料長度大於由 Open 陳述式的 Len 子句所指定長度時，會有錯誤發生。

•	如果要用來寫入的變數 (由 varnam 引數所指定)，是一個可變長度字串，則 Put 陳述式會先寫入一個雙位元組的描述器，其中含有字串的長度，然後再寫入變數資料。因此，由 Open 陳述式的 Len 子句所指定的記錄長度至少要比實際的字串長度大兩個位元組。

•	如果要用來寫入的變數(由 varnam 引數所指定)，是一個屬於數值型態的 Variant 則 Put 陳述式會先寫入兩個位元組，用來指出 Variant 是屬於那一種 VarType ，然後才將變數的資料寫入磁碟檔案中。 舉例而言， 當寫入 VarType 3 的 Variant 時， Put 陳述式會寫入六個位元組：其中前兩個位元組指出了 Variant 是屬於 VarType 3 (Long) 的變數，而接下來的四個位元組則包含了 Long 型態的資料。在此情況下，Open 陳述式中的 Len 子句所指定的記錄長度，至少必須比儲存變數所需的實際位元組多兩個位元組。

附註   您可以使用 Put 陳述式寫入一個 Variant 陣列到磁碟中，但您不能使用 Put 陳述式將包含陣列的 Variant 寫入到磁碟中。另外，您也不能使用 Put 陳述式將物件資料寫入磁碟中。

•	如果要用來寫入的變數(由 varnam 引數所指定)，是一個屬於 VarType 8 (String) 的 Variant，則 Put 陳述式會先寫入的兩個位元組，以用來指出變數是屬於何種 VarType，接下來的兩個位元組指出字串的長度，然後才將變數資料寫入磁碟檔案中。在此情況下， 由 Open 陳述式中的 Len 子句所指定的記錄之長度，至少必須比實際的字串長度多四個位元組。

•	如果要用來寫入的變數(由 varnam 引數所指定)，是一個動態陣列，則 Put 陳述式會寫入一個描述器，其長度等於 2 加上 8 乘以維度的數目，即 2 + 8 * NumberOfDimensions 。在此情況下，Open 陳述式中的 Len 子句所指定的記錄之長度，必須大於或等於所有讀入陣列的資料和陣列描述器所需的位元組數的總和。舉例而言，下列的陣列宣告，在陣列要寫入磁碟時將需要 118 個位元組的空間：

Dim MyArray(1 To 5,1 To 10) As Integer

•	這 118 個位元組的分配情形如下：有 18 個位元組作為描述器之用(2 + 8 * 2)，剩下 100 個位元組則作為資料儲存之用(5 * 10 * 2)。

•	如果要用來寫入的變數(由 varnam 引數所指定)，是一個固定大小的陣列，則 Put 陳述式只寫入資料，而不用寫入描述器到磁碟中。

•	如果要用來寫入的變數 (由 varnam 引數所指定)，是任何其他型態的變數 (不是可變長度的字串或是 Variant)，則 Put 陳述式只會寫入變數資料。在此情況下，Open 陳述式中的 Len 子句所指定的記錄之長度，必須大於或等於欲讀入的資料長度。

•	Put 陳述式在寫入使用者自訂型態的元件時，每個元件會被單獨輸入，不過元件之間不會填入任何資料。當用 Put 陳述式將使用者自訂型態中的動態陣列寫入磁碟時，則最前面會被加入一個描述器，其長度等於 2 加上 8 乘以維度的數目，即 2 + 8 * NumberOfDimensions。Open 陳述式中的 Len 子句所指定的記錄之長度，必須大於或等於所讀入的所有個別元件，(包含任何陣列及其描述器) 所需的位元組數總和。

對於以Binary 模式所開啟的檔案而言，上述所有屬於 Random 的規則，除了以下之外它皆可適用：

•	當 Open 陳述式中的 Len 子句沒有任何作用時，則 Put 陳述式會連續地將所有的變數寫入磁碟中；也就是，兩個記錄之間沒有填入任何間隔。

•	對於任何不屬於使用者自訂型態的陣列，Put 陳述式只會寫入變數資料到磁碟檔案，而不會寫入描述器到磁碟檔案中。

•	對於非使用者自訂型態之可變長度字串，Put 陳述式會直接寫入，而不管此字串是否具有一個雙位元組長的描述器。因此，所寫入的位元組數會等於字串所包含的字元數。舉例而言，下列的陳述式會將十個位元組的資料寫入檔案代碼為 1 的檔案中：

VarString$ = String$(10," ")

Put #1,,VarString$


Reset 陳述式

��� [image] ���

關閉所有以 Open 陳述式所開啟的磁碟檔案。

語法

Reset

請注意

Reset 陳述式會關閉所有由 Open 陳述式所開啟的檔案，並將所有檔案暫存區的內容寫入磁碟中。


Seek 函數

��� [image] ���

傳回一個 Long 型態的值，用來指出以 Open 陳述式所開啟的檔案，其目前的讀取/寫入位置。

語法

Seek(filenumber)

必要引數 filenumber 是一個 Integer，包含任何正確的檔案代碼。

請注意

Seek 函數傳回一個介於 1 和 2,147,483,647(相當於 2^31 - 1)之間的值。

此函數對於各種檔案存取模式下的傳回值如下：

模式	傳回值
Random	下一個對檔案讀取或寫入檔案的記錄代碼。
Binary Output Append Input	下一個 I/O 動作的位元組位置。檔案中的第一個位元組位於位置 1，第二個位元組位於位置 2，依此類推。


Seek 陳述式

��� [image] ���

用來設定由 Open 陳述式所開啟的檔案中，下一個要做讀取或寫入動作的位置。

語法

Seek [#]filenumber, position

Seek 陳述式的語法具有以下幾個單元：

單元	說明
filenumber	必要的引數。任何正確的檔案代碼。
position	必要的引數。一個介於 1 和 2,147,483,647 之間的數字，用來指定下一個讀寫動作將要發生的位置。
請注意

在 Get 及 Put 陳述式中所指定的記錄代碼，將會取代由 Seek 陳述式所指定的檔案位置。

若在檔案結尾之後做 Seek 動作，則進行檔案寫入的動作將會使檔案變長。若嘗試指定一個負數或等於零的檔案位置給 Seek 陳述式，則會產生錯誤。


Spc 函數

��� [image] ���

通常會配合 Print # 陳述式或 Print 方法一起使用，以用來指定資料的輸出位址。

語法

Spc(n)

必要引數 n 是用來指出，在顯示或輸出清單中的下一個運算式之前所須插入的空白數。

請注意

如果 n 小於輸出行的寬度，則下一個輸出的位置將會緊鄰在所指定數目的空白之後。 如果 n 大於輸出行的寬度，則 Spc 函數會利用下列的公式來計算下個輸出位置：

currentprintposition + (n Mod width)

舉例而言，若目前的輸出位置為 24，而輸出行的寬度為 80，並且您指定了 Spc(90) ，則下一個輸出將會從位置 34 開始(目前的輸出位置 + 90/80 的餘數)。如果目前的輸出位置和輸出行寬度之間的差小於 n (或 n Mod width)，則 Spc 函數會跳到下一行的開頭，並產生數量為 n�-�(width�-�urrentprintposition) 的空白。

附註   請確定您的表格欄寬度足可容納寬度較寬的字串。

當 Print 方法與比例字型一起使用，則使用 Spc 函數所輸出的空格寬度將會等於所選用之字型內所有字元的點數大小平均。然而，已填寫字元的固定寬度欄位之數目和已輸出的字元數，兩者之間並無任何關連存在。舉例而言，大寫的英文字母 W 會佔據超過一個固定寬度的欄位，而小寫的字母 i 則會佔據少於一個固定寬度的欄位。


Tab 函數

��� [image] ���

Tab 函數通常會配合 Print # 陳述式或 Print 方法一起使用，以用來指定資料的輸出位址。

語法

Tab[(n)]

選擇性引數 n 是用來指出，在顯示或輸出清單中的下一個運算式之前所須移動的欄位數目。若省略此引數，則 Tab 函數會將插入點移至下一個輸出區塊。這使得 Tab 可被用來取代地區中的逗號；該逗號是作為十進位分隔符號之用。

請注意

若目前輸出行上的輸出位置大於 n，則 Tab 函數會將輸出位置移至下一個輸出行的第 n 個欄位上。若 n 小於 1，則 Tab 函數會將輸出位置移至欄位 1。如果 n 大於輸出行的寬度，則 Tab 函數會使用下列公式來計算下一個輸出位置：

n Mod width

舉例而言，如果 width 是 80 並且指定 Tab(90) 的話，則下一個輸出將會從欄位 10 開始(90/80 的餘數)。如果 n 小於目前的輸出位置，則會根據計算後的輸出位置，從下一列中的相對位置開始輸出。反之， 若計算後的輸出位置大於目前的輸出位置，則會根據計算結果，從同一列中的對應位置開始輸出。

輸出列上最左邊的輸出位置通常被訂為 1。當您使用 Print # 陳述式將資料寫入檔案時，則最右邊的輸出位置等於輸出檔案中目前的寬度，但您可以使用 Width # 陳述式來設定您所需的寬度。

附註   請確定您的表格欄寬度足可容納寬度較寬的字串。

當 Print 方法與Tab 函數一起使用，則輸出的外觀將會被分割為相等，且固定寬度的欄位。各欄位的寬度等於您所選用之字型內所有字元的點數大小平均。然而，已填寫字元的固定寬度欄位之個數和已輸出的字元數，兩者之間並無任何關連存在。舉例而言，大寫的英文字母 W 會佔據超過一個固定寬度的欄位，而小寫的字母 i 則會佔據少於一個固定寬度的欄位。


Width # 陳述式

��� [image] ���

指定一個輸出行的寬度，給利用 Open 陳述式所開啟的檔案。

語法

Width #filenumber, width

Width # 陳述式的語法具有以下幾個單元：

單元	說明
filenumber	必要的引數。任何正確的檔案代碼。
width	必要的引數。它是個範圍介於 0 和 255 之間的數值運算式，在新的一列開始前，用來指定該列可容納多少字元。如果引數 width 之值為 0，則列的長度將不受限制；通常，引數 width 的預設值為 0。


Write # 陳述式

��� [image] ���

將資料寫入循序檔中。

語法

Write #filenumber,[outputlist]

Write # 陳述式的語法具有以下幾個單元：

單元	說明
filenumber	必要的引數。任何正確的檔案代碼。
outputlist	選擇性引數。包含一個或多個以逗號作為分隔，而欲寫入檔案中的數值運算式或字串運算式。
請注意

使用 Write # 陳述式來寫入資料到檔案，則通常會以 Input # 陳述式來讀出資料。

如果省略引數 outputlist，並且在引數  filenumber 之後加上一個逗號，則會將一個空白行寫入檔案中。多個運算式之間可用空格、分號或逗號來加以隔開；空白和分號的效果是一像的。

當使用 Write # 陳述式來將資料寫入檔案中時，它會遵循數個國際通用的議定，如此可確保資料可以用 Input # 陳述式來正確地加以讀取並且轉譯，而不必管作業系統是做何種的地區設定。

•	數字資料總是使用(.)當作十進位分隔符號。

•	對於 Boolean 型態的資料而言、不管是 #TRUE# 或是 #FALSE# 都會被寫入檔案中。並且不論作業系統是做何種的地區設定，True 和 False 這兩個關鍵字並不會被轉換。

•	Date 型態的資料會使用國際日期格式來寫入檔案中。當日期或時間的部份沒有指定或設定為零，則只有被指定的部份會寫入檔案中。

•	若引數 outputlist 的資料為 Empty 型態，則不會將任何資料寫入檔案。 然而，如果引數 outputlist 的資料為 Null 型態，則會將 #NULL# 寫入檔案中。

•	如果引數 outputlist 的資料為 Null 型態，則會將 #NULL# 寫入檔案中。

•	對於 Error 型態的資料而言，輸出的資料會如同 #ERROR errorcode#一樣。並且不論作業系統的地區設定，Error 關鍵字都不會被轉換。

不像 Print # 陳述式，當要將資料寫入檔案時，Write # 陳述式會自動在項目和用來標示字串的引號之間插入逗號。 所以，在使用 Write # 陳述式時不用再鍵入明確的分隔符號。 並且 Write # 陳述式在將 outputlist 中的。

備註���您不可寫入包含內嵌引號的字串 (例如 "1,2""X")，而與 Input # 陳述式一起使用：Input # 會將此字串分析為兩個完整的個別字串。


DDB 函數範例

本範例使用 DDB 函數來計算某項資產在一特定期間內的折舊。計算時需給定資產的初始成本 (InitCost)，使用年限結束時所餘的價值 (SalvageVal)，以「年」為單位之可用的生命長度 (LifeTime)，以及所要計算折舊的期間年限 (Depr)。

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, Depr

Const YRMOS = 12	' 一年之中的月份數。

Fmt = "###,##0.00"

InitCost = InputBox("What's the initial cost of the asset?")

SalvageVal = InputBox("Enter the asset's value at end of its life.")

MonthLife = InputBox("What's the asset's useful life in months?")

Do While MonthLife < YRMOS	' 確保計算期間大於等於一年 。

MsgBox "Asset life must be a year or more."

MonthLife = InputBox("What's the asset's useful life in months?")

Loop

LifeTime = MonthLife / YRMOS	' 將月份數轉成年份數。

If LifeTime <> Int(MonthLife / YRMOS) Then

LifeTime = Int(LifeTime + 1)	' 四捨五入至最接近的年份。

End If

DepYear = CInt(InputBox("Enter year for depreciation calculation."))

Do While DepYear < 1 Or DepYear > LifeTime

MsgBox "You must enter at least 1 but not more than " & LifeTime

DepYear = InputBox("Enter year for depreciation calculation.")

Loop

Depr = DDB(InitCost, SalvageVal, LifeTime, DepYear)

MsgBox "The depreciation for year " & DepYear & " is " & _

Format(Depr, Fmt) & "."


FV 函數範例

本範例使用 FV 函數計算某項投資的未來價值，計算時給定每期的利率 (APR / 12)，投資的總期數 (TotPmts)，每期的投資額 (Payment)，已投資的現額 (PVal)，及付款方式 (以數字表示期初或期末付款 - PayType)。請注意，因為 Payment 代表支付出去的現金，故其為負值。

Dim Fmt, Payment, APR, TotPmts, PayType, PVal, FVal

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 付款方式。

Fmt = "###,###,##0.00"	' 定義金額格式。

Payment = InputBox("How much do you plan to save each month?")

APR = InputBox("Enter the expected interest 年利率.")

If APR > 1 Then APR = APR / 100	' 確保格式正確。

TotPmts = InputBox("For how many months do you expect to save?")

PayType = MsgBox("Do you make payments at the end of month?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

PVal = InputBox("How much is in this savings account now?")

FVal = FV(APR / 12, TotPmts, -Payment, -PVal, PayType)

MsgBox "Your savings will be worth " & Format(FVal, Fmt) & "."


IPmt 函數範例

本範例使用 IPmt 函數來計算每期的付款中有多少是屬於利息，其中每期付款金額為相同。計算時需給定每期利率 (APR / 12)，利息的付款週期 (Period)，付款總期數 (TotPmts)，貸款現值或本金 (PVal)，貸款的未來值 (FVal)，及付款方式，以數字表示期初或期末付款 (PayType)。

Dim FVal, Fmt, PVal, APR, TotPmts, PayType, Period, IntPmt, TotInt, Msg

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 付款方式。

FVal = 0	' 對貸款而言通常為零。

Fmt = "###,###,##0.00"	' 定義金額格式。

PVal = InputBox("How much do you want to borrow?")

APR = InputBox("What is the 年利率 of your loan?")

If APR > 1 Then APR = APR / 100	' 確保格式正確。

TotPmts = InputBox("How many monthly payments?")

PayType = MsgBox("Do you make payments at end of the month?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

For Period = 1 To TotPmts	' 將所有利息加總。

IntPmt = IPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)

TotInt = TotInt + IntPmt

Next Period

Msg = "You'll pay a total of " & Format(TotInt, Fmt)

Msg = Msg & " in interest for this loan."

MsgBox Msg	' 顯示結果。


IRR 函數範例

在本範例中，IRR 函數會計算由陣列 Values() 內所含一系列期間的5筆現金流量之實質報酬率 (internal rate of return)。第一個陣列元素為一負值現金流，代表事業初始成本 (事業初始成本)。其餘4個正值現金流代表後續4年內的收入狀況。Guess 為實質報酬率之估計值。

Dim Guess, Fmt, RetRate, Msg

Static Values(5) As Double	' 宣告陣列。

Guess = .1	' Guess 由 10% 開始。

Fmt = "#0.00"	' 定義百分比的顯示格式。

Values(0) = -70000	' 事業初始成本。

' 正值現金流代表連續四年的收入狀況。

Values(1) = 22000 : Values(2) = 25000

Values(3) = 28000 : Values(4) = 31000

RetRate = IRR(Values(), Guess) * 100	' 計算實質報酬率。

Msg = "The internal rate of return for these five cash flows is "

Msg = Msg & Format(RetRate, Fmt) & " percent."

MsgBox Msg	' 顯示實質報酬率。


MIRR 函數範例

本範例使用 MIRR 函數計算由陣列 Values() 內所含一系列期間現金流量之修正過的實質報酬率。LoanAPR 代表財務成本上的支付利息利率，而 InvAPR 則代表由現金再投資上所得到的利息利率。

Dim LoanAPR, InvAPR, Fmt, RetRate, Msg

Static Values(5) As Double	' 宣告陣列。

LoanAPR = .1	' 貸款利率。

InvAPR = .12	' 再投資利率。

Fmt = "#0.00"	' 定義金額格式。

Values(0) = -70000	' 事業初始成本。

' 正值現金流代表連續四年的收入狀況。

Values(1) = 22000 : Values(2) = 25000

Values(3) = 28000 : Values(4) = 31000

RetRate = MIRR(Values(), LoanAPR, InvAPR)	' 計算實質報酬率。

Msg = "The modified internal rate of return for these five cash flows is"

Msg = Msg & Format(Abs(RetRate) * 100, Fmt) & "%."

MsgBox Msg	' 顯示實質報酬率。


NPer 函數範例

本範例使用 NPer 函數計算分期償還貸款之總期數，貸款金額為 PVal。計算時尚需給定每期利率 (APR / 12)，每期付款金額 (Payment)，貸款的未來值 (FVal)，及付款方式，以數字表示期初或期末付款 (PayType)。

Dim FVal, PVal, APR, Payment, PayType, TotPmts

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 付款方式。

FVal = 0	' 對貸款而言通常為零。

PVal = InputBox("How much do you want to borrow?")

APR = InputBox("What is the 年利率 of your loan?")

If APR > 1 Then APR = APR / 100	' 確保格式正確。

Payment = InputBox("How much do you want to pay each month?")

PayType = MsgBox("Do you make payments at the end of month?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

TotPmts = NPer(APR / 12, -Payment, PVal, FVal, PayType)

If Int(TotPmts) <> TotPmts Then TotPmts = Int(TotPmts) + 1

MsgBox "It will take you " & TotPmts & " months to pay off your loan."


NPV 函數範例

本範例使用 NPV 函數根據陣列 Values() 內所含的一系列現金流量計算投資之淨現值。RetRate 表示固定之實質報酬率。

Dim Fmt, Guess, RetRate, NetPVal, Msg

Static Values(5) As Double	' 宣告陣列。

Fmt = "###,##0.00"	' 定義金額格式。

Guess = .1	' Guess 從 10% 開始。

RetRate = .0625	' 設定固定實質報酬率。

Values(0) = -70000	' 事業初始成本。

' 正值現金流代表連續四年的收入狀況。

Values(1) = 22000 : Values(2) = 25000

Values(3) = 28000 : Values(4) = 31000

NetPVal = NPV(RetRate, Values())	' 計算投資淨現值。

Msg = "The net present value of these cash flows is "

Msg = Msg & Format(NetPVal, Fmt) & "."

MsgBox Msg	' 顯示投資淨現值。


Pmt 函數範例

本範例使用 Pmt 函數計算以月方式償還貸款之每期付款金額。計算時需給定每期利率 (APR / 12)，付款總期數 (TotPmts)，貸款的現值或本金 (PVal)，貸款的未來值 (FVal)，及付款方式，以數字表示期初或期末付款 (PayType)。

Dim Fmt, FVal, PVal, APR, TotPmts, PayType, Payment

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 付款方式。

Fmt = "###,###,##0.00"	' 定義金額格式。

FVal = 0	' 對貸款而言通常為零。

PVal = InputBox("How much do you want to borrow?")

APR = InputBox("What is the 年利率 of your loan?")

If APR > 1 Then APR = APR / 100	' 確保格式正確。

TotPmts = InputBox("How many monthly payments will you make?")

PayType = MsgBox("Do you make payments at the end of month?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

Payment = Pmt(APR / 12, TotPmts, -PVal, FVal, PayType)

MsgBox "Your payment will be " & Format(Payment, Fmt) & " per month."


PPmt 函數範例

本範例使用 PPmt 函數計算以定期定額且固定利率方式償還貸款時，每期付款中償還本金之金額。計算時給定每期利率 (APR/12)，本金分期償還週期 (Period)，付款總期數 (TotPmts)，貸款的現值或本金 (PVal)，貸款的未來值 (FVal)，及付款方式，以數字表示期初或期末付款 (PayType)。

Dim NL, TB, Fmt, FVal, PVal, APR, TotPmts, PayType, Payment, Msg, MakeChart, Period, P, I

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 付款方式。

NL = Chr(13) & Chr(10)	' 定義換行字元。

TB = Chr(9)	' 定義定位寬度。

Fmt = "###,###,##0.00"	' 定義金額格式。

FVal = 0	' 對貸款而言通常為零。

PVal = InputBox("How much do you want to borrow?")

APR = InputBox("What is the 年利率 of your loan?")

If APR > 1 Then APR = APR / 100	' 確保格式正確。

TotPmts = InputBox("How many monthly payments do you have to make?")

PayType = MsgBox("Do you make payments at the end of month?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

Payment = Abs(-Pmt(APR / 12, TotPmts, PVal, FVal, PayType))

Msg = "Your monthly payment is " & Format(Payment, Fmt) & "."

Msg = Msg & "Would you like a breakdown of your principal and "

Msg = Msg & "interest per period?"

MakeChart = MsgBox(Msg, vbYesNo)	' 詢問是否要顯示。

If MakeChart <> vbNo Then

If TotPmts > 12 Then MsgBox "Only first year will be shown."

Msg = "Month  Payment  Principal  Interest" & NL

For Period = 1 To TotPmts

If Period > 12 Then Exit For	' Show only first 12。

P = PPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)

P = (Int((P + .005) * 100) / 100)	' 四捨五入計算本金。

I = Payment - P

I = (Int((I + .005) * 100) / 100)	' 四捨五入計算利息。

Msg = Msg & Period & TB & Format(Payment, Fmt)

Msg = Msg & TB & Format(P, Fmt) & TB & Format(I, Fmt) & NL

Next Period

MsgBox Msg	' 顯示分期償還表。

End If


PV 函數範例

在本範例中，PV 函數計算一筆養老金的現值，該養老金將以每年支付 $50,000 的方式，分二十年來支付 $1,000,000 之總金額。計算時給定值為年利率期望值 (APR)，付款總期數 (TotPmts)，每期付款金額 (YrIncome)，未來總值 (FVal)，以及付款方式，以數字表示期初或期末付款 (PayType)。請注意，YrIncome 為負值，因為它代表每年從養老金支付出去的現金。

Dim Fmt, APR, TotPmts, YrIncome, FVal, PayType, PVal

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 付款方式。

Fmt = "###,##0.00"	' 定義金額格式。

APR = .0825	' 年利率。

TotPmts = 20	' 付款總期數。

YrIncome = 50000	' 每年收到金額。

FVal = 1000000	' 未來總值。

PayType = BEGINPERIOD	' 期初付款。

PVal = PV(APR, TotPmts, -YrIncome, FVal, PayType)

MsgBox "The present value is " & Format(PVal, Fmt) & "."


Rate 函數範例

本範例使用 Rate 函數計算某貸款的利率，計算時需給定付款總期數 (TotPmts)，每期償還貸款之金額 (Payment)，貸款的現值或本金 (PVal)，貸款的未來值 (FVal)，付款方式，以數字表示期初或期末付款 (PayType)，及利率的約略估計值 (Guess)。

Dim Fmt, FVal, Guess, PVal, Payment, TotPmts, PayType, APR

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 付款方式。

Fmt = "##0.00"	' 定義百分比的顯示格式。

FVal = 0	' 對貸款而言通常為零。

Guess = .1	' 利率估計值為 10%。

PVal = InputBox("How much did you borrow?")

Payment = InputBox("What's your monthly payment?")

TotPmts = InputBox("How many monthly payments do you have to make?")

PayType = MsgBox("Do you make payments at the end of the month?", _

vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

APR = (Rate(TotPmts, -Payment, PVal, FVal, PayType, Guess) * 12) * 100

MsgBox "Your interest rate is " & Format(CInt(APR), Fmt) & " percent."


SLN 函數範例

本範例使用 SLN 函數以「直線折舊 (straight-line depreciation)」法計算某項資產在一期之內的折舊，計算時須給定資產的初始成本 (InitCost)，資產在可用年限結束後的價值 (SalvageVal)，及資產的可用年限 (LifeTime)。

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, PDepr

Const YEARMONTHS = 12	' 一年之中的月份數。

Fmt = "###,##0.00"	' 定義金額格式。

InitCost = InputBox("What's the initial cost of the asset?")

SalvageVal = InputBox("What's the asset's value at the end of its useful life?")

MonthLife = InputBox("What's the asset's useful life in months?")

Do While MonthLife < YEARMONTHS	' 確保計算期間大於等於一年 。

MsgBox "Asset life must be a year or more."

MonthLife = InputBox("What's the asset's useful life in months?")

Loop

LifeTime = MonthLife / YEARMONTHS	' 將月份數轉成年份數。

If LifeTime <> Int(MonthLife / YEARMONTHS) Then

LifeTime = Int(LifeTime + 1)	' 四捨五入至最接近的年份。

End If

PDepr = SLN(InitCost, SalvageVal, LifeTime)

MsgBox "The depreciation is " & Format(PDepr, Fmt) & " per year."


SYD 函數範例

本範例使用 SYD 函數計算某項資產在指定期間內的折舊，計算時需給定資產初始成本 (InitCost)，資產在可用年限結束後的價值 (SalvageVal)，及資產的可用年限 (LifeTime)。計算折舊的期間年限為 PDepr。

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, PDepr

Const YEARMONTHS = 12	' 一年之中的月份數。

Fmt = "###,##0.00"	' 定義金額格式。

InitCost = InputBox("What's the initial cost of the asset?")

SalvageVal = InputBox("What's the asset's value at the end of its life?")

MonthLife = InputBox("What's the asset's useful life in months?")

Do While MonthLife < YEARMONTHS	' 確保計算期間大於等於一年 。

MsgBox "Asset life must be a year or more."

MonthLife = InputBox("What's the asset's useful life in months?")

Loop

LifeTime = MonthLife / YEARMONTHS	' 將月份數轉成年份數。

If LifeTime <> Int(MonthLife / YEARMONTHS) Then

LifeTime = Int(LifeTime + 1)	' 四捨五入至最接近的年份。

End If

DepYear = CInt(InputBox("For which year do you want depreciation?"))

Do While DepYear < 1 Or DepYear > LifeTime

MsgBox "You must enter at least 1 but not more than " & LifeTime

DepYear = CInt(InputBox("For what year do you want depreciation?"))

Loop

PDepr = SYD(InitCost, SalvageVal, LifeTime, DepYear)

MsgBox "The depreciation for year " & DepYear & " is " & Format(PDepr, Fmt) & "."


DDB 函數

��� [image] ���

傳回一個 Double，表示一項資產在某一特定期間內的折舊。可使用雙衰減平衡方法或其它您指定的方法作計算。

語法

DDB(cost, salvage, life, period[, factor])

DDB 函數具有下列指名引數：

單元	說明
cost	必要的。Double。表示資產的初始成本。
salvage	必要的。Double。表示使用年限結束時，資產所餘的價值。
life	必要的。Double。表示資產可用的生命長度。
period	必要的。Double。計算資產折舊時的計算周期。
factor	選擇性的。Variant。表示衰減平衡時的速率。如果省略的話，以 2(雙衰減方法)為預設值。
請注意

雙衰減平衡方法是用加速利率法來計算折舊。折舊在第一期為最高而在接下來的期間內降低。

life 和 period 引數必須以相同的單位來表示。舉例來說，如果 life 以月份來表示，period 就必須也以月份來表示。所有的引數都必須是正值。

DDB 函數使用下列的公式，來計算在一定期數後的折舊：

折舊 / period = ((cost - salvage) * factor) / life


FV 函數

��� [image] ���

傳回一個 Double，表示根據定期、定額支付且固定利率下之年金的未來值。

語法

FV(rate, nper, pmt[, pv[, type]])

FV 函數有下列指名引數：

單元	說明
rate	必要的。Double，表示每一期的利率。舉例來說，如果您有一筆汽車貸款，其貸款年百分比率 (APR) 為百分之 10 並且您按月付款，則每一期的利率為 0.1/12，或 0.0083。
nper	必要的。Integer，一筆年金的付款總期數。舉例來說，假如您在一個四年的汽車貸款中選擇按月付款，則您的貸款共有 4 * 12 (或 48) 個付款期。
pmt	必要的。Double，表示每一期所付款的金額。付款的金額通常是包含本金和利息，且此付款的金額在年金的生命期中是不改變的。
pv	選擇性的。Variant，表示在您未來一系列付款(或一次付清)的現值。舉例來說，當您借錢買了一輛車，您向貸方所借的金額為，您未來每月之付款對貸方而言的現值。假如省略的話，預設值為 0。
type	選擇性的。Variant表示貸款到期時間的方式。假如貸款是在貸款週期結束時到期，請使用數字 0。若是貸款是在周期開始時到期，請使用數字 1。假如省略的話，預設值為 0。
請注意

年金是指在一段時間內一系列的固定現金支付。年金可以是貸款 (如房屋抵押貸款) 或是一種投資 (如按月儲蓄計劃)。

rate 和 nper 引數在計算時，支付期間必須以相同的單位來計算。舉例來說，如果 rate 是以月份來計算，則 nper 也必須同時以月份來計算。

對所有的引數而言，現金支出 (如儲蓄存款) 是以負值來表示，而現金收入 (如紅利支票) 是以正值來表示。


IPmt 函數

��� [image] ���

傳回一個 Double，表示定期定額支付且固定利率的年金，在一段時間內支付的利息值。

語法

IPmt(rate, per, nper, pv[, fv[, type]])

IPmt 函數有下列指名引數：

單元	說明
rate	必要的。Double，表示每一期的利率。舉例來說，如果您有一筆汽車貸款，其貸款年百分比率(APR)為百分之 10 並且您按月付款，則每一期的利率為 0.1/12，或 0.0083。
per	必要的。Double，在 nper 間 1 的範圍中的付款周期。
nper	必要的。Double，表示一筆年金的付款總期數。舉例來說，假如您在一個四年的汽車貸款中選擇按月付款，則您的貸款共有 4 * 12 (或 48) 個付款期。
pv	必要的。Double，表示未來一系列付款或收款的現值。舉例來說，當您借錢買了一輛車，您向貸方所借貸的金額為您將來每月償付給貸方款項的現值。
fv	選擇性的。Variant， 表示在您繳清貸款後您所希望的未來值或現金結存值。舉例來說，貸款的未來值在貸款繳清後為 $0。然而，如果您想要在 18 年間存下 $50,000 元以作為您的子女教育基金，那麼 $50,000 為未來值。假如省略的話，預設值為 0。
type	選擇性的。 Variant，表示貸款到期時間的方式。假如貸款是在貸款週期結束時到期，請使用數字 0。若是貸款是在周期開始時到期，請使用數字 1。假如省略的話，預設值為 0。
請注意

年金是指在一段時間內一系列的固定現金支付。年金可以是貸款 (如房屋抵押貸款) 或是一種投資 (如按月儲蓄計劃)。

rate 和 nper 引數在計算時，支付期間必須以相同的單位來計算。舉例來說，如果 rate 是以月份來計算，nper 也必須同時以月份來計算。

對所有的引數而言，現金支出 (如儲蓄存款) 是以負值來表示，而現金收入 (如紅利支票) 是以正值來表示。


IRR 函數

��� [image] ���

傳回一個 Double，表示一系列周期性之現金流量 ( 出支或收入 ) 的實質報酬率。

語法

IRR(values()[, guess])

IRR 函數有下列指名引數：

單元	說明
values()	必要的。Double 陣列，表示現金流量值。此陣列至少需要含有一個負值 (支付) 和一個正值 (收入)。
Guess	選擇性的。Variant，表示您猜測 IRR.可能的傳回值。如果省略，guess 預設為 0.1 (10%)。
請注意

實質報酬率是：一筆含有支出及收入的投資，在規則性的間隔內所能得到的利息利率值。

IRR 函數使用陣列中數值的順序來指示支付和收入的順序。請確認您的支付和收入數值是以正確的順序輸入的。在每一期裏的現金流量不須像計算年金時為固定不變的。

IRR是利用反覆疊代來計算的。先以 guess 的值開始，IRR 不斷地反覆循環疊代計算，一直到精確度在百分之 0.00001 內。假如經過 20 次反覆疊代測試還不能找到結果，IRR 計算就失敗。


MIRR 函數

��� [image] ���

傳回一個 Double，表示一系列周期性之現金流量 ( 出支或收入 ) 修正過的實質報酬率。

語法

MIRR(values(), finance_rate, reinvest_rate)

MIRR 函數有下列指名引數：

單元	說明
values()	必要的。Double 陣列，表示現金流量值。此陣列至少需要含有一個負值 (支付) 和一個正值 (收入)。
finance_rate	必要的。Double，表示財務成本上的支付利息利率。
reinvest_rate	必要的。Double，表示由現金再投資上所得到的利息利率。
請注意

修正的實質報酬率是指，當支出和收入是以不同的利率來計算時的實質報酬率。MIRR 函數同時考慮投資成本 (finance_rate) 和現金再投資所得的利息利率 (reinvest_rate)。

finance_rate 和 reinvest_rate 引數是以十進位表示的百分比數值。舉例來說，百分之 12 表示為 0.12。

MIRR 函數使用陣列中數值的順序來指示支付和收入的順序。請確認您支付和收入的數值是以正確的順序輸入的。


NPer 函數

��� [image] ���

傳回一個 Double，表示根據定期定額支付且固定利率下之年金的總期數。

語法

NPer(rate, pmt, pv[, fv[, type]])

NPer 函數有下列指名引數：

單元	說明
rate	必要的。Double，表示每一期的利率。舉例來說，如果您有一筆汽車貸款，其貸款年百分比率 (APR) 為百分之 10 並且您按月付款，則每一期的利率為 0.1/12，或 0.0083。
pmt	必要的。Double，表示每一期所付款的金額。付款的金額通常是包含本金和利息，且此付款的金額在年金的生命期中是不改變的。
pv	必要的。Double。表示未來一系列付款或收款的現值。舉例來說，當您借錢買了一輛車，您向貸方所借貸的金額為您將來每月償付給貸方款項的現值。
fv	選擇性的。Variant，表示在您繳清貸款後您所希望的未來值或現金結存值。舉例來說，貸款的未來值在貸款繳清後為 $0。然而，如果您想要在 18 年間存下 $50,000 元以作為您的子女教育基金，那麼 $50,000 為未來值。假如省略的話，預設值為 0。
type	選擇性的。 Variant，表示貸款到期時間的方式。假如貸款是在貸款週期結束時到期，請使用數字 0。若是貸款是在周期開始時到期，請使用數字 1。假如省略的話，預設值為 0。
請注意

年金是指在一段時間內一系列的固定現金支付。年金可以是貸款 (如房屋抵押貸款) 或是一種投資 (如按月儲蓄計劃)。

對所有的引數而言，現金支出 ( 如儲蓄存款 ) 是以負值來表示，而現金收入 ( 如紅利支票 ) 是以正值來表示。


NPV 函數

��� [image] ���

傳回一個 Double，表示根據一系列定期的現金流量 ( 支付和收入 ) 和折扣率而定的投資之淨現值。

語法

NPV(rate, values())

NPV 函數有下列指名引數：

單元	說明
rate	必要的。Double，表示在一期之間的折扣率，以十進位來表示。
values()	必要的。Double 陣列，表示現金流量值。此陣列至少需要含有一個負值 (支付) 和一個正值 (收入)。
請注意

投資的淨現值就是，未來一系列的支付或收入在現在的價值。

NPV 函數使用陣列中數值的順序來指示支付和收入的順序。請確認您支付和收入的數值是以正確的順序輸入的。

NPV投資在第一筆現金流量值之前就開始計算周期，而結束於陣列中最後的現金流量值。

淨現值的計算是根據未來的現金流量。如果您的第一筆現金流量發生在第一期的開始，那麼 NPV 傳回的值必須加上這第一筆的值才是淨現值。而且在 values() 陣列中不可含有此第一筆現金流量值。

NPV 函數類似 PV 函數 (現值)，但是 PV 函數容許現金流量發生在一個期間的開始或結束上。而且 NPV 的現金流量值可變動， PV 的現金流量在整個投資期間內卻必須是固定的。


Pmt 函數

��� [image] ���

傳回一個 Double，表示根據定期定額支付且固定利率的年金，在每一期的支付額。

語法

Pmt(rate, nper, pv[, fv[, type]])

Pmt 函數有下列指名引數：

單元	說明
rate	必要的。Double，表示每一期的利率。舉例來說，如果您有一筆汽車貸款，其貸款年百分比率 (APR) 為百分之 10 並且您按月付款，則每一期的利率為 0.1/12，或 0.0083。
nper	必要的。Integer，表示一筆年金的付款總期數。舉例來說，假如您選擇按月繳清四年的汽車貸款，則您的貸款共有 4 * 12 (或 48) 個付款期。
pv	必要的。Double。表示未來一系列付款或收款的現值。舉例來說，當您借錢買了一輛車，您向貸方所借貸的金額為您將來每月償付給貸方款項的現值。
fv	選擇性的。Variant，表示在您繳清貸款後您所希望的未來值或現金結存值。舉例來說，貸款的未來值在貸款繳清後為 $0。然而，如果您想要在 18 年間存下 $50,000 元以作為您的子女教育基金，那麼 $50,000 為未來值。假如省略的話，預設值為 0。
type	選擇性的。Variant，表示貸款到期時間的方式。假如貸款是在貸款週期結束時到期，請使用數字 0。若是貸款是在周期開始時到期，請使用數字 1。假如省略的話，預設值為 0。
請注意

年金是指在一段時間內一系列的固定現金支付，年金可以是貸款 (如房屋抵押貸款) 或是一種投資 ( 如按月儲蓄計劃 )。

rate 和 nper 引數在計算時，支付期間必須以相同的單位來計算。舉例來說，如果 rate 是以月份來計算，nper 也必須同時以月份來計算。

對所有的引數而言，現金支出 (如儲蓄存款) 是以負值來表示，而現金收入 (如紅利支票) 是以正值來表示。


PPmt 函數

��� [image] ���

傳回一個 Double，表示根據定期定額支付且固定利率的年金，在指定之期間內的本金償付額。

語法

PPmt(rate, per, nper, pv[, fv[, type]])

PPmt 函數有下列指名引數：

單元	說明
rate	必要的。Double，表示每一期的利率。舉例來說，如果您有一筆汽車貸款，其貸款年百分比率(APR)為百分之 10 並且您按月付款，則每一期的利率為 0.1/12，或 0.0083。
per	必要的。Integer，表示在 nper 間 1 的範圍中的付款周期。
nper	必要的。Integer，表示一筆年金的付款總期數。舉例來說，假如您在一個四年的汽車貸款中選擇按月付款，則您的貸款共有 4 * 12 (或 48) 個付款期。
pv	必要的。Double，表示未來一系列付款或收款的現值。舉例來說，當您借錢買了一輛車，您向貸方所借貸的金額為您將來每月償付給貸方款項的現值。
fv	選擇性的。Variant，表示在您繳清貸款後您所希望的未來值或現金結存值。舉例來說，貸款的未來值在貸款繳清後為 $0。然而，如果您想要在 18 年間存下 $50,000 元以作為您的子女教育基金，那麼 $50,000 為未來值。假如省略的話，預設值為 0。
type	選擇性的。Variant，表示貸款到期時間的方式。假如貸款是在貸款週期結束時到期，請使用數字 0。若是貸款是在周期開始時到期，請使用數字 1。假如省略的話，預設值為 0。
請注意

年金是指在一段時間內一系列的固定現金支付。年金可以是貸款 (如房屋抵押貸款) 或是一種投資 (如按月儲蓄計劃)。

rate 和 nper 引數在計算時，支付期間必須以相同的單位來計算。舉例來說，如果 rate 是以月份來計算，nper 也必須同時以月份來計算。

對所有的引數而言，現金支出 (如儲蓄存款) 是以負值來表示，而現金收入 (如紅利支票) 是以正值來表示。


PV 函數

��� [image] ���

傳回一個 Double表示根據定期、定額未來支付且固定利率下之年金的現值。

語法

PV(rate, nper, pmt[, fv[, type]])

PV 函數有下列指名引數：

單元	說明
rate	必要的。Double，表示每一期的利率。舉例來說，如果您有一筆汽車貸款，其貸款年百分比率 (APR) 為百分之 10 並且您按月付款，則每一期的利率為 0.1/12，或 0.0083。
nper	必要的。Integer，表示一筆年金的付款總期數。舉例來說，假如您在一個四年的汽車貸款中選擇按月付款，則您的貸款共有 4 * 12 (或 48) 個付款期。
pmt	必要的。Double，表示每一期所付款的金額。付款的金額中通常包含本金和利息，且此付款的金額在年金的生命期中是不改變的。
fv	選擇性的。Variant，表示在您繳清貸款後您所希望的未來值或現金結存值。舉例來說，貸款的未來值在貸款繳清後為 $0。然而，如果您想要在 18 年間存下 $50,000 元以作為您的子女教育基金，那麼 $50,000 為未來值。假如省略的話，預設值為 0。
type	選擇性的。 Variant，表示貸款到期時間的方式。假如貸款是在貸款週期結束時到期，請使用數字 0。若是貸款是在周期開始時到期，請使用數字 1。假如省略的話，預設值為 0。
請注意

年金是指在一段時間內一系列的固定現金支付。年金可以是貸款 (如房屋抵押貸款) 或是一種投資 (如按月儲蓄計劃)。

rate 和 nper 引數在計算時，支付期間必須以相同的單位來計算。舉例來說，如果 rate 是以月份來計算，nper 也必須同時以月份來計算。

對所有的引數而言，現金支出 (如儲蓄存款) 是以負值來表示，而現金收入 (如紅利支票) 是以正值來表示。


Rate 函數

��� [image] ���

傳回一個 Double，表示年金在每一期的利率。

語法

Rate(nper, pmt, pv[, fv[, type[, guess]]])

Rate 函數有下列指名引數：

單元	說明
nper	必要的。Double，表示一筆年金的付款總期數。舉例來說，假如您在一個四年的汽車貸款中選擇按月付款，則您的貸款共有 4 * 12 (或 48) 個付款期。
pmt	必要的。Double，表示每一期所付款的金額。付款的金額中通常包含本金和利息，且此付款的金額在年金的生命期中是不改變的。
pv	必要的。Double，表示未來一系列付款或收款的現值。舉例來說，當您借錢買了一輛車，您向貸方所借貸的金額為您將來每月償付給貸方款項的現值。
fv	選擇性的。Variant，表示在您繳清貸款後您所希望的未來值或現金結存值。舉例來說，貸款的未來值在貸款繳清後為 $0。然而，如果您想要在 18 年間存下 $50,000 元以作為您的子女教育基金，那麼 $50,000 為未來值。假如省略的話，預設值為 0。
type	選擇性的。Variant，表示貸款到期時間的方式，假如貸款是在貸款週期結束時到期，請使用數字 0。若是貸款是在周期開始時到期，請使用數字 1。假如省略的話，預設值為 0。
guess	選擇性的。Variant，表示您猜測 Rate 可能的傳回值。如果省略，guess 預設為 0.1 (10%)。
請注意

年金是指在一段時間內一系列的固定現金支付，年金可以是貸款 (如房屋抵押貸款) 或是一種投資 (如按月儲蓄計劃)。

對所有的引數而言，現金支出 (如儲蓄存款) 是以負值來表示，而現金收入 (如紅利支票) 是以正值來表示。

Rate 是利用反覆疊代來計算的。先以 guess 的值開始，Rate 不斷地反覆循環疊代計算，一直到精確度在百分之 0.00001 內。假如經過 20 次反覆疊代測試還不能找到結果，Rate 計算就失敗。如果您的猜測是 10 % 且 Rate 計算失敗，請改以不同的 guess.值試試看。


SLN 函數

��� [image] ���

傳回一個 Double，表示某項資產在一期裏，以直線法計算的折舊。

語法

SLN(cost, salvage, life)

SLN 函數有下列指名引數：

單元	說明
cost	必要的。Double，表示資產的初始成本。
salvage	必要的。Double，表示資產在可用年限結束後的價值。
life	必要的。Double，表示資產的可用年限。
請注意

折舊期間必須和 life 引數以相同的單位表示。所有的引數都必須是正數。


SYD 函數

��� [image] ���

傳回一個 Double，表示某項資產在一指定的期間裏，以年數總計法計算的折舊。

語法

SYD(cost, salvage, life, period)

SYD 函數有下列指名引數：

單元	說明
cost	必要的。Double，表示資產的初始成本。
salvage	必要的。Double，表示資產在可用年限結束後的價值。
life	必要的。Double，表示資產的可用年限。
period	必要的。Double，表示計算資產折舊所用的那一期間。
請注意

life 和 period 引數必須以同樣的單位來表示。舉例來說，如果 life 以月份表示，則 period 也必須以月份來表示。所有的引數都必須是正數。


IsArray 函數範例

本範例使用 IsArray 函數來檢查變數是否為陣列。

Dim MyArray(1 To 5) As Integer, YourArray, MyCheck	' 宣告陣列變數。

YourArray = Array(1, 2, 3)	' 使用陣列函數。

MyCheck = IsArray(MyArray)	' 傳回 True。

MyCheck = IsArray(YourArray)	' 傳回 True。


IsDate 函數範例

本範例使用 IsDate 函數來判斷一個運算式是否可以轉換成日期格式。

Dim MyDate, YourDate, NoDate, MyCheck

MyDate = "February 12, 1969": YourDate = #2/12/69#: NoDate = "Hello"

MyCheck = IsDate(MyDate)	' 傳回 True。

MyCheck = IsDate(YourDate)	' 傳回 True。

MyCheck = IsDate(NoDate)	' 傳回 False。


IsEmpty 函數範例

本範例使用 IsEmpty 函數來檢查變數是否已經初始化。

Dim MyVar, MyCheck

MyCheck = IsEmpty(MyVar)	' 傳回 True。

MyVar = Null	' 變數值設為 Null。

MyCheck = IsEmpty(MyVar)	' 傳回 False。

MyVar = Empty	' 變數值設為 Empty。

MyCheck = IsEmpty(MyVar)	' 傳回 True。


IsError 函數範例

本範例使用 IsError 函數來檢查數值運算式的結果是否為錯誤代碼。範例中假設使用者自訂函數的名稱為 UserFunction，使用 CVErr 函數以 Error Variant 的型態傳回錯誤代碼。例如，函數中傳回值寫法可用 UserFunction = CVErr(32767)，其中 32767 為使用者自訂之錯誤代碼。

Dim ReturnVal, MyCheck

ReturnVal = UserFunction()

MyCheck = IsError(ReturnVal)	' 傳回 True。


IsMissing 函數範例

本範例使用 IsMissing 函數來檢查選擇性引數是否傳遞給使用者自訂程序。請注意，除了 Variant 型態以外，其他皆可當作 Optional 引數的預設值及型態。

Dim ReturnValue

' 下列陳述式呼叫使用者自訂函數。

ReturnValue = ReturnTwice()	' 傳回 Null。

ReturnValue = ReturnTwice(2)	' 傳回 4。

' 函數定義。

Function ReturnTwice(Optional A)

If IsMissing(A) Then

' 如果引數沒有傳入，則傳回 Null。

ReturnTwice = Null

Else

' 如果引數有傳入，傳回其兩倍的值。

ReturnTwice = A * 2

End If

End Functon


IsNull 函數範例

本範例使用 IsNull 函數來檢查變數值是否為 Null。

Dim MyVar, MyCheck

MyCheck = IsNull(MyVar)	' 傳回 False。

MyVar = ""

MyCheck = IsNull(MyVar)	' 傳回 False。

MyVar = Null

MyCheck = IsNull(MyVar)	' 傳回 True。


IsNumeric 函數範例

本範例使用 IsNumeric 函數來檢查變數是否可以轉成數值。

Dim MyVar, MyCheck

MyVar = "53"	' 指定變數值。

MyCheck = IsNumeric(MyVar)	' 傳回 True。

MyVar = "459.95"	' 指定另一個值。

MyCheck = IsNumeric(MyVar)	' 傳回 True。

MyVar = "45 Help"	' 指定另一個值。

MyCheck = IsNumeric(MyVar)	' 傳回 False。


IsObject 函數範例

本範例使用 IsObject 函數來檢查識別項是否代表某一物件變數。範例中 MyObject 及 YourObject 都是相同型態的物件變數，他們只是用來示範用法的一般名稱而已。

Dim MyInt As Integer, YourObject, MyCheck	' 宣告變數。

Dim MyObject As Object

Set YourObject = MyObject	' 指定物件引用。

MyCheck = IsObject(YourObject)	' 傳回 True。

MyCheck = IsObject(MyInt)	' 傳回 False。


TypeName 函數範例

本範例使用 TypeName 函數來傳回某變數的相關資訊。

' 宣告變數。

Dim NullVar, MyType, StrVar As String, IntVar As Integer, CurVar As Currency

Dim ArrayVar (1 To 5) As Integer

NullVar = Null	' 設定變數值為 Null。

MyType = TypeName(StrVar)	' 傳回 "String"。

MyType = TypeName(IntVar)	' 傳回 "Integer"。

MyType = TypeName(CurVar)	' 傳回 "Currency"。

MyType = TypeName(NullVar)	' 傳回 "Null"。

MyType = TypeName(ArrayVar)	' 傳回 "Integer()"。


VarType 函數範例

本範例使用 VarType 函數來決定變數的次型態 (subtype)。

Dim IntVar, StrVar, DateVar, MyCheck

' 設定變數初值。

IntVar = 459: StrVar = "Hello World": DateVar = #2/12/69#

MyCheck = VarType(IntVar)	' 傳回 2。

MyCheck = VarType(DateVar)	' 傳回 7。

MyCheck = VarType(StrVar)	' 傳回 8。


IsArray 函數

��� [image] ���

傳回 Boolean 值，用來指出變數是否為一個陣列。

語法

IsArray(varname)

必要引數 varname 是一個識別項，它可用來代表一個變數。

請注意

如果變數是一個陣列的話，IsArray 就會傳回 True； 否則，傳回 False。通常，用 IsArray 函數來判斷一個 Variant 是否為陣列型態是非常有效的。


IsDate 函數

��� [image] ���

傳回 Boolean 值，用來指出運算式是否可以轉換成日期。

語法

IsDate(expression)

必要引數 expression 是一個 Variant ，包含日期運算式或是可以被辨別為日期或時間的字串運算式。

請注意

如果運算式是一個日期，或是像有效日期一樣可識別的，IsDate 會傳回True；否則它會傳回 False。在 Microsoft Windows 中，有效日期的範圍是介於西元 100 年 1 月 1 日與西元 9999 年 12 月 31 日之間；其有效範圍會因作業系統而有所差異。


IsEmpty 函數

��� [image] ���

傳回 Boolean 值，用來指出變數是否已經初始化。

語法

IsEmpty(expression)

必要引數 expression 是一個 Variant，包含一個數值或字串運算式。然而，因為 IsEmpty 是用來決定個別變數是否已初始化，所以引數 expression 通常是單一變數名稱。

請注意

如果變數未初始化，或已明確設定為 Empty，則 IsEmpty 會傳回 True； 否則，傳回 False。如果 expression 含有一個以上的變數，則一定傳回 False。通常，IsEmpty 只傳回對 Variant有意義的資訊。


IsError 函數

��� [image] ���

傳回 Boolean 值，用來指出運算式是否為一個錯誤值。

語法

IsError(expression)

必要引數 expression 可以是任何有效的運算式。

請注意

錯誤值是利用 CVErr 函數轉換實數而產生。IsError 函數是用來決定一個數值運算式是否代表一個錯誤。如果引數 expression 代表一個錯誤，則 IsError 會傳回 True；否則，它會傳回 False。


IsMissing 函數

��� [image] ���

傳回 Boolean 值，用來指出一個選擇性引數是否已經傳遞給程序。

語法

IsMissing(argname)

必要引數 argname 包含一個選擇性程序引數的名稱。

請注意

使用 IsMissing 函數來偵測，當呼叫一個程序時是否有提供選擇性引數。若對於特定引數沒有傳遞值過去，則 IsMissing 函數會傳回 True；否則，它會傳回 False。如果 IsMissing 函數對於某一引數傳回 True，則在程序中使用此遺漏引數，將會造成一個使用者自訂的錯誤。如果 IsMissing 函數用在一個 ParamArray 引數上，它將會傳回 False。 若要偵測 ParamArray 是否為空的，可試著去看一下陣列的上界是否小於它的下界。

附註   IsMissing 對簡單資料類型 (例如 Integer或Double) 不起作用，因為與Variants不同，它們沒有「遺失」旗標位元的前提。因此，對於選項引數型態，可以指定預設值。如果呼叫程序時，引數被忽略，則該引數將具有該預設值，如下列範例中所示：

Sub MySub(Optional MyVar As String = "specialvalue")

    If MyVar = "specialvalue" Then

    ' MyVar 被忽略。

Else

...

End Sub

在許多情況下，如果使用者從函數呼叫中忽略 If MyVar 測試，可以透過使預設值等於希望 MyVar 所包含的值來完全忽略。這將使您的程式碼更簡潔有效。


IsNull 函數

��� [image] ���

傳回 Boolean 值，用來指出運算式是否未含任何有效的資料(Null)。

語法

IsNull(expression)

必要引數 expression 是一個 Variant，其中包含數值運算式或是字串運算式。

請注意

如果 expression 為 Null，則 IsNull 傳回 True；否則 IsNull 會傳回 False。如果 expression 中存在不只一個變數，若其中任一變數為 Null，則會使得整個運算式傳回 True。

Null 值的作用是用來指出 Variant 不包含有效的資料。Null 和 Empty 不同，後者指出尚未初始化的變數，這和長度為零的字串 ("") 不同， 因為長度為零的字串指的是空字串。

重要   使用 IsNull 函數是來決定運算式是否包含 Null 值。在某些情況下您希望其值為 True 的運算式，就像 If Var = Null 和 If Var <> Null，其值永為 False。這是因為任何包含 Null 的運算式其值為 Null ，也就因此為 False。


IsNumeric 函數

��� [image] ���

傳回 Boolean 值，用來指出運算式的運算結果是否為數字。

語法

IsNumeric(expression)

必要引數 expression 是一個 Variant，包含數值運算式或是 字串運算式。

請注意

如果整個 expression 的運算結果為數字，則 IsNumeric 會傳回 True ；否則，它會傳回 False。

如果 expression 是個日期運算式，則 IsNumeric 會傳回 False。


IsObject 函數

��� [image] ���

傳回 Boolean 值，用來指出識別項是否代表一個物件變數。

語法

IsObject(identifier)

必要引數 identifier 是一個變數名稱。

請注意

IsObject 只用在決定一個 Variant 是否為 VarType vbObject。這可能出現於 Variant 正(或是曾經)引用一個物件， 或者它包含 Nothing。

如果 identifier 是 Object 型態或是任何有效的物件類別型態，或是VarType vbObject 的 Variant，或為使用者自訂的物件，IsObject 都會傳回 True；否則它會傳回 False。即使上述變數已經被設定為 Nothing，IsObject 仍會傳回 True。

使用錯誤捕捉方式來確認一個物件引用是否有效。


TypeName 函數

��� [image] ���

傳回一個 String，它提供某個變數的相關資訊。

語法

TypeName(varname)

必要引數 varname 是一個 Variant，它包含除了使用者自訂型態外的任何變數。

請注意

TypeName 所傳回的字串可以是下列任何一個：

傳回字串	變數
物件型態	型態為 objecttype 的物件
Byte	位元值
Integer	整數
Long	長整數
Single	單倍精確浮點數
Double	雙倍精確浮點數
Currency	貨幣值
Decimal	十進位值
Date	日期
String	字串
Boolean	布林值
Error	錯誤
Empty	未初始化
Null	無有效的資料
Object	一個物件
未知	一個型態未知的物件
Nothing	物件變數不再引用任何物件
如果 varname 是一個陣列，則會在傳回的字串(或 Variant )後面加上空的括號。舉例而言，如果 varname 是一個整數型態的陣列，則 TypeName 會傳回 "Integer()"。


VarType 函數

��� [image] ���

傳回一個 Integer ，用來指出變數的次型態。

語法

VarType(varname)

必要引數 varname 是一個 Variant，它可以是除了使用者自訂型態外的任何變數。

傳回值

常數	值	說明
VbEmpty	0	Empty(未初始化)
VbNull	1	Null(無有效資料)
VbInteger	2	整數
VbLong	3	長整數
VbSingle	4	單倍精確浮點數
VbDouble	5	雙倍精確浮點數
VbCurrency	6	貨幣
VbDate	7	日期
VbString	8	字串
VbObject	9	物件
VbError	10	錯誤
VbBoolean	11	布林值
VbVariant	12	Variant (只適用於 variants 中的陣列)
VbDataObject	13	資料存取物件
VbDecimal	14	十進位值
VbUserDefinedType	36	包含使用者自定型態的變數。
VbByte	17	位元值
VbArray	8192	陣列
附註   這些常數是由 Visual Basic 針對應用程式所特別設定的。這些名稱可以被用在程式碼的任何地方，用以取代真正的值。

請注意

VarType 函數從不對 vbArray 傳回單獨的值，而會加上其他的值來表示一個陣列是屬於某種特殊型態。vbVariant 這個常數只會與 vbArray 同時傳回，以用來表示 VarType 函數的引數是一個陣列型態的 Variant 。舉例而言，一個整數陣列的計算結果是 vbInteger + vbArray， 或是 8194。 如果一個物件有預設的屬性，則 VarType (object) 會傳回此物件預設的屬性。


Empty

Empty 關鍵字是一種 Variant 次型態。表示未初始化的變數值。


False

False 關鍵字的值等於 0。


Me

Me 關鍵字像是隱含宣告的變數。在物件類別模組裏的每個程序都可以自動取用這個關鍵字。當物件類別有一個以上的執行個體時，Me 就可用來引用目前執行之物件類別的某個執行個體。當要傳送正在執行之物件類別中，執行個體的有關資訊到另一個模組的程序時，Me 是非常有用的。舉例來說，如果模組裏有以下程序：

Sub ChangeFormColor(FormName As Form)

FormName.BackColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)

End Sub

您可以呼叫這個程序，並且使用下列的陳述式，將 Form 物件類別目前的執行個體當成引數來傳送。

ChangeFormColor Me


Nothing

Nothing 關鍵字是用來將一個物件變數從一個實際的物件裏分離開來。使用 Set 陳述式可指定 Nothing 給物件變數。舉例來說：

Set MyObject = Nothing

數個物件變數可以同時引用一個實際物件，而當 Nothing 被指定給一個物件變數，那麼該變數將不再引用任何實際物件。當數個物件變數同時引用一個物件，那麼和該物件有關連的記憶體、系統資源中被物件變數所引用到的部份，只有在全部的物件變數都設成 Nothing 後才會被釋放。而變數被設成 Nothing 的方法不外是直接使用 Set，或等待最後被設成 Nothing 的物件變數超出範圍之後。


Null

Null 關鍵字是一種 Variant 次型態。意指變數 中未含正確的資料。


True

True 關鍵字的值等於 -1。


MacScript Function Example

This example uses the MacScript function to open the Choose File dialog box (the Macintosh standard-file dialog). The full path of the file chosen by the user is returned. If appropriate, the path specification is preceded by the type of the file.

ThePath$ = Macscript("ChooseFile")


MacID Function

��� [image] ���

Used on the Macintosh to convert a 4-character constant to a value that may be used by Dir, Kill, Shell, and AppActivate.

Syntax

MacID(constant)

The required constant argument consists of 4 characters used to specify a resource type, file type, application signature, or Apple Event, for example, TEXT, OBIN, "XLS5" for Excel  files ("XLS8"  for Excel 97), Microsoft Word uses "W6BN" ("W8BN" for Word 97), and so on.

Remarks

MacID is used with Dir and Kill to specify a Macintosh file type. Since the Macintosh does not support * and ? as wildcards, you can use a four-character constant instead to identify groups of files. For example, the following statement returns TEXT type files from the current folder:

Dir("SomePath", MacID("TEXT"))

MacID is used with Shell and AppActivate to specify an application using the application's unique signature.


MacScript Function

��� [image] ���

Executes an AppleScript script and returns a value returned by the script, if any.

Syntax

MacScript script

The script argument is a String expression. The String expression either can be a series of AppleScript commands or can specify the name of an AppleScript script or a script file.

Remarks

Multiline scripts can be created by embedding carriage-return characters (Chr(13)).


Abs 函數範例

本範例使用 Abs 函數來計算數值的絕對值。

Dim MyNumber

MyNumber = Abs(50.3)	' 傳回 50.3。

MyNumber = Abs(-50.3)	' 傳回 50.3。


Atn 函數範例

本範例使用 Atn 函數來計算圓周率。

Dim pi

pi = 4 * Atn(1)	' 計算圓周率。


Cos 函數範例

本範例使用 Cos 函數來傳回餘弦。

Dim MyAngle, MySecant

MyAngle = 1.3	' 定義角度 (以「弧度」為單位)。

MySecant = 1 / Cos(MyAngle)	' 利用餘弦計算正割 (sec())。


Exp 函數範例

本範例使用 Exp 函數來計算 e(e ~ 2.71828)的某次方。

Dim MyAngle, MyHSin

' 定義角度(以「弧度」為單位)。

MyAngle = 1.3

' 計算超正弦函數值 (sin())。

MyHSin = (Exp(MyAngle) - Exp(-1 * MyAngle)) / 2


Int 函數，Fix 函數範例

本範例示範 Int 及 Fix 函數傳回某數值的整數部份時的不同。當引數為負數時，Int 函數傳回小於或等於該引數之最大整數，而 Fix 函數則傳回大於或等於該引數之最小整數。

Dim MyNumber

MyNumber = Int(99.8)	' 傳回 99。

MyNumber = Fix(99.2)	' 傳回 99。

MyNumber = Int(-99.8)	' 傳回 -100。

MyNumber = Fix(-99.8)	' 傳回 -99。

MyNumber = Int(-99.2)	' 傳回 -100。

MyNumber = Fix(-99.2)	' 傳回 -99。


Log 函數範例

本範例使用 Log 函數來得到某數的自然對數值。

Dim MyAngle, MyLog

' 定義角度(以「弧度」為單位)。

MyAngle = 1.3

' 計算反超正弦函數值 (inverse sinh())。

MyLog = Log(MyAngle + Sqr(MyAngle * MyAngle + 1))


Randomize 陳述式範例

本範例使用 Randomize 陳述式來對亂數產生器做初始化的動作。範例中呼叫 Randomize 時並沒有傳入引數，亂數種子便會自動採用 Timer 函數的傳回值。

Dim MyValue

Randomize	' 對亂數產生器做初始化的動作。

MyValue = Int((6 * Rnd) + 1)	' 產生 1 到 6 之間的亂數值。


Rnd 函數範例

本範例使用 Rnd 函數隨機產生一個 1 到 6 的整數。

Dim MyValue

MyValue = Int((6 * Rnd) + 1)	' 產生 1 到 6 之間的亂數值。


Sgn 函數範例

本範例使用 Sgn 函數來判斷某個數值的正負號。

Dim MyVar1, MyVar2, MyVar3, MySign

MyVar1 = 12: MyVar2 = -2.4: MyVar3 = 0

MySign = Sgn(MyVar1)	' 傳回 1。

MySign = Sgn(MyVar2)	' 傳回 -1。

MySign = Sgn(MyVar3)	' 傳回 0。


Sin 函數範例

本範例使用 Sin 函數來求出正弦 (sin())。

Dim MyAngle, MyCosecant

MyAngle = 1.3	' 定義角度 (以「弧度」為單位)。

MyCosecant = 1 / Sin(MyAngle)	' 利用正弦來計算餘割 (csc())。


Sqr 函數範例

本範例使用 Sqr 函數來計算某數的平方根。

Dim MySqr

MySqr = Sqr(4)	' 傳回 2。

MySqr = Sqr(23)	' 傳回 4.79583152331272。

MySqr = Sqr(0)	' 傳回 0。

MySqr = Sqr(-4)	' 會產生一個執行階段錯誤 (負數不能用此函數開平方根)。


Tan 函數範例

本範例使用 Tan 函數來求出正切 (tan())。

Dim MyAngle, MyCotangent

MyAngle = 1.3	' 定義角度(以「弧度」為單位)。

MyCotangent = 1 / Tan(MyAngle)	' 利用正切來計算餘切 (cot())。


數學函數

Abs 函數

Atn 函數

Cos 函數

Exp 函數

Fix 函數

Int 函數

Log 函數

Rnd 函數

Sgn 函數

Sin 函數

Sqr 函數

Tan 函數

可推導數學函數


Abs 函數

��� [image] ���

傳回引數的絕對值，傳回值的型態和引數相同。

語法

Abs(number)

必要引數 number 可以是任何數值運算式，如果 number 的值為 Null，則傳回 Null，如果其引數是沒有初始值的變數，則傳回 0。

請注意

一個數的絕對值就是將正負號去掉以後的值。例如， ABS(-1) 和 ABS(1) 的傳回值都是 1。


Atn 函數

��� [image] ���

傳回一個型態為 Double 的值，其內容為引數的「反正切」(arctangent)函數值。

語法

Atn(number)

必要引數 number 可以是一個型態為 Double 的數值，或任何數值運算式。

請注意

Atn 函數的引數 (number) 是直角三角形中構成直角兩邊的比值 (正切函數值)，其傳回值則為相對應之底角的度數，以「弧度」為單位。正切函數值 (number) 的算法為「對邊除以鄰邊」。

傳回值的範圍落在 pi/2 到 pi/2 的「弧度」之間。

「角度」與「弧度」的轉換方法為：將「角度」乘以 pi/180 即為「弧度」。反過來將「弧度」乘以 180/pi 便得「角度」。

附註   Atn (反正切函數) 是 Tan (正切函數) 的反三角函數，正切函數的引數值為角度，傳回值為該角度之對邊除以鄰邊的比值。請不要將 Atn 和 cotangent (餘切函數) 搞混了，餘切函數值是正切函數值的倒數，cotangent = (1/tangent)。


Cos 函數

��� [image] ���

傳回一型態為 Double 的值，其內容為引數值的 cosine(餘弦函數) 值。

語法

Cos(number)

必要引數 number 可以是一型態為Double 的值，或任何數值運算式，其值代表一個角度，以「弧度」為單位。

請注意

Cos 函數的引數表示角度，傳回值為該角度兩鄰邊的比值。其比值的定義為「連接另一銳角的鄰邊除以連接直角的鄰邊」。

傳回值的範圍在 -1 到 1 之間。

「角度」與「弧度」的轉換方法為：將「角度」乘以 pi/180 即為「弧度」。 反過來將「弧度」乘以 180/pi 便得「角度」。


Exp 函數

��� [image] ���

傳回一型態為 Double 的值，其內容 e (自然對數之底數) 的某次方，而該次方值即由引數表示。

語法

Exp(number)

必要引數 number 可以是一型態為 Double 的數值，或任何數值運算式。

請注意

如果 number 的值超過 709.782712893，會產生程式錯誤。常數 e 的值大約是 2.718282。

附註   Exp 函數的作用和 Log 成互補關係，所以有時也稱做「反對數」(antilogarithm)。


Int、Fix 函數

��� [image] ���

傳回數值的整數部份。

語法

Int(number)

Fix(number)

必要引數 number 可以是一型態為 Double 的數值，或任何數值運算式。如果 number 的值為 Null，則傳回 Null。

請注意

Int 和 Fix 都會去掉 number 的小數部份而傳回剩下的整數。

兩個函數的不同之處在於，當 number 為負數時，Int 會傳回小於或等於 number 的第一個負整數，而 Fix 則會傳回大於或等於 number 的第一個負整數。例如，Int 將 -8.4 轉成 -9，而 Fix 則將 -8.4 轉成 -8。

Fix(number) 和下列式子的結果是一樣的：

Sgn(number) * Int(Abs(number))


Log 函數

��� [image] ���

傳回一型態為 Double 的值，內容為引數的自然對數值。

語法

Log(number)

必要引數 number 可以是一型態為 Double 的數值，或任何數值運算式，條件是引數值必須大於 0。

請注意

自然對數是以 e 為底數的對數。常數 e 的值大約是 2.718282。

如果要以任意底數 n 來計算數值 x 的對數值，可以利用下列式子：將 x 的自然對數值除以 n 的自然對數值。

Logn(x) = Log(x) / Log(n)

下面的範例說明如何寫一個函數來求出以 10 為底的對數值：

Static Function Log10(X)

Log10 = Log(X)/Log(10#)

End Function


Randomize 陳述式

��� [image] ���

初始化亂數產生器。

語法

Randomize [number]

選擇性引數 number 可以是一型態為 Variant 的值或任何數值運算式。

請注意

Randomize 使用 number 的值當成新的亂數種子來起始亂數產生器，若要得到一亂數值，則可呼叫 Rnd 函數。如果省略 number，則會以作業系統現在時間來當做新的亂數種子。

如果沒有呼叫 Randomize 來起始亂數產生器，Rnd 函數(沒有引數)則使用上次呼叫 Rnd 函數所得的亂數值當做新的亂數種子。

附註   若想得到重覆的亂數序列，可以在呼叫 Randomize 之前先呼叫 Rnd 並且傳入一小於 0 的引數值。光是用同樣的亂數種子呼叫 Randomize 兩次的話，並不會得到兩次相同的亂數序列。


Rnd 函數

��� [image] ���

傳回一型態為 Single 的值，其內容為一亂數值。

語法

Rnd[(number)]

選擇性引數 number 可以是一型態為 Single 的值，或任何數值運算式。

傳回值

如果 number 的值是	Rnd 傳回的亂數值
小於 0	每次都是使用 number 當做亂數種子的相同結果。
大於 0	亂數序列中的下一個亂數值。
等於 0	最近一次產生過的亂數值。
省略	亂數序列中的下一個亂數值。
請注意

Rnd 函數傳回的亂數值介於 0 和 1 之間，可等於 0，但不等於 1。

number 的值會影響 Rnd 傳回亂數值的方法。

給定一個亂數種子後，便會產生一特定的亂數序列，因為每呼叫一次 Rnd 函數，它就會使用先前呼叫時所產生的亂數值當成新的亂數種子以產生新的亂數值。

在使用 Rnd 之前，最好先呼叫 Randomize 陳述式，但不要給任何引數，如此便會以作業系統的時間當作亂數種子來起始亂數產生器。

若想產生在某個範圍內(非 0 到 1)的亂數值，可使用下列公式：

Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

上述公式中，upperbound 是亂數範圍的上限，而 lowerbound 則是亂數的下限。

附註   若想得到重覆的亂數序列，可以在呼叫 Randomize 之前先呼叫 Rnd 並且傳入一小於 0 的引數值。光是用同樣的亂數種子呼叫 Randomize 兩次的話，並不會得到兩次相同的亂數序列。


Sgn 函數

��� [image] ���

傳回一個型態為 Variant(Integer)的值，其內容為引數的正負號。

語法

Sgn(number)

必要引數 number 可以是任何數值運算式。

傳回值

如果 number 為	Sgn 傳回
大於 0	1
等於 0	0
小於 0	-1
請注意

引數 number 的正負號便是了 Sgn 函數的傳回值。


Sin 函數

��� [image] ���

傳回一型態為 Double 的值，其內容為引數的 sine(正弦函數)值。

語法

Sin(number)

必要引數 number 可以是一型態為Double 的值，或任何數值運算式，其值代表一個角度，以弧度為單位。

請注意

Sin 函數的引數值代表一角度，其傳回值為該角度之「另一銳角之鄰邊除以對邊」的值。

傳回值的範圍在 -1 到 1 之間。

「角度」與「弧度」的轉換方法為：將「角度」乘以 pi/180 即為「弧度」。 反過來將「弧度」乘以 180/pi 便得「角度」。


Sqr 函數

��� [image] ���

傳回一型態為 Double 的值，內容為引數的平方根。

語法

Sqr(number)

必要引數 number 可以是一型態為 Double 的數值或任何數值運算式，只要引數值大於或等於 0 即可。


Tan 函數

��� [image] ���

傳回一型態為 Double 的值，其內容為引數的「正切」(tangent)函數值。

語法

Tan(number)

必要引數 number 可以是一型態為Double 的值，或任何數值運算式，其值代表一個角度，以「弧度」為單位。

請注意

Tan 的引數值代表一角度，其傳回值為其「對邊除以連接直角的鄰邊」的值。

「角度」與「弧度」的轉換方法為：將「角度」乘以pi/180即為「弧度」。 反過來將「弧度」乘以 180/pi 便得「角度」。


可推導數學函數

���

下表為非基本數學函數，所有列出的非基本數學函數皆可由基本數學函數導出：

函數	由「基本」函數導出之公式
Secant(正割)	Sec(X) = 1 / Cos(X)
Cosecant(餘割)	Cosec(X) = 1 / Sin(X)
Cotangent(餘切)	Cotan(X) = 1 / Tan(X)
Inverse Sine (反正弦)	Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Inverse Cosine (反餘弦)	Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Inverse Secant (反正割)	Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) - 1) * (2 * Atn(1))
Inverse Cosecant (反餘割)	Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))
Inverse Cotangent (反餘切)	Arccotan(X) = Atn(X) + 2 * Atn(1)
Hyperbolic Sine （超正弦)	HSin(X) = (Exp(X) - Exp(-X)) / 2
Hyperbolic Cosine (超餘弦)	HCos(X) = (Exp(X) + Exp(-X)) / 2
Hyperbolic Tangent (超正切)	HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))
Hyperbolic Secant (超正割)	HSec(X) = 2 / (Exp(X) + Exp(-X))
Hyperbolic Cosecant(超餘割)	HCosec(X) = 2 / (Exp(X) - Exp(-X))
Hyperbolic Cotangent(超餘切)	HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))
Inverse Hyperbolic Sine(反超正弦)	HArcsin(X) = Log(X + Sqr(X * X + 1))
Inverse Hyperbolic Cosine(反超餘弦)	HArccos(X) = Log(X + Sqr(X * X - 1))
Inverse Hyperbolic Tangent(反超正切)	HArctan(X) = Log((1 + X) / (1 - X)) / 2
Inverse Hyperbolic Secant(反超正割)	HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Inverse Hyperbolic Cosecant	HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Inverse Hyperbolic Cotangent (反超餘切)	HArccotan(X) = Log((X + 1) / (X - 1)) / 2
以 N 為底的對數值	LogN(X) = Log(X) / Log(N)


Add 方法範例

本範例使用 Add 方法將 Inst 物件 (物件類別 Class1 之執行個體，其中包含一個 InstanceName Public 變數) 加到 MyClasses 集合物件中。若要觀察程式的運作，加入一個物件類別模組，並在模組層級中宣告一個公用變數 InstanceName (鍵入 Public InstanceName) 來儲存每個執行個體的名稱。物件類別名稱就用預設的 [Class1]，然後將下列程式碼複製到某個表單模組的 Form_Load 事件程序中。

Dim MyClasses As New Collection	' 建立集合物件。

Dim Num As Integer	' 定義計數變數。

Dim Msg

Dim TheName	' 用來儲存使用者所指定的名稱用之變數。

Do

Dim Inst As New Class1	' 建立 Class1 的新執行個體。

Num = Num + 1	' 將計數變數加一，並讓使用者輸入名稱。

Msg = "Please enter a name for this object." & Chr(13) _

 & "Press Cancel to see names in collection."

TheName = InputBox(Msg, "Name the Collection Items")

Inst.InstanceName = TheName	' 將輸入的名稱存到物件的執行個體中。

' 如果名稱不是空字串，則將該執行個體加到集合物件中。

If Inst.InstanceName <> "" Then

' 將該執行個體加到集合物件中。

MyClasses.Add item := Inst, key := CStr(Num)

End If

' 釋放對目前執行個體的引用，以產生下一個。

Set Inst = Nothing

Loop Until TheName = ""

For Each x In MyClasses

MsgBox x.instancename, , "Instance Name"

Next


Clear 方法範例

本範例使用 Err 物件的 Clear 方法來將 Err 物件之數值屬性清為零，並將其字串屬性清為空字串。如果範例中並沒有使用 Clear 方法的話，每執行一次迴圈便會顯示一次錯誤訊息 (發生錯誤之後)，不論程式中的計算結果是否真的有錯誤。您可以逐步執行程式碼，以觀察其結果。

Dim Result(10) As Integer	' 宣告陣列變數。

Dim indx

On Error Resume Next	' 將錯誤處理的方式改為 [繼續下一行]。

Do Until indx = 10

' 下面計算若有錯誤發生，便顯示錯誤訊息。

Result(indx) = Rnd * indx * 20000

If Err.Number <> 0 Then

MsgBox Err, , "Error Generated: ", Err.HelpFile, Err.HelpContext

Err.Clear	' 清除 Err 物件的屬性。

End If

indx = indx + 1

Loop


Item 方法範例

本範例使用 Item 方法來取得集合物件中物件的引用。範例中假設 Birthdays 為 Collection 物件，下列程式碼是使用 [SmithBill] 及 [SmithAdam] 為 index 引數，來從集合物件中取出代表 Bill Smith 的生日及 Adam Smith 的生日的物件引用。請注意，範例中的第一次呼叫明確的指定 Item 方法，但第二次則否。兩次呼叫都會成功，因為 Item 方法即為 Collection 的預設方法。範例中使用 Set指定給 SmithBillBD 及 SmithAdamBD 物件的引用，可以用來存取該物件的屬性及方法。若要試用本範例程式，請自行建立一個集合物件，並至少加入引用到的兩個物件。

Dim SmithBillBD As Object

Dim SmithAdamBD As Object

Dim Birthdays

Set SmithBillBD = Birthdays.Item("SmithBill")

Set SmithAdamBD = Birthdays("SmithAdam")


Print 方法範例

使用 Print 方法，本範例在 [立即] 視窗中顯示變數 MyVar 的值。請注意，Print 方法只能配合可顯示文字的物件使用。

Dim MyVar

MyVar = "Come see me in the Immediate pane."

Debug.Print MyVar


Raise 方法範例

本範例使用 Err 物件的 Raise 方法在以 Visual Basic 寫成的 Automation 物件中產生錯誤，該物件的程式代碼為 MyProj.MyObject。 在 Macintosh 中，預設磁碟機名為「HD」，且路徑名單元由冒號而不是反斜線分隔。

Const MyContextID = 1010407	' 定義說明主題代碼的常數。

Function TestName(CurrentName, NewName)

If Instr(NewName, "bob") Then	' 檢查 NewName 的正確性。

' 產生一個例外

Err.Raise vbObjectError + 513, "MyProj.MyObject", _

"No ""bob"" allowed in your name", "c:\MyProj\MyHelp.Hlp", _

MyContextID

End If

End Function


Remove 方法範例

本範例示範如何使用 Remove 方法來將 Collection 物件 (範例中的名稱為 MyClasses) 中的物件移除。範例中在迴圈內每次都將第一個物件移除。

Dim Num, MyClasses

For Num = 1 To MyClasses.Count

MyClasses.Remove 1	' 將第一個物件移除

' 直到所有物件都移除掉為止。

Next Num


Add 方法

��� [image] ��� [image] ���

新增一個成員到 Collection 物件。

語法

object.Add item, key, before, after

此 Add 方法的語法具有以下的物件定位項和指名引數：

單元	說明
object	必要引數。物件運算式，用來指定物件。
item	必要引數。任意型態的運算式，用來表示加到集合中之成員。
key	選擇性引數。單一字串運算式，用來當索引字串，取代以位置來當索引以存取集合中的成員。
Before	選擇性引數。為運算式，表示在集合中的相對位置。成員會被安置在集合中 before 引數所確認的成員之前。如果其為一數值運算式，before 必須是一介於 1 和集合Count 屬性值之間的數字；如果其為一字串運算式，當加入一被引用的成員到集合時，before 必須和key  值一致。您可以設定一 before 位置或 after 位置，但不能兩者均存在。
After	選擇性引數。 運算式，表示在集合中的相對位置。成員會被安置在集合中 after 引數所確認的成員之前。如果其為一數值運算式，after 必須是一介於 1 和集合 Count 屬性值之間的數字。如果其為一字串運算式，當加入一被引用的成員到集合時，after 必須和 key 值一致。您可以設定一 before 位置或 after 位置，但不能兩者均存在。
請注意

無論 before 或 after 引數是字串運算式或數值運算式，它均必須引用一集合中存在的成員，否則將產生錯誤。

如果設定的 key 和集合中成員的 key 發生重複的話，也會發生錯誤。


Clear 方法

��� [image] ��� [image] ���

清除 Err 物件所有的屬性設定。

語法

object.Clear

objec 需為 Err 物件。

請注意

在掌握一錯誤之後，可使用 Clear 來清除 Err 物件。例如，當您使用 On Error Resume Next 錯誤處理常式來處理錯誤時即可使用。每回只要執行以下陳述式，就會自動呼叫 Clear 方法：

•	任何型態的 Resume 陳述式。

•	Exit Sub, Exit Function, Exit Property

•	任何 On Error 陳述式。

附註  當處理在存取其他物件所產生的錯誤時，On Error Resume Next 會比 On Error GoTo 更好用。在和每一物件有作用之後，可檢查 Err 以消除有關此碼到底存取何物件的不明處。您可以在 Err.Number 中得知是物件產生的錯誤碼，也可用 Err.Source 來了解是那個物件產生錯誤。


Item 方法

��� [image] ��� [image] ���

利用位置或索引鍵傳回 Collection 物件的某指定成員。

語法

object.Item(index)

Item 方法的語法具有以下物件定位項和單元：

單元	說明
object	必要引數。物件運算式，用來指定物件。
index	必要引數。為一運算式，用來指出集合中成員的位置。如果是數值運算式，index 必須為從 1 到集合Count 屬性值之間的數值。如果是字串運算式，當加入一被引用的成員到集合時，index 必須和 key 引數一致。
請注意

如果 index 值無法配合任何既有的集合成員，就會發生錯誤。

Item 方法是集合的預設方法。因此，以下兩行程式碼是相同的：

Print MyCollection(1)

Print MyCollection.Item(1)


Print 方法

��� [image] ��� [image] ���

在 Immediate 視窗中顯示文字。

語法

object.Print [outputlist]

Print 方法的語法具有以下的物件定位項和單元：

單元	說明
object	必要引數。物件運算式，用來指定物件。
outputlist	選擇性引數。欲顯示的運算式，可以是一長串。如果忽略，會顯示一列空白。
此 outputlist 引數具有以下的語法和單元：

{Spc(n) | Tab(n)} expression charpos

單元	說明
Spc(n)	選擇性引數。使用此功能可插入空白字元到輸出文字中，而n 為空白字元數。
Tab(n)	選擇性引數。用來移動文字插入點到適當行位置，而 n 為移動行數。如果Tab(n) 中沒有引數的話 ，那麼插入點會移到下一個顯示區的開頭位置。
expression	選擇性引數。顯示數值運算式或字串運算式。
charpos	選擇性引數。指定下個字元的插入點。使用分號 (;) 的話，插入點會接在上個字元所顯示地方的後面。使用 Tab(n) 的話，會移動插入點到某行。使用沒有引數的 Tab(n) 的話，會移動插入點到到下一個顯示區的開頭位置。如果省略 charpos，下一字元將會出現在下一列。
請注意

可以用空白或分號來分開多重運算式。

所有輸出到 Immediate 視窗的資料會依系統的地區設定，以小數點分隔符號適當格式化，而其關鍵字會依主應用程式的語言輸出。

對於 Boolean 資料，將以 True 或 False 顯示。True 和 False 關鍵字的翻譯將依據主應用程式的地區設定。

Date 資料的寫法是使用系統所能辨識的標準簡單日期格式。當日期或時間中的單元有遺漏或空白時，只會顯示有提供的部份。

如果 outputlist 資料是 Empty，那不會顯示任何東西。然而，如果 outputlist 資料是 Null，那麼將會輸出 Null。Null 關鍵字在輸出時會適當地翻譯出來。

對於錯誤資料，將以 Error errorcode 輸出。Error 關鍵字在輸出時會適當地翻譯出來。

如果在一擁有預設顯示空間的模組之外使用此方法的話，就需要 object。例如，如果沒有指定一 object ，在一般模組上呼叫此方法的話，將會發生錯誤，但如果在一表單模組上呼叫的話，則會在表單上顯示 outputlist。

請注意

因為 Print 方法是依比例顯示字元，所以字元數和所佔據的行寬度之間無關。例如，像字母「W」佔據了超過一固定行寬，而像「i」則佔較少。如要使用較平均字元來得寬的空間的話，您必須保留足夠的行空間。另外，您也可以使用有固定字元寬度的字型 (像 Courier ) 來確保每一字元均只佔一行寬。


Raise 方法

��� [image] ��� [image] ���

產生一執行階段錯誤。

語法

object.Raise number, source, description, helpfile, helpcontext

Raise 方法的語法具有以下的物件定位項和指名引數：

引數	說明
object	必要引數。僅 Err 物件有效。
number	必要引數。為 Long整數，用來確認錯誤種類。Visual Basic 錯誤 ( 包括Visual Basic 所定義的和使用者定義的錯誤 ) 範圍在 0 - 65535 內。從 0�}512的範圍保留為系統錯誤；從 513�}65535的範圍可以作為使用者自定的錯誤。當在一物件類別模組中設定 Number 屬性到您自己的錯誤代碼時，您可增加您的錯誤碼數字到 vbObjectError 常數。例如，欲產生錯誤代碼 513，可指派 vbObjectError + 513 到 Number 屬性。
source	選擇性引數。為字串運算式，指定產生錯誤的物件或應用程式。當為一物件設定此屬性，可使用 project.class 形式。如果沒有指示 source 的話，那麼會使用目前 Visual Basic 專案的程式設計識別碼。
description	選擇性引數。為字串運算式，用來描述錯誤。如果沒有描述的話，會檢查Number的值。如果錯誤可以對映到一 Visual Basic執行階段錯誤碼，那麼 Error 函數將會傳回字串當作Description。如果沒有 Visual Basic 錯誤和 Number 一致的話，那麼將使用 [應用程式定義的錯誤或物件定義的錯誤] 的訊息。
helpfile	選擇性引數。 為此錯誤之說明檔案的完整路徑。如果沒有指定，Visual Basic 會使用 Visual Basic 說明檔案的完整路徑。
helpcontext	選擇性引數。為文字 ID，用來指示 helpfile 內有關此錯誤之說明的標題位置。如果省略，會使用與此錯誤相符之 Number 屬性的 Visual Basic 說明檔案文字 ID。
請注意

所有這些引數除了 number 外皆為選擇性的。如果您使用 Raise 方法卻沒給一些引數，並且 Err 物件的屬性設定含有未清除的值，那麼這些值將視為您錯誤所有。

Raise 用來產生執行階段錯誤，並且能取代使用 Error 陳述式。當您寫類別模組時，以 Raise 來產生錯誤是相當好用的，因為 Err 物件能提供比使用 Error 陳述式更豐富的資訊。例如，使用 Raise 方法的話， Source 屬性可以指示產生錯誤的來源，參考到此錯誤的線上說明。


Remove 方法

��� [image] ��� [image] ���

把成員從 Collection 物件中移除。

語法

object.Remove index

Remove 方法的語法具有以下的物件定位項和單元：

單元	說明
object	必要引數。為物件運算式，用來指定物件。
Index	必要引數。為運算式，用來指定集合中成員的位置。如果是數值運算式，index 必須是一介於 1 和集合 Count 屬性值之間的數字。如果是字串運算式的話，當加入一被引用的成員到集合時，index 必須和 key引數一致。
請注意

如果當作 index 的值沒有和一存在的集合成員相配的話，將發生錯誤。


AppActivate 陳述式範例

本範例示範使用 AppActivate 陳述式來啟動應用程式的各種用法。範例中用到的 Shell 陳述式均假設該應用程式已經存在指定的路徑中。在 Macintosh 中，預設磁碟機名為「HD」，並且路徑名單元由冒號而不是反斜線分隔。

Dim MyAppID, ReturnValue

AppActivate "Microsoft Word"	' 啟動 Microsoft

' Word。

' AppActivate 也可以利用 Shell 函數的傳回值來啟動程式。

MyAppID = Shell("C:\WORD\WINWORD.EXE", 1)	' 執行 Microsoft Word。

AppActivate MyAppID	' 啟動 Microsoft

' Word。

' 您也可以使用 Shell 函數的傳回值。

ReturnValue = Shell("c:\EXCEL\EXCEL.EXE",1)	' 執行 Microsoft Excel。

AppActivate ReturnValue	' 啟動 Microsoft

' Excel。


Beep 陳述式範例

本範例使用 Beep 陳述式讓電腦連續響三聲。

Dim I

For I = 1 To 3	' 執行迴圈 3 次。

Beep	' 發出一聲。

Next I


Command 函數範例

本範例在某個函數中使用 Command 函數來取得指令列引數，並將指令列引數以 Variant 型態之陣列傳回。在 Microsoft Office 中不可用。

Function GetCommandLine(Optional MaxArgs)

'宣告變數。

Dim C, CmdLine, CmdLnLen, InArg, I, NumArgs

'檢查 MaxArgs 引數是否有傳入。

If IsMissing(MaxArgs) Then MaxArgs = 10

' 使陣列的大小相同。

ReDim ArgArray(MaxArgs)

NumArgs = 0: InArg = False

'取得指令列引數。

CmdLine = Command()

CmdLnLen = Len(CmdLine)

'以一次一個字元的方式取出指令列引數。

For I = 1 To CmdLnLen

C = Mid(CmdLine, I, 1)

'檢查是否為 space 或 tab。

If (C <> " " And C <> vbTab) Then

'若非 space，也非 tab 鍵。

'檢查是否為引數內含之字元。

If Not InArg Then

'新的引數。

'檢查引數數目是否超過。

If NumArgs = MaxArgs Then Exit For

NumArgs = NumArgs + 1

InArg = True

End If

'將字元連結到目前引數中。

ArgArray(NumArgs) = ArgArray(NumArgs) & C

Else

'發現 space 或 tab。

'將 InArg 旗標值設為 False。

InArg = False

End If

Next I

'重新調整陣列大小使其剛好符合引數個數。

ReDim Preserve ArgArray(NumArgs)

'將陣列傳回。

GetCommandLine = ArgArray()

End Function


InputBox 函數範例

本範例示範使用 InputBox 函數來顯示使用者輸入資料的不同用法。如果省略 x 及 y 座標值，對話方塊會自動放置在兩個座標的正中央處。若使用者輸入完後按一下 [確定] 按鈕或是 ENTER 按鍵，變數 MyValue 儲存使用者輸入的資料。如果使用者按一下 [取消] 按鈕，則傳回一空字串。

Dim Message, Title, Default, MyValue

Message = "Enter a value between 1 and 3"	' 設定提示訊息。

Title = "InputBox Demo"	' 設定標題。

Default = "1"	' 設定預設值。

' 顯示訊息、標題及預設值。

MyValue = InputBox(Message, Title, Default)

' 若指定說明檔及內容代碼， [說明] 按鈕便會自動出現在對話方塊中。

MyValue = InputBox(Message, Title, , , , "DEMO.HLP", 10)

' 在 100, 100 的位置顯示對話方塊。

MyValue = InputBox(Message, Title, Default, 100, 100)


MsgBox 函數範例

本範例使用 MsgBox 函數可在對話方塊中顯示一個嚴重錯誤訊息，對話方塊並提供 [是] 及 [否] 按鈕供使用者選擇。範例中預設的按鈕為 [否]，MsgBox 函數的傳回值視使用者按哪一個鈕而定。本範例假設 DEMO.HLP 為一已存在之說明檔，其中有一個內容代碼為 1000。

Dim Msg, Style, Title, Help, Ctxt, Response, MyString

Msg = "Do you want to continue ?"	' 定義訊息。

Style = vbYesNo + vbCritical + vbDefaultButton2	' 定義按鈕。

Title = "MsgBox Demonstration"	' 定義標題。

Help = "DEMO.HLP"	' 定義說明檔。

Ctxt = 1000	' 定義內容代碼。

' 顯示訊息。

Response = MsgBox(Msg, Style, Title, Help, Ctxt)

If Response = vbYes Then	' 若使用者按下 [是]。

MyString = "Yes"	' 產生相對回應。

Else	' 若使用者按下 [否]。

MyString = "No"	' 產生相對回應。

End If


SendKeys 陳述式範例

本範例使用 Shell 函數來執行 Microsoft Windows 所附的小算盤程式；使用 SendKeys 陳述式來按下小算盤的某些數字鍵，最後結束小算盤。(若要觀察範例執行過程，可將下列程式碼複製到您的程式裏的一個副程式中，再執行您的程式即可。因為範例中用到的 AppActivate 會將輸入駐點轉移到小算盤程式，故本範例不能以單步模式來執行。) 在 Macintosh 中，使用 Macintosh 應用程式接受鍵盤輸入，而不是 Windows小算盤。

Dim ReturnValue, I

ReturnValue = Shell("CALC.EXE", 1)	' 執行小算盤。

AppActivate ReturnValue 	' 啟動小算盤。

For I = 1 To 100	' 設定迴圈執行次數。

SendKeys I & "{+}", True	' 按下按鍵給小算盤

Next I	' 將所有 I 值相加。

SendKeys "=", True	' 取得總和。

SendKeys "%{F4}", True	' 按 ALT+F4 來結束小算盤。


AppActivate 陳述式

��� [image] ���

啟動一應用程式視窗。

語法

AppActivate title[, wait]

AppActivate 陳述式的語法具有以下幾個指名引數：

單元	說明
title	必要引數。字串運算式，用來指定所要啟動應用程式之視窗的標題。可以用 Shell 函數所傳回的工作識別碼來取代 title，以啟動應用程式。
wait	選擇性引數。用來指定呼叫的應用程式在啟動另一個應用程式之前，是否須有駐點的 Boolean 值。如果是 False (預設)，則指定的應用程式立刻啟動，即使呼叫的應用程式沒有取得駐點；如果是 True，則呼叫的應用程式會等到取得駐點後，才會啟動指定的應用程式。
請注意

AppActivate 陳述式會將駐點移到指名的應用程式或視窗，但對其是否最大化或最小化，並不會有影響。當使用者採取某些動作來改變駐點或將視窗關閉時，駐點便會離開使用中的應用程式。您可用 Shell 函數來啟動一應用程式並設定視窗樣式。

在決定要啟動那個應用程式時，title 會被拿來與所有執行中的應用程式之標題字串做比較。如果沒有完全符合者，便會啟動以 title 為其標題字串開頭的應用程式。如果以 title 命名的應用程式之執行個體有很多個的話，則會任意啟動某個執行個體。


Beep 陳述式

��� [image] ���

透過系統揚聲器發出聲音。

語法

Beep

請注意

透過硬體和系統軟體發出頻繁，持續的蜂鳴聲，並因電腦不同而不同。


Command 函數

��� [image] ���

傳回命令列的引數部分，命令列是用來啟動 Microsoft Visual Basic 或以 Visual Basic 開發的程式。Visual Basic Command函數在Microsoft Office應用程式中不可用。

語法

Command

請注意

當以命令列啟動 Visual Basic 時，跟在 /cmd 之後的部分用來做為命令列引數。在以下範例中，cmdlineargs 代表以 Command 函數傳回的引數資訊。

VB /cmd cmdlineargs

對使用 Visual Basic 開發並編譯成執行檔的程式來說，Command 會傳回應用程式名稱之後的引數，例如：

MyApp cmdlineargs

要了解如何改變命列列引數，請參閱線上說明中的 [命令列引數]。


InputBox 函數

��� [image] ���

顯示一對話方塊來做為提示，等使用者輸入文字或按下按鈕，並傳回包含文字方塊內容的String。

語法

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

InputBox 函數的語法具有以下幾個指名引數：

單元	說明
prompt	必要引數。用來做為對話方塊訊息的字串運算式。prompt 的最大長度大約是 1024 個字元，由使用字元的寬度來決定。如果 prompt 超過一行，您可以在各行之間用復位字元(Chr(13))、換行字元(Chr(10))或是復位字元與換行字元的組合 (Chr(13) & Chr(10)) 來做區隔。
title	選擇性引數。顯示在對話方塊標題列的字串運算式。如果沒有 title，則以應用程式的名稱做為標題。
default	選擇性引數。顯示在文字方塊中的字串運算式，在沒有提供其他輸入時做為預設值。如果沒有 default，則文字方塊就是空白的。
xpos	選擇性引數。成對指定的數值運算式，用來指定對話方塊的左緣與螢幕左緣的水平距離。如果沒有 xpos，則對話方塊會出現在水平方向的中間。
ypos	選擇性引數。成對指定的數值運算式，用來指定對話方塊的上緣與螢幕的上緣的距離。如果沒有 ypos，對話方塊會放置於螢幕垂直方向三分之一的位置。
helpfile	選擇性引數。字串運算式，用來指定對話方塊文字感應說明的說明檔案。如果指定了 helpfile，則您也必須指定 context。
context	選擇性引數。數值運算式，由說明檔案的作者指定給某個說明主題的說明主題代碼 。如果指定了 context，則也必須指定 helpfile。
請注意

如果同時提供 helpfile 與 context，使用者可以按 F1 (Windows) 或 HELP (Macintosh) 來查看與 context 相關的說明主題。某些主應用程式，例如，Microsoft Excel，也會在對話方塊中加上一個 Help 按鈕。如果使用者按了一下 OK 或是按了 ENTER ，則 InputBox 函數會傳回文字方塊中的內容；如果使用者按了一下 Cancel，則此函數會傳回一個長度為零的字串 ("")。

附註   若要指定第一指名引數以外的引數，您必須在運算式中使用 InputBox。若要忽略某些引數，您必須加入對應的逗號做為間隔。


MsgBox 函數

��� [image] ���

將訊息顯示在對話方塊中，等使用者按下按鈕，並傳回一 Integer 來指示使用者按下的是那一個鈕。

語法

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

MsgBox 函數的語法具有以下幾個指名引數：

單元	說明
prompt	必要引數。做為顯示在對話方塊中之訊息的字串運算式。prompt 的最大長度大約是1024個字元，由使用字元的寬度決定。如果 prompt 超過一行，您可以在每一行之間用復位字元(Chr(13))、換行字元 (Chr(10)) 或是復位字元與換行字元的組合 (Chr(13) & Chr(10)) 來做區隔。
buttons	選擇性引數。數值運算式，用來指出顯示按鈕的數目及形式，使用的圖示樣式，預設按鈕為何，以及訊息方塊的強制回應等。如果沒有指定，則 buttons 的預設值是 0。
title	選擇性引數。顯示在對話方塊標題列中的字串運算式。如果沒有 title，則將應用程式的名稱放在標題列中。
helpfile	選擇性引數。用來辨識提供給對話方塊文字感應說明的說明檔案的字串運算式。如果指定了 helpfile，則也必須指定 context。
context	選擇性引數。數值運算式，由說明檔案的作者來指定適當的說明主題的說明主題代碼 。如果指定了 context，則也必須指定 helpfile。
設定

buttons 引數的設定有以下幾個：

常數	值	說明
vbOKOnly	0	只顯示 OK 按鈕。
vbOKCancel	1	顯示 OK 及 Cancel 按鈕。
vbAbortRetryIgnore	2	顯示 Abort、 Retry 及 Ignore 按鈕。
vbYesNoCancel	3	顯示 Yes、No 及 Cancel 按鈕。
vbYesNo	4	顯示 Yes 及 No 按鈕。
vbRetryCancel	5	顯示 Retry 及 Cancel 按鈕。
vbCritical	16	顯示 Critical Message 圖示。
vbQuestion	32	顯示 Warning Query 圖示。
vbExclamation	48	顯示 Warning Message 圖示。
vbInformation	64	顯示 Information Message 圖示。
vbDefaultButton1	0	第一個按鈕是預設值。
vbDefaultButton2	256	第二個按鈕 是預設值。
vbDefaultButton3	512	第三個按鈕是預設值。
vbDefaultButton4	768	第四個按鈕是預設值。
vbApplicationModal	0	應用程式強制回應：使用者必須先回應此訊息方塊，才能在目前的應用程式中繼續工作。
vbSystemModal	4096	系統強制回應；所有的應用程式都會暫停，直到使用者回應此訊息方塊。
vbMsgBoxHelpButton	16384	將 Help按鈕新增到訊息方塊中。
VbMsgBoxSetForeground	65536	指定訊息方塊視窗作為前景視窗。
vbMsgBoxRight	524288	文字為靠右對齊。
vbMsgBoxRtlReading	1048576	指定文字應為在希伯來和阿拉伯語系統中的從右到左顯示。
第一組值 (0-5) 用來決定對話方塊中按鈕的形式與數目；第二組 (16, 32, 48, 64) 用來決定圖示的樣式；第三組 (0, 256, 512) 決定出那一個按鈕是預設值；而第四組 (0, 4096) 則決定訊息方塊的強制回應性。將這些數字相加以產生 buttons 引數值的時候，您只能由每組取用一個數字。

附註   這些常數都是 Visual Basic for Applications (VBA) 所指定的。您可以在程式碼中的任何位置使用這些常數名稱，而不必指定實際的數值。

傳回值

常數	值	描述
vbOK	1	OK
vbCancel	2	Cancel
vbAbort	3	Abort
vbRetry	4	Retry
vbIgnore	5	Ignore
vbYes	6	Yes
vbNo	7	No
請注意

如果同時指定了 helpfile 與 context，使用者便可以按 F1 (Windows) or HELP (Macintosh) 來查看與 context 相關的說明主題。某些主應用程式，例如，Microsoft Excel，也會在對話方塊中加上一個 Help 按鈕。

如果對話方塊有顯示 Cancel 按鈕，則按下 ESC 鍵與按下 Cancel 按鈕效果相同。如果對話方塊中有 Help 按鈕，則對話方塊中提供有文字感應說明。無論如何，在其他按鈕中的一個被按下前，不會傳回任何值。

附註   若要指定第一指名引數以外的引數，您必須在運算式中使用 MsgBox。若要忽略某些引數，您必須加入對應的逗號做為間隔。


SendKeys 陳述式

��� [image] ���

送出一或多個按鍵訊息到使用中的視窗，就如同在鍵盤上按下的一樣。

語法

SendKeys string[, wait]

SendKeys 陳述式的語法具有以下幾個指名引數：

單元	說明
string	必要引數。指定要送出之按鍵訊息的字串運算式。
Wait	選擇性引數。指定等待模式的 Boolean 值。如果是 False(預設值)，則駐點在按鍵送出後立刻回到程序。如果是 True，按鍵訊息必須在駐點回到程序前加以處理。
請注意

每個按鍵由一或多個字元表示。若要指定單一鍵盤字元，則必須按字元本身的鍵。例如，要表示字母 A，可以用"A"做為 string。若要表示一個以上的字元，就必須在字元後面直接加上另一個字元。例如，要表示 A、 B 及 C，可用 "ABC"做為 string。

加號(+)、脫字符號(^)、百分比符號(%)、重音符號(~)及圓括號 ( ) 對 SendKeys 來說具有特別的意義。要指定這些字元的話，則要將之放在大括號({})當中。例如，要指定正號，可用{+}表示。方括號([ ])對 SendKeys 並不具有任何意義，但必須將它們放在大括號中。在其他的應用程式中，方括號有特殊意義，並在動態資料交換(DDE)的時候具有重要的意義。要指定大括號字元，則使用{{}及{}}。

若要指定那些按鍵後不會顯示的字元，例如 ENTER 或 TAB，以及那些表示動作而非字元的按鍵，請使用下列的碼：

按鍵	碼
BACKSPACE	{BACKSPACE}, {BS}, or {BKSP}
BREAK	{BREAK}
CAPS LOCK	{CAPSLOCK}
DEL or DELETE	{DELETE} or {DEL}
DOWN ARROW	{DOWN}
END	{END}
ENTER	{ENTER}or ~
ESC	{ESC}
HELP	{HELP}
HOME	{HOME}
INS or INSERT	{INSERT} or {INS}
LEFT ARROW	{LEFT}
NUM LOCK	{NUMLOCK}
PAGE DOWN	{PGDN}
PAGE UP	{PGUP}
PRINT SCREEN	{PRTSC}
RIGHT ARROW	{RIGHT}
SCROLL LOCK	{SCROLLLOCK}
TAB	{TAB}
UP ARROW	{UP}
F1	{F1}
F2	{F2}
F3	{F3}
F4	{F4}
F5	{F5}
F6	{F6}
F7	{F7}
F8	{F8}
F9	{F9}
F10	{F10}
F11	{F11}
F12	{F12}
F13	{F13}
F14	{F14}
F15	{F15}
F16	{F16}
若要指定結合 SHIFT、CTRL 及 ALT 等按鍵的組合鍵，可在這些按鍵碼的前面放置一或多個以下的碼：

按鍵	碼
SHIFT	+
CTRL	^
ALT	%
若要指定在其他的按鍵按下時同時按住 SHIFT、CTRL、及 ALT 的任意組合，可把那些按鍵的碼放在括號當中。例如，要指定按下 E 與 C 的時候同時有按住 SHIFT 鍵，使用"+(EC)"。要指定在按下 E 的時候同時按住 SHIFT 鍵，接著按 C 而不按住 SHIFT，則使用"+EC"。

要指定重複鍵，則使用{key number}的形式。您必須在 key 與 number 之間放一個空格。例如，{LEFT 42}意指按下 LEFT ARROW 按鍵 42 次；{h 10} 則是指按 H 10次。

附註   您不能用 SendKeys 來送出按鍵訊息到一個並非設計在 Microsoft Windows 或Macintosh 下執行的應用程式。Sendkeys 也無法送出 PRINT SCREEN 按鍵{PRTSC} 到任何應用程式。


字元集 (0 -127)

���

0	•	32	[space]	64	@	96	`
1	•	33	!	65	A	97	a
2	•	34	"	66	B	98	b
3	•	35	#	67	C	99	c
4	•	36	$	68	D	100	d
5	•	37	%	69	E	101	e
6	•	38	&	70	F	102	f
7	•	39	'	71	G	103	g
8	* *	40	(	72	H	104	h
9	* *	41	)	73	I	105	i
10	* *	42	*	74	J	106	j
11	•	43	+	75	K	107	k
12	•	44	,	76	L	108	l
13	* *	45	-	77	M	109	m
14	•	46	.	78	N	110	n
15	•	47	/	79	O	111	o
16	•	48	0	80	P	112	p
17	•	49	1	81	Q	113	q
18	•	50	2	82	R	114	r
19	•	51	3	83	S	115	s
20	•	52	4	84	T	116	t
21	•	53	5	85	U	117	u
22	•	54	6	86	V	118	v
23	•	55	7	87	W	119	w
24	•	56	8	88	X	120	x
25	•	57	9	89	Y	121	y
26	•	58	:	90	Z	122	z
27	•	59	;	91	[	123	{
28	•	60	<	92	\	124	|
29	•	61	=	93	]	125	}
30	•	62	>	94	^	126	~
31	•	63	?	95	_	127	•
•	Microsoft Windows.不支援這些字元。

* *	  8、9、10 和 13 分別代表 backspace、tab、換行和復位字元。它們並沒有特定的顯示外觀，但會依不同的應用程式，而對文字顯示有不同的影響。


IMEStatus 函數

��� [image] ���

傳回一個 Integer，用來指定目前 Microsoft Windows 的輸入法 (IME) 模式；只適用於東亞區的版本。

語法

IMEStatus

傳回值

下列為日本地區的傳回值：

常數	值	說明
vbIMEModeNoControl	0	無法控制 IME (預設)
vbIMEModeOn	1	開啟 IME
vbIMEModeOff	2	關閉 IME
vbIMEModeDisable	3	未啟用 IME
vbIMEModeHiragana	4	完全寬度 Hiragana 模式
vbIMEModeKatakana	5	完全寬度 Katakana 模式
vbIMEModeKatakanaHalf	6	半寬度 Katakana 模式
vbIMEModeAlphaFull	7	完全寬度 Alphanumeric 模式
vbIMEModeAlpha	8	半寬度 Alphanumeric 模式
下列為韓國地區的傳回值：

常數	值	說明
vbIMEModeAlphaFull	7	完全寬度 Alphanumeric 模式
vbIMEModeAlpha	8	半寬度 Alphanumeric 模式
vbIMEModeHangulFull	9	完全寬度 Hangul 模式
vbIMEModeHangul	10	半寬度 Hangul 模式
下列為中文地區的傳回值：

常數	值	說明
vbIMEModeNoControl	0	無法控控制 IME (預設)
vbIMEModeOn	1	開啟 IME
vbIMEModeOff	2	關閉 IME


無法在中斷模式執行程式碼

中斷模式發生於您停止執行程式碼時，這個錯誤具有以下的起因與解決方法：

•	您試圖從「巨集」對話方塊中執行程式，但 Visual Basic 已正在執行程式碼，雖然此時是處於中斷模式。

例如，如果發生語法錯誤或執行階段錯誤，您可能會進入了中斷模式而不自知。請繼續執行中斷的程式碼，或在「巨集」對話方塊中執行程式之前，即終止原先的程式碼。修正此錯誤後請選擇「繼續」，或回到「巨集」對話方塊重新啟動巨集。

詳細資訊，請選取有疑問的項目，然後按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


在不是定義物件類別的執行個體的物件上不能呼叫Friend程序(Error 97)

Friend 程序可以從物件類別外的模組呼叫，但此模組必須與物件類別在同一個專案中。這個錯誤具有以下的起因與解決方法：

•	您試圖呼叫物件類別的 Friend 程序，儘管引用變數的型態是正確的，但是它指向的執行個體不是物件類別中的執行個體。

例如，有兩個物件類別，classics和 classy (實現 classy)，但是您錯誤地將classy的執行個體賦予了 classics的執行個體。

•	試圖跨越程序或執行緒存取 Friend屬性和方法，Friend程序不屬於物件類別的公共介面，所以不能跨程序或執行緒調度。

詳細資訊，請選取有疑問的項目，然後按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


無法產生控制項，導致無法離開設計模式

在您離開設計模式之前，所有物件都需被初始化。這個錯誤具有以下的起因與解決方法：

•	無法建立錯誤訊息對話方塊中指定的控制項。

所有控制項都需被初始化並適當連接後才能執行程式碼。請確定控制項需要的所有檔案都存在。

詳細資訊，請選取有疑問的項目，然後按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


物件不是源 Automation 事件

物件需提供預設的原始介面，您才能為其撰寫事件程序。這個錯誤具有以下的起因與解決方法：

•	您試圖為一個物件撰寫事件程序，但該事件無法用於這個物件。

請查閱物件的說明文件，可能會有關於其他間接的方式的建議，用來處理這個事件。

詳細資訊，請選取有疑問的項目，然後按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


此動作在 DLL 中不允許

���

並非所有的 Visual Basic 陳述式在動態連結程式庫 (DLL)中都是允許的。這個錯誤具有以下的起因與解決方法：

•	您試圖從物件類別建立一個 DLL，但該物件類別含有一個無法從 DLL 執行的陳述式。

請檢查您的物件類別並移除無法於 DLL 中執行的陳述式。例如，End 陳述式

詳細資訊，請選取有疑問的項目，然後按下 F1(在Windows中) 或 HELP (在Macintosh中)。


在 Enum 型態定義外是不正確的

���

Enum 為一資料型態，可用來建立明確的常數群組(稱為列舉值)。這個錯誤具有以下的起因與解決方法：

•	在End Enum定義以外的地方使用了End Enum。

檢查出現在Enum定義的主體和End Enum陳述式之間的任何文字。

詳細資訊，請選取有疑問的項目，然後按下 F1(在Windows中) 或 HELP (在Macintosh中)。


您開啟了一個巨集暫止的文件。

主應用程式可以暫止或啟用巨集。這個錯誤具有以下的起因與解決方法：

•	您開啟了一個巨集暫止的文件。

請關閉該文件，然後用「開啟巨集」重新開啟。

詳細資訊，請選取有疑問的項目，然後按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


包含此符號的程式庫尚未被目前的專案引用，導致該符號未定義。您想立即引用這個程式庫嗎？

型態與物件資訊都內含在程式庫中。這個錯誤具有以下的起因與解決方法：

•	這個符號的定義在型態程式庫中。

若您想將符號定義為包含在程式庫中，請按一下「確定」，以新增引用到程式庫中。

詳細資訊，請選取有疑問的項目，然後按下 F1。


物件沒有 Property Let程序

不能向屬性指定值，除非它有 Property Let方法。這個錯誤具有以下的起因與解決方法：

•	試圖向屬性指定一個值，但它沒有 Property Let 方法。

不能直接向屬性指定值。如果這個物件類別是您建立的，您可用 Property Let 方法來修改其介面。否則，請檢查此元件文件，看看是否有其他間接方法。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


沒有相關的說明主題

並非所有的錯誤都具有相關的說明主題。這個錯誤具有以下的起因與解決方法：

•	出現了一個沒有說明主題的錯誤。

請查閱 Readme 檔案，在此可以找到一些最新的資訊。


無法繼續處理此物件的事件，因為該物件所引發的事件數，已經達到了其事件接收對象，所能處理的上限。(錯誤 96)

物件在同一時間內，只能接受一定數目的事件。這個錯誤具有以下的起因與解決方法：

•	您試圖對一個表單中的控制項，對 WithEvents 變數使用 Set。

您不能在此對 WithEvents 變數使用 Set，因為可接受的事件數目是有限制的。

詳細資訊，請選取有疑問的項目，然後按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


無法在指定的DLL中找到 DLL 進入點

進入點是 DLL (Windows) 或程式碼資源(Macintosh) 程序的名稱或表示該程序的序號。這個錯誤具有以下的起因與解決方法：

•	型態程式庫不正確描述輸入點，也許是拼錯了名稱或不正確的指定序數。

•	請與該型態程式庫的廠商接洽。

詳細資訊，請選取有疑問的項目，然後按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


無法執行指定的程式

製成機器碼執行檔時，必須執行一些其它的程式。這個錯誤有以下的起因和解決方法：

•	系統資源或記憶體不足，不能執行程式碼產生器或連結器。

請盡可能關閉其它執行中的應用程式，以釋放更多的記憶體空間。

•	Visual Basic 安裝不正確。

重裝 Visual Basic。

詳細資訊，請選取有疑問的項目，然後按下 F1 (在Windows中) 或 HELP (在Macintosh中)。


資源型態與名稱重複

Microsoft Windows 資源檔一般含有點陣圖、字串，與其他相關資料。這個錯誤具有以下的起因與解決方法：

•	您在專案中使用的 Windows 資源檔，含有兩個以上相同型態與名稱的資源，或這個檔案含有一個 Visual Basic 自動建立的資源。

請使用其它資源檔，或其重新建立不正確的資源檔，並刪除重複的資源。

詳細資訊，請選取有疑問的項目，然後按下 F1 (在Windows中) 或 HELP (在Macintosh中)。.


屬性或方法呼叫不能包含私有物件的引用，不論是作為引數還是作為傳回值 (Error 98)

私有物件絕不能傳遞到專案外部。下面列出的被禁止的所有情況，可能是產生該錯誤的原因：

•	客戶呼叫了程序外的元件的屬性或方法，並試圖把私有物件的引用作為引數來傳遞。客戶呼叫了程序外的元件的屬性或方法，並且該程序試圖傳回私有物件的引用，或試圖把這樣的引用指定給 ByRef引數。

•	程序外元件對其客戶呼叫回調方法，並試圖傳遞私有物件的引用。

•	程序外元件試圖把私有物件作為正產生的事件的引數來傳遞。

•	客戶試圖把私有物件引用指定給它正處理的事件的 ByRef 引數。

請注意，儘管 Visual Basic 阻止在程序間傳遞非視覺化私有物件的引用，但仍然存在 Visual Basic 不能偵測到這種錯誤的情況，因而也就不能阻止它。私有物件並非用來在專案外部使用。如果把它們傳遞給客戶，就可能會損害程式的穩定性，以及導致其和將來的 Visual Basic 版本不相容。如果必須將自己的私有物件類別傳遞給客戶，則應設定 Instancing 屬性值而不是 Private。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


不允許指定給常數

常數表示的是唯讀值。該錯誤有以下原因和解決方案：

•	試圖把新的值指派給用 Const宣告的變數，或指派給型態程式庫常數。

如果需要賦新的值，宣告一個想要的一般型態變數，並把值指派給該變數。如果需要限定值集的變數，可以用 Enum 陳述式宣告一個列出類型。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


不能有包含選項引數的參數陣列

可以用 ParamArray來定義可接受可變長度引數清單的程序。Optional引數是指呼叫者可提供或忽略該引數而不產生錯誤。該錯誤有以下原因及解決方案：

•	在同一參數清單中同時使用了 ParamArray 和 Optional 關鍵字。

刪除 Optional 或 ParamArray參數。不能在同一參數清單中同時使用這兩個關鍵字。可以對想用的參數清單型態使用任一方法。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


指定的檔案沒有找到

檢查無法尋獲的檔名的訊息。該錯誤有以下原因和解決方案：

•	不能按照指定找到錯誤訊息中的檔名。

請確認磁碟機名、路徑和檔名的指定是否正確。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh).


無效的選項參數型態

不是所有 Visual Basic 型態都允許用作 Optional參數。該錯誤有以下原因和解決方案：

•	用無效的資料型態來定義參數。

例如，不能有使用者定義型態的 Optional參數。也許可以用 Variant 型態的陣列來達到目的地，因為 Variant 陣列的組成項目可儲存不同類型的資料。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


不正確範本

範本的派生物件類別不能作為範本。該錯誤有以下原因和解決方案：

•	試圖建立範本元件，但試圖從範本來派生。

不能從範本派生出範本物件類別。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


只在物件模組中有效

某些 Visual Basic陳述式或構造只在物件模組(表單、物件類別模組等等)中有效。該錯誤有以下原因和解決方案：

•	試圖在非物件類別模組中使用無效的陳述式或構造(例如， Implements 陳述式、WithEvents 關鍵字、或者事件吸收)。

把產生該錯誤的陳述式放到物件模組中。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


所請求的型態程式庫或精靈不是 VBA 專案

並非所有 Visual Basic 中可用的組成項目都是既可讀又可寫的。該錯誤有以下原因和解決方案：

•	試圖從 Visual Basic 專案中對增益集或型態程式庫進行寫操作。

不能直接對作為 Visual Basic 專案的組成部分的預壓縮增益集或型態程式庫進行寫操作。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


這個編輯需要重設

在大多數情況下，可以編輯程式碼並從編輯的地方繼續執行該程式碼。該錯誤有以下原因和解決方案：

•	修改程式碼後需要從初始化的地方開始重新程式碼。

如果破壞程序中的程式碼，且目前執行列不再處於和該程序岔斷前相同的上下文中，就可能發生這個錯誤。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


翻譯失敗。詳細資訊請查詢 trnslate.log 檔案。

目前的 Visual Basic 版本為回溯相容性執行譯。該錯誤有以下原因和解決方案：

•	譯意外失敗。

該錯誤通常是由於被破壞的型態程式庫引用而產生的。詳細內容可以從指定的譯日誌中獲得。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


精靈不能引用專案

可以引用另一個，但是不能引用專案。該錯誤有以下原因和解決方案：

•	在 Make Wizard 指令期間，現一個專案引用。

刪除該專案引用。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


意外的編譯錯誤

這個錯誤具有以下的起因與解決方法：

當在編譯程序中發生編譯器無法處理未預料到的錯誤時，就會生這個錯誤。

關於其它資訊，請選中有問題的條目並按按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


不能處理物件指定的事件

���

這個錯誤具有以下的起因與解決方法：

不能處理該物件的事件。也許物件缺少該事件，或者存在但錯，或被故意取消了。

在Object Browser中檢查該物件和它的事件，得該物件及其事件的資訊。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


基物件類別名稱使用不正確

基物件類別不能使用自己的名字。該錯誤有以下原因和解決方案：

•	試圖使用基物件類別的名稱，但又不清楚所要存取基物件類別的預設成員。

把基物件類別名稱放在括弧內，來指明想要存取預設成員。

•	在運算式中使用了基物件類別的名字，但在指定試圖存取的成員時存有歧義。

在基物件類別名稱和所關心的成員之間使用歧義消除符(例如，一個驚嘆號)。

•	在 Set 陳述式中使用了基物件類別名稱，就像它包含了該物件類別的引用一樣。

用基物件類別名稱來取出引用，例如，使用 GetObject。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


無效的事件名稱

因為事件程序名稱是透過底線來把物件名稱和事件名稱連結起來而構成的。該錯誤有以下原因和解決方案：

•	使用了底線作為了事件名稱的一部分。

從事件名稱中刪除。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


事件沒有找到

在 RaiseEvent 陳述式中指定的事件必須與已定義的事件相符。該錯誤有以下原因和解決方案：

•	在 RaiseEvent 陳述式中指定了一個名字，但找不到事件定義。

確認事件名稱拼寫正。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


必須指定搜索字串

當在物件瀏覽器中搜索時，必須輸入字串。該錯誤有以下原因和解決方案：

•	在 Object Browser 中開始了一個索，但沒有指定要索的文字。

輸入索字串。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


不能顯示指定的名字，因為它是隱含的

某些名字存在於型態程式庫中，但被設定為隱含的了。該錯誤有以下原因和解決方案：

•	指定了型態程式庫中的一個名字，但它被設定為隱含的了。

通常不能檢視隱含的型態程式庫成員。在物件瀏覽器上下文功能表上選擇 Show Hidden Members 來使隱含的成員可見。然後就可以檢視該成員資訊。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


不能跳至到指定的型態，因為它在指定的程式庫中，該程式庫目前沒有被引用

該錯誤有以下原因和解決方案：

•	試圖指定該專案中沒有引用的程式庫的型態。

透過 References 對話方塊來設定該型態程式庫的引用。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


無效的內部列出

不是所有型態在列出定義中都是有的。該錯誤有以下原因和解決方案：

•	試圖指定字串或某些其不正確類型來作為 Enum 成員的值。

用來指定 Enum 成員的常數運算式的值必須是 Long 型態或其 Enum 型態。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows中) 或 HELP (對於 Macintosh)。


意外的錯誤

���

這個錯誤具有以下的起因與解決方法：

•	發生了意外的錯誤。請試著將系統關閉，然後再重新啟動。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


目前專案不支援此型態的檔案

���

這個錯誤具有以下的起因與解決方法：

•	您嘗試要開啟的檔案是不正確的專案檔案，或是包含不受此 Visual Basic 主應用程式和 Visual Basic 環境支援的功能之專案檔案。

請確定您要開啟的專案檔案是正確的專案檔案 (即您在相同的 Visual Basic 主應用程式和 Visual Basic 環境內所建立和儲存的專案檔案)。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


此 VBA 專案是在不同的應用程式中執行 VBA 時建立的。您只能從和建立它的相同應用程式中開啟它

���

這個錯誤具有以下的起因與解決方法：

•	您嘗試要開啟的檔案是在另一個主應用程式中建立的專案檔案。

請確定您要開啟的專案檔案是在相同的 Visual Basic 主應用程式中建立和儲存的專案檔案。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


無視窗的控制項沒有功能表

���

這個錯誤具有以下的起因與解決方法：

•	您企圖將一功能表放置在無視窗的控制項上，這是不被允許的動作。

若要將功能表放置在控制項上，請選擇視窗化的控制項。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


此控制項只能用於 'item' 設計師

���

這個錯誤具有以下的起因與解決方法：

•	您所選擇的控制項只能與指出的設計師一起使用。

您必須選擇另一個控制項或不同的設計師。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


此控制項不能用於 'item' 設計師

���

這個錯誤具有以下的起因與解決方法：

•	您所選擇的控制項不能與指出的設計師一起使用。

您必須選擇另一個控制項或不同的設計師。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


無法使用此設計師，因為它使用了本版 Visual Basic 不支援的功能

���

這個錯誤具有以下的起因與解決方法：

•	您所選擇的設計師不受本版的 Visual Basic 支援。

您必須使用不同的設計師，或為此指出的 Visual Basic 版所設計的設計師。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


無法加入 'item'，因為專案中的任何項目只引用它但未使用它。若要修正此問題，請取消核取專案選項中的「移除有關未使用的 ActiveX 控制項之資訊」。

���

這個錯誤具有以下的起因與解決方法：

•	無法加入此指出的元件，因為專案中的任何項目皆未使用它。

請清除「專案」功能表之下「專案選項」對話方塊中的「移除有關未使用的 ActiveX 控制項之資訊」。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


無法啟動 Internet Explorer

���

這個錯誤具有以下的起因與解決方法：

•	不明的問題使 Internet Explorer 無法執行。

請嘗試單獨啟動 Internet Explorer，以確定它可以正常地運作。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


'item' 設計師只能用於 DLL 專案中

���

這個錯誤具有以下的起因與解決方法：

•	此指出的設計師只能用於 ActiveX DLL 專案中。

請在 ActiveX DLL 專案中使用此設計師。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


'item' 設計師在 ActiveX EXE 專案中不能是 public

���

這個錯誤具有以下的起因與解決方法：

•	此指出的設計師之 Instancing 屬性不能設定為 ActiveX .exe 專案中的 Public。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


'item' 設計師必須是 public 且無法用於標準 EXE 專案中

���

這個錯誤具有以下的起因與解決方法：

•	此指出的設計師之 Instancing 屬性必須設定為 Public。

此設計師無法用於標準 .exe 專案中。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


'item' 設計師不能是 private

���

這個錯誤具有以下的起因與解決方法：

•	此指出的設計師之 Instancing 屬性不能設定為 Private。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


此物件的一或多個執行個體正在執行。此時無法移除它

���

這個錯誤具有以下的起因與解決方法：

•	您企圖移除目前正在執行的物件。

將此物件從專案中移除之前，請先關閉它所有的執行個體。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


此專案目前由另一個專案引用，且無法關閉

���

這個錯誤具有以下的起因與解決方法：

•	您企圖要關閉的指出專案正由另一個專案引用中。

請在您移除此另一個專案的引用之後再關閉它。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


多緒專案中不允許有 MDI 表單。任何 MDI 表單皆會從此專案中移除。若要將此 MDI 表單保留在此專案中，請選擇「取消」，然後將執行緒模式變更為只有一個執行緒的執行緒庫。

���

這個錯誤具有以下的起因與解決方法：

•	您企圖將 MDI 表單加入到多緒專案中。

如果您要將此 MDI 表單保留在此專案中，請將執行緒模式變更為只有一個執行緒的執行緒庫。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


'item' 已違反存取。是否將它從可用增益功能清單中移除？

���

這個錯誤具有以下的起因與解決方法：

•	此指出的增益功能正造成檔案違反存取。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


此選取的增益功能尚未被確認為 'Command Line Safe'，且可能需要一些使用者介入動作 (可能是 UI)

���

這個錯誤具有以下的起因與解決方法：

•	"Command-line safe" 的意思是，此增益功能會被註冊以指出它未包含任何使用者介面，這在經由指令行來啟動 Visual Basic 時需要使用者輸入。使用者介面可能會因未附加的處理動作 (如建立 script) 而中斷。

如果您未指出增益功能是 command-line safe (即使它是 command-line safe)，則當使用者選擇您的增益功能以及「載入行為」方塊中的「指令行」時，他們就會接收到警告訊息。這不是嚴重的問題，只是對使用者提出警告：即此選取的增益功能可能包含會意外蹦現出來的 UI 元件，且會藉由使用者的輸入暫停來停止他們的自動化 script。

若要將增益功能指定為 command-line safe，請如此製作它 (您可以為此使用增益功能設計師)，或以手動方式變更註冊鍵中的此值。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


不合法的參數。無法寫入使用者自訂的型態。

���

這個錯誤具有以下的起因與解決方法：

•	您企圖將使用者自訂的型態寫入到 PropertyBag 物件中 (這是不受支援的)。

若要解決此問題，您可以將使用者自訂型態的每個個別項目寫入到 PropertyBag 物件中。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


不合法的參數。無法寫入物件，因為它不支援 persistence。

���

這個錯誤具有以下的起因與解決方法：

•	您企圖將物件寫入到 PropertyBag 物件中，但此物件不支援其中一個 ActiveX persistence 介面。

若要修復此問題，您必須存取此物件的程式碼。它必須是 Visual Basic 建立的物件，且將其 Persistable 屬性設定為 True。同樣地，Class 必須是 Public 或 Public Createable，且必須在 ActiveX Dll、ActiveX Exe 或 UserControl 專案中。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


不正確的屬性名稱

���

這個錯誤具有以下的起因與解決方法：

•	您為此屬性輸入的名稱是不正確的。也就是它已在使用中、保留給系統使用，或包含不正確的字元。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


'item' 為單一執行緒元件，且無法用於多緒專案中。變更 'item' 的執行緒模式，或聯絡此元件廠商以獲得更新版本。

���

這個錯誤具有以下的起因與解決方法：

•	您正企圖在多緒專案中使用單一執行緒元件。

您可以變更此單一執行緒元件的執行緒模式，或聯絡此元件廠商以獲得更新版本。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


無法從 'item2' 載入控制項 'item1'。您的 'item2' 版本可能過時了。請確定您使用的控制項版本是應用程式提供的。

���

這個錯誤具有以下的起因與解決方法：

•	您使用了過時的版本。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


無法啟動控制項 'item 1'。此控制項與您的應用程式可能不相容。請確定您使用的控制項版本是應用程式提供的。

���

這個錯誤具有以下的起因與解決方法：

•	此應用程式無法啟動此指出的控制項，因為它與應用程式不相容。如果目前您系統上的此控制項版本與應用程式所提供的版本不同，就會發生問題。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


ActiveX 設計師的型態資訊與已儲存的內容不相符。無法載入。

���

這個錯誤具有以下的起因與解決方法：

•	無法載入此專案，因為 ActiveX 設計師的型態資訊與已儲存的內容不相符。可能的原因是檔案損毀。

請嘗試載入此專案的備份檔。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


不支援編譯與設計環境元件間的互動

���

這個錯誤具有以下的起因與解決方法：

•	當兩個元件一起執行時會發生此問題，其中一個元件 (如表單或 UserControl) 先前已被編譯且目前正使用執行階段 (msvbvm60.dll) 在執行中，而另一個元件正在 IDE 中執行。例如，編譯的 UserControl 正在 IDE 中的表單上執行。

此問題發生的原因是，在 IDE 中執行的項目與編譯物件間的內部記憶體結構有點不同且通常是不相容的。雖然一般而言，您不會因此而遭遇問題，除非您正經由 Property 或 Sub 程序將 UserControl (Me) 的執行個體傳遞給主表單或其它元件。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


無法列印最小化的表單影像

���

這個錯誤具有以下的起因與解決方法：

•	當表單影像最小化時就無法列印它。

請最大化此影像，然後再進行列印。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


程式碼產生器或連結器中發生意外的錯誤

這個錯誤具有以下的起因與解決方法：

•	此程式碼產生器或連結器造成意外的錯誤。

按一下「是」，以便在「記事本」中顯示出這些錯誤。

此錯誤一般是因為磁碟空間不足或其它與磁碟相關的問題造成的。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


版本號碼必須在 0 到 9999 之間

這個錯誤具有以下的起因與解決方法：

•	您嘗試指定負數、非數字字元或大於 9999 的數字作為「專案屬性」對話方塊中「製作」標籤內專案的版本號碼之 Major、Minor 或 Revision 元件。請使用 0 到 9999 之間的數字 (包含 0 和 9999)。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


不正確的基本位址

您輸入了不正確的基本位址。這個錯誤具有以下的起因與解決方法：

•	在「專案屬性」對話方塊中的「編譯」標籤上，您指定了不正確的基本位址。

正確的基本位址必須是 64K 的倍數、大於 64K 且小於 &H7FFF0000。

此錯誤會發生在 ActiveX DLL 或 ActiveX Control 專案中。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


未偵測到可建立的公用元件。請按 F1 鍵以獲得更詳細的資訊。

���

這個錯誤具有以下的起因與解決方法：

•	您的專案至少必須有一個公用可建立元件。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


檔案 'item' 無法註冊為 ActiveX 元件。

這個錯誤具有以下的起因與解決方法：

•	您試著註冊控制項或動態連結程式庫 (.dll)，這是不正確的 ActiveX 元件。請確定您有正確的控制項或 .dll。聯絡 ActiveX 元件的廠商以獲得更詳細的資訊。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


專案檔案 'item1' 中包含不正確的鍵 'item2'。
專案檔案 'item1' 中包含不正確的鍵 'item2'

這個錯誤具有以下的起因與解決方法：

•	Visual Basic 專案檔案 (.vbp) 包含一 Visual Basic 無法辨認的鍵。此檔案可能已損毀。

請安裝此指定檔案的備份檔，或使用文字編輯器來修正錯誤以修改此檔案。

警告   在非 Visual Basic 的編輯器中修改 Visual Basic 檔案可能會損毀此檔案。只建議進階使用者可以這麼做。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


無法顯示出說明

這個錯誤具有以下的起因與解決方法：

•	如果您正在執行 WinHelp，則無法使用此 Windows 說明應用程式。如果 Winhelp.exe 位在您的機器上，請確定它是否位在您的路徑上。如果它不在您的機器上，請執行 Microsoft Windows 9x 或 Microsoft Windows NT 安裝程式來安裝它。

•	如果您正在執行 HTMLHelp，而且 HH.exe 位在您的機器上，則請確定它是否在您的路徑上。如果它不在您的電腦上，則必須在可以檢視「說明」之前先安裝它。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


未註冊的類別。'item 1'

���

這個錯誤具有以下的起因與解決方法：

•	此指出的類別模組尚未註冊。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


程式 ID 字串太長 'item'。此程式 ID 必須少於 39 個字元。

這個錯誤具有以下的起因與解決方法：

•	ActiveX 元件的 ProgID 字串可能比 39 個字元短。此 ProgID 是將專案名稱和類別模組名稱連結在一起而建立的。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


專案 <name> 已修改。現在您是否要儲存變更？

這個錯誤具有以下的起因與解決方法：

•	此專案中的一或多個檔案的其中一個屬性設定或程式碼陳述式已變更，而這些變更尚未儲存。這是您在載入另一個專案之前儲存變更的最後機會。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


因為目前的註冊使用權限，所以無法更新 'item' 的載入行為。

這個錯誤具有以下的起因與解決方法：

•	Visual Basic 無法載入您嘗試從「增益功能管理員」對話方塊中「可用增益功能」清單內選取的增益功能，因為它並未正確地註冊或不再將它註冊在系統註冊中。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


未正確地註冊元件

���

這個錯誤具有以下的起因與解決方法：

•	未正確地註冊此指出的元件。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


在已註冊的位置中找不到元件

這個錯誤具有以下的起因與解決方法：

•	找不到需要的可執行檔 (.exe) 或動態連結程式庫 (.dll)。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


元件未成功地建立要求的物件

這個錯誤具有以下的起因與解決方法：

•	ActiveX 元件的可執行檔 (.exe) 無法正確地執行。

註冊中的資訊可能有問題。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


元件 'item' 或其中一個依存檔案未正確地註冊：檔案遺失或不正確

這個錯誤具有以下的起因與解決方法：

•	已移除或刪除此指定的檔案。

•	未正確地註冊此指定的檔案。

請重新安裝此指定的檔案以正確地註冊它。請聯絡此物件的廠商以獲得更詳細的資訊。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


此功能需要 Internet Explorer 'item' 或以上版本。您可以從 www.microsoft.com 獲得最新的版本

���

這個錯誤具有以下的起因與解決方法：

•	您必須有此指出的 Internet Explorer 版本，以利此功能正常運作。

請連上 http://www.microsoft.com 以獲得 Internet Explorer 的最新版本。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


表單在最小化或最大化時無法移動或調整大小

���

這個錯誤具有以下的起因與解決方法：

•	您企圖在表單最小化或最大化時移動或調整大小，這是不被允許的動作。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


顯示出強制回應表單時，無法顯示非強制回應表單

���

這個錯誤具有以下的起因與解決方法：

•	您企圖在結束強制回應表單之前顯示非強制回應表單。

請先結束強制回應表單。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


無法 ReDim、Erase 或指定給包含其元件是 With 物件的陣列之 Variant

���

這個錯誤具有以下的起因與解決方法：

•	您企圖 ReDim、Erase 或將 Variant 指定為其元件是 With 物件的變數。

例如，下面的程式碼程序會產生此錯誤：

Type Test

Name as Integer

End Type

Sub Main()

Dim c(0) As Test

Dim e

e = c

With e(0)

ReDim e(1)

End With

End Sub

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


專案是無法檢視的

���

這個錯誤具有以下的起因與解決方法：

•	您企圖檢視的專案已被鎖定。

請參考主應用程式的文件，以獲得有關如何使專案成為可以檢視的「說明」。

關於其它資訊，請選中有問題的條目並按 F1 鍵 (在 Windows 中) 或 HELP (對於 Macintosh)。


Activate 及 Deactivate 事件範例

下列程式碼使用兩個UserForms：UserForm1 及 UserForm2。將這些程序複製到 UserForm1 模組中，再加入 UserForm2，而 UserForm1 的標題是在其 Activate 事件程序中所指定的。當使用者在 UserForm1 的從屬工作區按一下時，UserForm2 便會顯示出來，此時 UserForm1 會引發 Deactivate 事件，而在此事件中兩個表單的標題都會改變。

' UserForm1 的 Activate 事件程序

Private Sub UserForm_Activate()

  UserForm1.Caption = "Click my client area"

End Sub

' UserForm1 的 Click 事件

Private Sub UserForm_Click()

  Load UserForm2

  UserForm2.StartUpPosition = 3

  UserForm2.Show

End Sub

' UserForm1 的 Deactivate 事件

Private Sub UserForm_Deactivate()

  UserForm1.Caption = "I just lost the focus!"

  UserForm2.Caption = "Focus just left UserForm1 and came to me"

End Sub


Initialize 事件範例

下列範例假設程式中已有兩個UserForms。在 UserForm1 的 Initialize 事件中，UserForm2 會被載入並顯示出來；當使用者在 UserForm2 的從屬工作區按一下，它便會隱藏起來，而 UserForm1 會顯示出來。當使用者在 UserForm1 的從屬工作區按一下，UserForm2 便再次顯示出來。

' 這是 UserForm1 的 Initialize 事件程序

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' 這是 UserForm2 的 Click 事件程序

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' 這是 UserForm1 的 Click 事件程序

Private Sub UserForm_Click()

UserForm2.Show

End Sub


QueryClose 事件範例

下列程式碼強制使用者必需在UserForms的從屬工作區內按一下，才能關閉表單視窗。如果使用者試圖使用視窗標題列上的「關閉」方塊來關閉視窗，則參數 Cancel 的值會被設成非零值，即該視窗拒絕關閉。然而，如果使用者在表單從屬工作區按一下，則呼叫 Unload Me 來關閉視窗，此時參數 CloseMode 的值為 1，便可成功關閉視窗。

Private Sub UserForm_Activate()

  UserForm1.Caption = "You must Click me to kill me!"

End Sub

Private Sub UserForm_Click()

  Unload Me

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

  '預防使用者按下視窗標題列上的「關閉」方塊。

  If CloseMode <> 1 Then Cancel = 1

  UserForm1.Caption = "The Close box won't work! Click me!"

End Sub


Resize 事件範例

下列範例使用 Activate 及 Click 事件來示範如何觸發UserForms的 Resize 事件。當使用者在表單的從屬工作區按一下，表單會改變大小並將新的高度值顯示在標題列上。請注意，程式中利用 Tag 屬性來記錄UserForms的初始高度。

' UserForm1 的 Activate 事件程序

Private Sub UserForm_Activate()

UserForm1.Caption = "Click me to make me taller!"

Tag = Height	' 記下初始高度。

End Sub

' UserForm1 的 Click 事件程序

Private Sub UserForm_Click()

Dim NewHeight As Single

NewHeight = Height

' 如果表單比初始高度小，讓它變大。

If NewHeight = Val(Tag) Then

Height = Val(Tag) * 2

Else

' 如果表單比初始高度大，讓它變小。

Height = Val(Tag)

End If

End Sub

' UserForm1 的 Resize 事件程序

Private Sub UserForm_Resize()

UserForm1.Caption = "New Height: " & Height & "  " & "Click to resize me!"

End Sub


Terminate 事件範例

在下列事件程序中，當使用者在表單的從屬工作區按一下時，UserForms會發出一陣聲響後關閉。

Private Sub UserForm_Activate()

  UserForm1.Caption = "Click me to kill me!"

End Sub

Private Sub UserForm_Click()

  Unload Me

End Sub

Private Sub UserForm_Terminate()

  Dim Count As Integer

  For Count = 1 To 100

    Beep

  Next

End Sub


Activate、Deactivate 事件

��� [image] ��� [image] ���

在物件變成現用視窗的時候，會發生 Activate 事件。而當物件不再是現用視窗時，則會發生 Deactivate 事件。

語法

Private Sub object_Activate()

Private Sub object_Deactivate()

object 代表一個「適用於」清單中的物件之物件運算式。

請注意

物件可以藉由程式碼中的 Show 方法，來變成是現用的。

只有在物件是可見的時候，才會發生 Activate 事件。而除非您使用 Show 方法，否則以 Load 來載入的 UserForm 並不是可見的。

只有在一應用程式中移動駐點，才會發生 Activate 及 Deactivate 事件。而將駐點移到另一個應用程式並不會引發此事件。

在載出物件時，並不會發生 Deactivate 事件。


Initialize 事件

��� [image] ��� [image] ���

發生在一個物件載入後，但尚未顯示的時候。

語法

Private Sub object_Initialize()

object 代表一個「適用於」清單中的物件之物件運算式。

請注意

Initialize 通常用在準備使用一個應用程式，或是 UserForm 的時候。您可將變數指定為起始值，且控制項可以移動或改變大小來配合初始資料。


QueryClose 事件

��� [image] ��� [image] ���

發生在 UserForm 關閉之前。

語法

Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer)

QueryClose 事件的語法具有以下幾個單元：

單元	說明
cancel	一個整數。請將此參數設定為 0 以外的任意值，用來停止所有載入之使用者表單中的 QueryClose 事件，並避免關閉 UserForm 與應用程式。
closemode	一個值或常數，用來指示引起 QueryClose 事件的原因。
傳回值

closemode 參數會傳回以下的值：

常數	值	說明
vbFormControlMenu	0	使用者選取了 UserForm.上的「控制」功能表中的「關閉」指令。
VbFormCode	1	Unload 陳述式由程式碼引發。
VbAppWindows (只適用於Visual Basic 5.0。)	2	正在結束目前 Windows 作業環境的過程。
VbAppTaskManager (只適用於Visual Basic 5.0。)	3	Windows 的「工作管理員」正在關閉這個應用。
這些常數都詳列在 Visual Basic for Applications 的物件瀏覽中的物件程式庫。請注意vbFormMDIForm 也在「物件瀏覽」中，只是目前還沒有支援。

請注意

這個事件通常用來確認：在應用程式關閉前，使用者表單中是否還有未結束的工作。例如，如果在某一個 UserForm 中，使用者尚未儲存新資料的話，則應用程式可以提示使用者要記得儲存。

當應用程式結束時，您可以用 QueryClose 事件程序，將 Cancel 屬性設定為 True，以停止此關閉的過程。


Resize 事件

��� [image] ��� [image] ���

發生在使用者表單改變大小時。

語法

Private Sub UserForm_Resize()

請注意

當父 UserForm 大小改變時，可利用 Resize 事件程序來移動控制項或改變其大小。您也可以利用這個事件程序，來重新指定變數或屬性。


Terminate 事件

��� [image] ��� [image] ���

發生在藉設定所有引用物件的變數為 Nothing，來將所有對執行個體的引用從記憶體中移除時；或是物件的最後一個引用超出有效範圍時。

語法

Private Sub object_Terminate( )

object 代表一個在「適用於」清單中的物件之物件運算式。

請注意

Terminate 事件發生在物件釋出之後。如果 UserForm 的執行個體或是類別因為應用程式的不正常結束而被移出記憶體，則 Terminate 事件就不會引發。例如，在將物件類別的所有執行個體或 UserForm 移出記憶體之前，程式使用了 End 陳述式，則該物件類別或 UserForm 並不會引發 Terminate 事件。


Hide 方法範例

下列範例假設程式中有兩個UserForm。在 UserForm1 的 Initialize 事件中，程式會載入 UserForm2 並將它顯示出來。當使用者在 UserForm2 的工作區按一下滑鼠左鍵時，UserForm2 便會隱藏起來而 UserForm1 會顯示出來。當使用者在 UserForm1 按下滑鼠左鍵時，UserForm2 會再次出現。

' UserForm1 的 Initialize 事件程序

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' UserForm2 的 Click 事件

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' UserForm1 的 Click 事件

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Load 陳述式範例

在下列範例中，UserForm2 會在 UserForm1 的 Initialize 事件中載入。在 UserForm2 上按一下滑鼠左鍵便可將 UserForm1 顯示出來。

' UserForm1 的 Initialize 事件程序

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' UserForm2 的 Click 事件

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' UserForm1 的 Click 事件

Private Sub UserForm_Click()

UserForm2.Show

End Sub


PrintForm 方法範例

在下列範例中，當使用者在表單上按下滑鼠左鍵時，程式便將表單的工作區整個列印到印表機上。

' UserForm1 的 Click 事件

Private Sub UserForm_Click()

UserForm1.PrintForm

End Sub


Show 方法範例

下列範例假設程式中有兩個UserForms。在 UserForm1 的 Initialize 事件中，程式會載入 UserForm2 並將它顯示出來。當使用者在 UserForm2 的工作區按一下滑鼠左鍵時，UserForm2 便會隱藏起來而 UserForm1 會顯示出來。當使用者在 UserForm1 按下滑鼠左鍵時，UserForm2 會再次出現。

' UserForm1 的 Initialize 事件程序

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' UserForm2 的 Click 事件

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' UserForm1 的 Click 事件

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Unload 陳述式範例

下列範例假設程式中有兩個UserForms。在 UserForm1 的 Initialize 事件中，程式會載入 UserForm2 並將它顯示出來。當使用者在 UserForm2 的工作區按一下滑鼠左鍵時，UserForm2 便會被釋出而 UserForm1 會顯示出來。當使用者在 UserForm1 按下滑鼠左鍵時，就換成 UserForm1 被釋出。

' UserForm1 的 Initialize 事件程序

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' UserForm2 的 Click 事件

Private Sub UserForm_Click()

Unload UserForm2

End Sub

' UserForm1 的 Click 事件

Private Sub UserForm_Click()

Unload UserForm1

End Sub


WhatsThisMode 方法範例

下列範例當使用者在UserForm上按一下滑鼠左鍵時，將滑鼠游標改成「這是什麼」 (一個問號)指標。如果沒有將表單的 WhatsThisHelp 及 WhatsThisButton 屬性都設成 True 的話(可在屬性視窗中設定)，下列程式就沒有任何作用。

Private Sub UserForm_Click()

' 將滑鼠游標改成「這是什麼」指標。

WhatsThisMode

End Sub


Hide 方法

��� [image] ��� [image] ���

隱藏一個物件但不載出。

語法

object.Hide

object 代表一個在「適用於」清單中的物件之物件運算式。如果省略掉 object，則駐點所在的 UserForm 就被當做 object。

請注意

當一個物件被隱藏後，它會從螢幕上移除，且其 Visible 屬性會被設為 False。使用者無法存取隱藏物件中的控制項，但是對於執行中的應用程式、其它可以透過Automation與此應用程式溝通的程序，以及Windows中Timer 控制項事件來說，是可以用程式來存取的。

隱藏一個 UserForm 之後，使用者就無法與應用產生互動，直到造成 UserForm 隱藏的事件程序程式碼結束為止。

如果在使用 Hide 方法時尚未載入 UserForm，則 Hide 方法就會載入此 UserForm 但不會顯示出來。


Load 陳述式

��� [image] ���

載入一物件但卻不顯示。

語法

Load object

object 代表一個在「適用於」清單中的物件之物件運算式。

請注意

物件被載入時，會先放入記憶體中，但卻是不可見的。您必須使用 Show 方法讓物件成為可見的。在物件成為可見的之前，使用者無法與之互動。您可以在 Initialize 事件程序中，以程式來操控物件。


PrintForm 方法

��� [image] ��� [image] ���

將 UserForm 物件的影像逐位元傳送到印表機。

語法

object.PrintForm

object 代表一個在「適用於」清單中的物件之物件運算式。如果省略掉 object，則駐點所在的 UserForm 就被當做 object。

請注意

PrintForm 可以列印出所有可見的物件，以及 UserForm 物件的點陣圖。PrintForm 也會列印出 UserForm 物件上的圖形。

PrintForm 所用的印表機，取決於作業系統之「控制台」中的設定。


Show 方法

��� [image] ��� [image] ���

顯示 UserForm 物件。

語法

[object.]Show

此 Show 方法有以下幾個單元：

單元	說明

object	選擇性引數。為一個「適用於」清單中物件的物件運算式。如果省略掉 object，則與作用中的 UserForm 模組結合的 UserForm 便被認為是 object。

modal	選擇性引數。Boolean 值可決定 UserForm 是強制回應或是非強制回應。

設定

modal 的設定為：

常數	值	描述
vbModal	1	UserForm 是強制回應的。預設值。
vbModeless	0	UserForm 是非強制回應的。
請注意

如果指定的物件在運用 Show 方法時並未載入，則 Visual Basic 會自動將之載入。

備註   在 Microsoft Office 97 中，如果 UserForm 是設定為以非強制回應顯示，則將會導致一個執行階段錯誤；Office 97 UserForm 通常是強制回應的。

當 UserForm 為非強制回應時，不會執行它所遇到的任何連續程式碼。非強制回應的表單不會出現在工作列或視窗的定位順序中。

備註   如果您對 UserForm 專案 (使它重新編譯) 進行變更的話 (例如，移除程式碼模組)，您可能會遺失掉與非強制回應 UserForm 相關的資料。

當 UserForm 為強制回應時，使用者必須在使用應用程式的其他部份之前，先對其做出回應。在 UserForm 被隱藏或釋出之前，不會執行任何連續的程式碼。雖然當 UserForm 顯示時，不能使用應用程式中的其它表單，但其它應用程式則仍然可以使用。


Unload 陳述式

��� [image] ���

將一個物件自記憶體中移除。

語法

Unload object

這必須的 object 引數代表一個「適用於」清單中物件之物件運算式。

請注意

當載出一物件時，是指將它從記憶體中移除，使釋放出來的記憶體空間可再使用。在物件以 Load 陳述式再次放入記憶體之前，使用者無法與此物件互動，且不能以程式操控。


WhatsThisMode 方法

��� [image] ��� [image] ���

使滑鼠指標改變成「這是什麼」指標，並讓應用程式顯示一個選取物件的簡單說明。

語法

object.WhatsThisMode

object 代表一個在「適用於」清單中的物件之物件運算式。如果省略掉 object，則駐點所在的 UserForm 就被當做 object。

請注意

執行 WhatsThisMode 方法對應用程式來說，與按下標題列的「這是什麼」按鈕的結果是一樣的。滑鼠指標會改變成「這是什麼」指標。當使用者按下一個物件時，該物件的 WhatsThisHelpID 屬性可用來啟用文字感應說明。


UserForm 物件、UserForms 集合物件

��� [image] ��� [image] ��� [image] ��� [image] ���

UserForm 物件是一個視窗或對話方塊，其構成應用的使用者界面部份。

UserForms 集合物件是一個集合，其元件代表應用程式中每個載入的 UserForm。UserForms 集合物件有一個 Count 屬性，一個 Item 屬性，及一個 Add 方法。Count 用來指定集合物件中的元件個數；Item(預設成員)用來指定某個集合物件成員；而 Add 則用來在集合物件中放置一個新的 UserForm 元件。

語法

UserForm

UserForms[.Item](index)

index 代表從 0 到 UserForms.Count - 1 之間的一個整數；Item 則是 UserForms 集合物件的預設成員，並且是不須指定的。

請注意

您可以經由 UserForms 集合物件，運用程式中所有已載入的使用者表單，其識別的方法須經由 UserForms 全域變數。您可以將 UserForms(index) 傳遞到一個引數為 UserForm 類別的函數中。

您可利用使用者表單的屬性決定其外觀，例如位置、大小、顏色，以及動作。

使用者表單也會回應由使用者所引起或系統引發的事件。例如，可以在 UserForm 的 Initialize 事件程序中撰寫程式碼，以在 UserForm 顯示前初始化模組層次變數。

除了屬性與事件之外，您還可以在程式碼中使用方法來操縱使用者表單。例如，您可以用 Move 方法來改變 UserForm 的位置與大小。

在設計使用者表單時，設定 BorderStyle 屬性可定義框線，以及設定 Caption 屬性以便在標題列填入文字。利用程式碼，您可以 Hide 及 Show 方法使 UserForm 在執行階段為可見的或不可見的。

UserForm 是一種 Object 資料型態。您可在設計階段設定變數為 UserForm 型態之執行個體前，將之宣告為 UserForm。同樣的，也可以 UserForm 型態傳遞一個引數給程序。您可以在程式碼中用 Dim 中的關鍵字 New、Set 及 Static 等陳述式，來建立使用者表單的數個執行個體。

您可以用 UserForm 上的 Controls 集合物件，來存取控制項的集合物件。例如，要隱藏 UserForm 上的所有控制項，可以用類似以下的程式碼：

For Each Control in UserForm1.Controls

Control.Visible = False

Next Control


StartUpPosition 屬性範例

下列範例使用 Load 陳述式及 Show 方法﹐在 UserForm1 的 Click 事件中載入 UserForm2﹐並將 StartUpPosition 屬性值設成 3(Windows 預設位置).。Show 方法則是用來將 UserForm2 顯示出來。

Private Sub UserForm_Click()

Load UserForm2

UserForm2.StartUpPosition = 3

UserForm2.Show

End Sub


StartupPosition 屬性

��� [image] ��� [image] ���

傳回或設定一個值，用來指定 UserForm 第一次出現時的位置。

您可以用以下的值來設定 StartupPosition：

設定	值	說明
Manual	0	沒有初始設定。
CenterOwner	1	在 UserForm 所屬項目的中央。
CenterScreen	2	在整個螢幕的中央。
WindowsDefault	3	在螢幕的左上角。
請注意

您可以由程式中設定 StartUpPosition 屬性，也可以從屬性視窗中設定。


WhatsThisButton 屬性

��� [image] ��� [image] ���

傳回一個 Boolean 值，以決定「這是什麼」按鈕是否要出現在 UserForm 物件的標題列。此屬性在執行階段是唯讀的。 該屬性不適用於Macintosh。

請注意

WhatsThisButton 屬性的設定有：

設定	說明
True	顯示「這是什麼」按鈕。
False	(預設值) 不顯示「這是什麼」按鈕。
請注意

WhatsThisButton 屬性為 True 時，WhatsThisHelp 屬性也必須為 True。


WhatsThisHelp 屬性

��� [image] ��� [image] ���

傳回一個 Boolean 值，以決定文字感應說明要採用 Windows 95 說明所提供的彈出式視窗，還是利用主說明視窗。此屬性在執行階段是唯讀的。 該屬性不適用於Macintosh。

請注意

WhatsThisHelp 屬性的設定有：

設定	說明
True	以「這是什麼」存取技術來啟動說明視窗，並載入由 WhatsThisHelpID 屬性所辨認的主題。
False	(預設值)應用程式可利用 F1 鍵來啟動說明視窗，並載入由  HelpContextID 屬性所識別的主題。
請注意

在應用程式中，有兩種存取技術可提供「這是什麼」。要使用這些技術，WhatsThisHelp 的屬性就必須要設定為 True。

•	利用 WhatsThisButton 屬性，在 UserForm 的標題列中提供一「這是什麼」按鈕。滑鼠指標會變成「這是什麼」狀態 ( 帶問號的箭頭 )。顯示的主題由使用者按下之控制項的 WhatsThisHelpID 屬性來決定。

•	採用 UserForm 的 WhatsThisMode 方法。這樣便不需按鈕也可產生如同按下「這是什麼」按鈕的動作。例如，你可以在應用程式的功能表指令中運用此方法。


ShowModal 屬性

��� [image] ��� [image] ���

在顯示一個 UserForm 時，將它設定為強制回應或非強制回應。此屬性在執行階段是唯讀的。

請注意

ShowModal 屬性的設定有：

設定	說明

True	(預設值) UserForm 是強制回應的。

False	UserForm 是非強制回應的。

請注意

當 UserForm 為強制回應時，使用者必須在要使用應用程式的其他部份之前，先提供資訊或關閉 UserForm。在 UserForm 被隱藏或釋出之前，不會執行任何連續的程式碼。雖然當 UserForm 顯示時，不能使用應用程式中的其它表單，但其它應用程式則仍然可以使用。

當 UserForm 為非強制回應時，使用者可以檢視其它表單或視窗，而不需關閉UserForm。

非強制回應的表單不會出現在工作列或視窗的定位順序中。

備註   在 Microsoft Office 97 中，如果您試圖開啟具有 ShowModal 屬性的 UserForm，將會得到一個執行階段錯誤，因為 Office 97 只能顯示強制回應的 UserForm。Office 97 會忽略 ShowModal 屬性並顯示 UserForm 的形式。


RightToLeft 屬性

��� [image] ��� [image] ���

傳回一個 Boolean 值，以指出文字的顯示方向，並控制雙向系統上的可見外觀。

請注意

RightToLeft 屬性的設定有：

設定	說明

True	控制項是在雙向平台上執行 （例如 Arabic Windows95 或 Hebrew Windows95），而文字是由右至左顯示出來。該控制項應修改其行為方式，例如將垂直捲軸放在文字或清單方塊的左邊，將標籤放在文字方塊的右邊等等。

False	控制項的行為應如同在非雙向平台上執行一樣 (例如 English Windows95)，而文字是由左至右顯示出來。如果收納器不執行此環境的屬性，則預設值就是 False。

RightToLeft 屬性保留 Userform 之中的環境資訊，可建議對UserForm 之內包含的控制項所採用的行為方式。此屬性是一個 Boolean，指出文字的顯示方向，並控制雙向系統上的可見外觀。預設值是 False。


找不到關鍵字

Visual Basic 說明中找不到您所選取的關鍵字，您可能拼錯字了、選取過多或過少的文字，或者這個字根本不是正確的 Visual Basic 關鍵字。

還有一個可能是，這個關鍵字是在一個未引用的程式庫中，請確定您是否引用了所有必要的物件程式庫。

若要取得某個關鍵字的線上說明，最簡單的方式就是將游標插入點指到該關鍵字上的任何地方，再按下 F1 即可。您不須選取此關鍵字，假如您只選取關鍵字的一部份，或者選了一個以上的字，就會找不到您要的說明。

當您將插入點指在 Value 關鍵字的 "a" 與 "l" 之間，並按下 F1，就會顯示 Value 屬性的線上說明，如下所示：

Worksheets(1).Range ("A2").value=3.14159

若要使用內建說明搜尋，請按一下「說明」功能表中的 Microsoft Visual Basic 說明。


Collection (物件瀏覽)

���

Collection 模組含有在 Collection 物件中執行動作的程序。這些常數可以用在程式碼中的任何地方。

要取得某個程序的說明

1.	從「'Collection' 的成員」清單中選取此程序。

2.	按下 [image] 按鈕。


ColorConstants (物件瀏覽)

���

ColorConstants 模組含有預先定義的顏色常數。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'ColorConstants' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


Constants (物件瀏覽)

���

Constants 模組含有一些其它的常數。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'Constants' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


Conversion (物件瀏覽)

���

Conversion 含有用來執行各種轉換動作的程序。這些常數可以用在程式碼中的任何地方。

要取得某個程序的說明

1.	從「'Conversion' 的成員」清單中選取此程序。

2.	按下 [image] 按鈕。

附註   使用 Variant 變數時，明確的資料型態轉換是不必要的。


DateTime (物件瀏覽)

���

DateTime 模組含有處理日期時間的各種程序與屬性。這些常數可以用在程式碼中的任何地方。

要取得某個屬性或程序的說明

1.	從「'DateTime' 的成員」清單中選取此程序。

2.	按下 [image] 按鈕。


ErrObject (物件瀏覽)

���

ErrObject 模組中的程序，可用來識別與處理使用 Err 物件的執行階段錯誤。這些常數可以用在程式碼中的任何地方。

要取得某個屬性或程序的說明

1.	從「'ErrObject' 的成員」清單中選取此屬性或程序。

2.	按下 [image] 按鈕。


FileSystem (物件瀏覽)

���

FileSystem 模組中的程序，可用來執行檔案、目錄或資料夾，與系統的作業。這些常數可以用在程式碼中的任何地方。

要取得某個程序的說明

1.	從「'FileSystem' 的成員」清單中選取此程序。

2.	按下 [image] 按鈕。


Financial (物件瀏覽)

���

Financial 模組中的程序，可用來執行各種經濟學上的運算。這些常數可以用在程式碼中的任何地方。

要取得某個程序的說明

1.	從「'Financial' 的成員」清單中選取此程序。

2.	按下 [image] 按鈕。


Global (物件瀏覽)

���

Global 模組中的屬性與程序，可用來執行 UserForm 物件的處理。這些常數可以用在程式碼中的任何地方。

要取得某個屬性或程序的說明

1.	從「'Global' 的成員」清單中選取此程序。

2.	按下 [image] 按鈕。


Information (物件瀏覽)

���

Information 模組中的程序，可用來傳回、測試，或確認資訊。這些常數可以用在程式碼中的任何地方。

要取得某個程序的說明

1.	從「'Information' 的成員」清單中選取此程序。

2.	按下 [image] 按鈕。


Interaction (物件瀏覽)

���

Interaction 模組中的程序，可用來與物件、應用程式與系統互動。這些常數可以用在程式碼中的任何地方。

要取得某個程序的說明

1.	從「'Interaction' 的成員」清單中選取此程序。

2.	按下 [image] 按鈕。


KeycodeConstants (物件瀏覽)

���

KeyCodeConstants 模組含有預先定義的按鍵碼，可用在程式中的任何地方。

要取得某個常數的說明

1.	從「'KeyCodeConstants' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


Math (物件瀏覽)

���

Math 模組中的程序，可用來執行各種數學運算。這些常數可以用在程式碼中的任何地方。

要取得某個程序的說明

1.	從「'Math' 的成員」清單中選取此程序。

2.	按下 [image] 按鈕。


Strings (物件瀏覽)

���

String 模組中的程序，可用來執行字串處理。這些常數可以用在程式碼中的任何地方。

要取得某個程序的說明

1.	從「'Strings' 的成員」清單中選取此程序。

2.	按下 [image] 按鈕。


SystemColorConstants (物件瀏覽)

���

System ColorConstants 模組中的常數，可用來識別圖形化使用者介面的各部分。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'SystemColorConstants' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


VbAppWinStyle (物件瀏覽)

���

VbAppWinStyle 含有可讓 Shell 函數使用的常數，可用來控制應用程式視窗的樣式。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'VbAppWinStyle' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


VbCalendar (物件瀏覽)

���

VbCalendar 中的常數，可用來決定 Visual Basic 使用的日曆型態。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'VbCalendar' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


VbCompareMethod (物件瀏覽)

���

VbCompareMethod 中的常數，可用來決定以 Instr 與 StrComp 函數比較字串的方式。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'VbCompareMethod' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


VbDayOfWeek (物件瀏覽)

���

VbDayOfWeek 中的常數，在使用 DateDiff、DatePart，與 Weekday 函數時，可用來識別星期幾。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'VbDayOfWeek' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


VbFileAttribute (物件瀏覽)

���

VbFileAttribute 中的常數，在使用 Dir、GetAttr，與 SetAttr 函數時，可用來識別檔案屬性。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'VbFileAttribute' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


VbFirstWeekOfYear (物件瀏覽)

���

VbFirstWeekOfYear 中的常數，當使用 DateDiff 與 DatePart 函數時，可用來識別一年中的第一個星期。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'VbFirstWeekOfYear' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


VbIMEStatus (物件瀏覽)

���

只在遠東地區版本才有。VbIMEStatus 中的常數，在使用 IMEStatus 函數時，可用來識別輸入法 (IME)。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'VbIMEStatus' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


VbMsgBoxResult (物件瀏覽)

���

VbMsgBoxResult 中的函數，在使用 MsgBox 函數顯示訊息方塊時，可用來識別哪個按鈕被按下。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'VbMsgBoxResult' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


VbMsgBoxStyle (物件瀏覽)

���

VbMsgBoxStyle 中的常數，在使用 MsgBox 函數時，可用來識別訊息方塊的行為與外觀。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'VbMsgBoxStyle' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


VbQueryClose (物件瀏覽)

���

VbQueryClose 中的常數，可用來識別造成 QueryClose 事件發生的原因。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'VbQueryClose' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


VbStrConv (物件瀏覽)

���

VbStrConv 中的常數，可用來識別以 StrConv 函數執行的字串轉換型態。這些常數可以用在程式碼中的任何地方。

要取得某個常數的說明

1.	從「'VbStrConv' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


VbVarType (物件瀏覽)

���

VbVarType 中的常數，可用來識別 Variant 可包含的各種日期型態。這些常數符合 VarType 函數的傳回值，且可以用在程式中的任何地方。

要取得某個常數的說明

1.	從「'VbVarType' 的成員」清單中選取此常數。

2.	按下 [image] 按鈕。


VbTriState (物件瀏覽)

���

VbTriState 列舉定義用來識別三種可能狀態的其中一個常數。

要取得某個常數的說明

1.	從「'VbTriState' 的成員」清單中選取常數。

2.	按一下 [image] 按鈕。


VbDateTimeFormat (物件瀏覽)

���

VbDateTimeFormat 列舉定義用來識別格式化日期與時間方式的常數。

要取得某個常數的說明

1.	從「'VbDateTimeFormat' 的成員」清單中選取常數。

2.	按一下 [image] 按鈕。


VbCallType (物件瀏覽)

���

VbCallType 列舉定義用來識別 CallByName 函數所使用的呼叫型態之常數。

要取得某個常數的說明

從「'VbCallType' 的成員」清單中選取常數。

按一下 [image] 按鈕。


FormShowConstants (物件瀏覽)

���

FormShowConstants 模組包含預先定義的 UserForm 常數。這些常數可在您程式碼中的任何地方使用。

要取得某個常數的說明

1.	從「'FormShowConstants' 的成員」清單中選取常數。

2.	按一下 [image] 按鈕。


Collection 物件範例

本範例建立一個命名為 MyClasses 的 Collection，並且再建立一個對話方塊，讓使用者可從對話方塊中將物件新增到該集合物件中。若要觀察程式如何運作，請先在「插入」功能表上選取「物件類別模組」指令，然後在 Class1 的模組層次中宣告一個公用變數，命名為 InstanceName (Public InstanceName)，此變數用來儲存每個物件類別執行個體的名稱。不要更改物件類別的預設名稱 Class1。將下列程式碼複製到另一個模組的「一般」區段中，然後在另一個程序中以 ClassNamer 陳述式來啟動之。(本範例只適用於有支援物件類別的主程式。)

Sub ClassNamer()

Dim MyClasses As New Collection	' 建立一個集合物件 (Collection)。

Dim Num	' 記數用變數，用來記數物件個數。

Dim Msg As String	' 提示訊息用變數。

Dim TheName, MyObject, NameList	' 物件資訊用變數。

Do

Dim Inst As New Class1	' 建立 Class1 的新執行個體。

Num = Num + 1	' 把記數變數 Num 加一，然後要求使用者輸入新物件個體的名稱。

Msg = "Please enter a name for this object." & Chr(13) _

 & "Press Cancel to see names in collection."

TheName = InputBox(Msg, "Name the Collection Items")

Inst.InstanceName = TheName	' 將名稱指定給新物件個體。

' 將使用者輸入的名稱加到集合物件中。

If Inst.InstanceName <> "" Then

' 將新名稱加到集合物件中。

MyClasses.Add item := Inst, key := CStr(Num)

End If

' 將現在物件的引用釋放掉，以對下一個物件做動作。

Set Inst = Nothing

Loop Until TheName = ""

For Each MyObject In MyClasses	' 建立物件名稱清單。

NameList = NameList & MyObject.InstanceName & Chr(13)

Next MyObject

' 將名稱清單以訊息方塊顯示出來。

MsgBox NameList, , "Instance Names In MyClasses Collection"

For Num = 1 To MyClasses.Count	' 將各物件從集合物件中移除。

MyClasses.Remove 1	' 因為每移除一個物件後，集合物件

' 本身會自動重排物件順序，故迴圈中只需要移除第一個

Next	' 物件即可。

End Sub


Err 物件範例

本範例使用 Err 物件的各屬性，來建立一個顯示錯誤訊息的對話方塊。請注意，倘使您在使用 Raise 方法來產生 Visual Basic 的錯誤狀況之前有用到 Clear 方法，則 Err 物件的屬性值會變成 Visual Basic 的預設值。

Dim Msg

' 如果有錯誤狀況發生，就顯示錯誤訊息

On Error Resume Next	' 改變錯誤處理的方式。

Err.Clear

Err.Raise 6	' 產生一個溢位 (Overflow) 的錯誤狀況。

' 檢查錯誤代碼，顯示相關錯誤訊息。

If Err.Number <> 0 Then

Msg = "Error # " & Str(Err.Number) & " was generated by " _

& Err.Source & Chr(13) & Err.Description

MsgBox Msg, , "Error", Err.Helpfile, Err.HelpContext

End If


Collection 物件

��� [image] ��� [image] ��� [image] ��� [image] ���

Collection 物件是一個由項目所組成的有序集合，你可以把這個集合視為一個基本單位來引用。

請注意

Collection 物件提供一個簡便的方式，讓你可以將一群相關的項目視為單一物件來引用，在集合中的項目或成員唯一相關的地方就是 ── 它們都存在同一個集合中。集合中的成員不需要是同一種資料型態。

如同建立其它物件，你可以用同樣的方式來建立一個集合。例如：

Dim X As New Collection

在建立一個集合之後，可以用 Add 方法來新增成員或用 Remove 方法來移除成員。集合內特定的成員可以用 Item 方法來傳回，配合 For Each...Next陳述式的重覆效果就可以得到整個集合。


Debug 物件

��� [image] ��� [image] ��� [image] ��� [image] ���

Debug 物件會在執行階段將輸出傳送到Immediate 視窗。


Err 物件

��� [image] ��� [image] ��� [image] ��� [image] ���

含有關於執行階段錯誤的資訊。

請注意

Err 物件的屬性是由錯誤的產生者來設定。 這個產生者可能是 Visual Basic、某個物件、或是程式設計師。

Err 物件的內定屬性是 Number。由於這個內定屬性可以由 Err 這個物件名稱來表示，早期有用到 Err 函數或 Err 陳述式的程式碼並不須要做修改。

當一個執行階段錯誤發生時，物件的屬性會被填上一些資訊，這些資訊會指明是何種錯誤且會告訴你如何處理這個錯誤。想直接在你的程式碼中產生執行階段錯誤，請用 Raise 方法。

在經過錯誤處理常式內的 Exit Sub、Exit Function、Exit Property、或 Resume Next 陳述式後，Err 物件的屬性會被重設為零或長度為零的字串。若在錯誤處理常式之外使用任何形式的 Resume 陳述式，則將不會重設 Err 物件的屬性。想直接重設 Err 可使用 Clear 方法。

請用 Raise 方法為系統錯誤和物件類別模組來產生執行階段錯誤，而不要使用 Error 陳述式。想在其它地方使用 Raise 方法取決於欲傳回的資料量的多寡。

Err 物件本身就是一個擁有全域範圍的內建物件。你不須要在你的程式中為它建立一份執行個體。


^ 運算子範例

本範例使用 ^ 運算子來計算某數的次方值。

Dim MyValue

MyValue = 2 ^ 2	' 傳回 4。

MyValue = 3 ^ 3 ^ 3	' 傳回 19683。

MyValue = (-5) ^ 3	' 傳回 -125。


+ 運算子範例

本範例使用 + 運算子來計算數字的和。+ 運算子也可以用來做字串的串接動作。不過，最好還是使用 & 運算子來做字串的串接動作。如果 + 運算子兩邊的運算式中混著字串及數字的話，其結果會是數字的加總。如果都是字串作 [相加]，則傳回串接起來的字串。

Dim MyNumber, Var1, Var2

MyNumber = 2 + 2	' 傳回 4。

MyNumber = 4257.04 + 98112	' 傳回 102369.04。

Var1 = "34": Var2 = 6	' 設定混合運算式的變數值。

MyNumber = Var1 + Var2	' 傳回 40。

Var1 = "34": Var2 = "6"	' 設定變數為字串。

MyNumber = Var1 + Var2	' 傳回 "346"(字串被串接起來)。


- 運算子範例

本範例使用 - 運算子來計算兩數字的差。

Dim MyResult

MyResult = 4 - 2	' 傳回 2。

MyResult = 459.35 - 334.90	' 傳回 124.45。


* 運算子範例

本範例使用 * 運算子來計算兩數的乘積。

Dim MyValue

MyValue = 2 * 2	' 傳回 4。

MyValue = 459.35 * 334.90 	' 傳回 153836.315。


/ 運算子範例

本範例使用 / 運算子來計算浮點數除法。

Dim MyValue

MyValue = 10 / 4	' 傳回 2.5。

MyValue = 10 / 3	' 傳回 3.333333。


\ 運算子範例

本範例使用 \ 運算子來計算整數除法。

Dim MyValue

MyValue = 11 \ 4	' 傳回 2。

MyValue = 9 \ 3	' 傳回 3。

MyValue = 100 \ 3	' 傳回 33。


Mod 運算子範例

本範例使用 Mod 運算子來對兩數作除法運算，但傳回其餘數而非商數。如果兩數中有一數為浮點數，該數會先被四捨五入成整數後再進行運算。

Dim MyResult

MyResult = 10 Mod 5	' 傳回 0。

MyResult = 10 Mod 3	' 傳回 1。

MyResult = 12 Mod 4.3	' 傳回 0。

MyResult = 12.6 Mod 5	' 傳回 3。


& 運算子範例

本範例使用 & 運算子將字串串接起來。

Dim MyStr

MyStr = "Hello" & " World"	' 傳回 "Hello World"。

MyStr = "Check " & 123 & " Check"	' 傳回 "Check 123 Check"。


比較運算子之範例

本範例示範各種 [比較運算子] 的用法。這類運算子通常拿來做運算式結果的比較。

Dim MyResult, Var1, Var2

MyResult = (45 < 35)	' 傳回 False。

MyResult = (45 = 45)	' 傳回 True。

MyResult = (4 <> 3)	' 傳回 True。

MyResult = ("5" > "4")	' 傳回 True。

Var1 = "5": Var2 = 4	' 設定變數初值。

MyResult = (Var1 > Var2)	' 傳回 True。

Var1 = 5: Var2 = Empty

MyResult = (Var1 > Var2)	' 傳回 True。

Var1 = 0: Var2 = Empty

MyResult = (Var1 = Var2)	' 傳回 True。


And 運算子範例

本範例使用 And 運算子來做兩個運算式結果的邏輯連接 (logical conjunction)。

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' 設定變數初值。

MyCheck = A > B And B > C	' 傳回 True。

MyCheck = B > A And B > C	' 傳回 False。

MyCheck = A > B And B > D	' 傳回 Null。

MyCheck = A And B	' 傳回 8(位元比對的結果)。


Eqv 運算子範例

本範例使用 Eqv 運算子來做兩個運算式結果的邏輯等價 (logical equivalence)。

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' 設定變數初值。

MyCheck = A > B Eqv B > C	' 傳回 True。

MyCheck = B > A Eqv B > C	' 傳回 False。

MyCheck = A > B Eqv B > D	' 傳回 Null。

MyCheck = A Eqv B	' 傳回 -3(位元比對的結果)。


Imp 運算子範例

本範例使用 Imp 運算子來做兩個運算式結果的邏輯影隱含式 (logical implication)。

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' 設定變數初值。

MyCheck = A > B Imp B > C	' 傳回 True。

MyCheck = A > B Imp C > B	' 傳回 False。

MyCheck = B > A Imp C > B	' 傳回 True。

MyCheck = B > A Imp C > D	' 傳回 True。

MyCheck = C > D Imp B > A	' 傳回 Null。

MyCheck = B Imp A	' 傳回 -1(位元比對的結果)。


Not 運算子範例

本範例使用 Not 運算子來做兩個運算式結果的邏輯非 (logical negation)。

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' 設定變數初值。

MyCheck = Not(A > B)	' 傳回 False。

MyCheck = Not(B > A)	' 傳回 True。

MyCheck = Not(C > D)	' 傳回 Null。

MyCheck = Not A	' 傳回 -11(位元比對的結果)。


Or 運算子範例

本範例使用 Or 運算子來做兩個運算式結果的邏輯分離 (logical disjunction)。

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' 設定變數初值。

MyCheck = A > B Or B > C	' 傳回 True。

MyCheck = B > A Or B > C	' 傳回 True。

MyCheck = A > B Or B > D	' 傳回 True。

MyCheck = B > D Or B > A	' 傳回 Null。

MyCheck = A Or B	' 傳回 10(位元比對的結果)。


Xor 運算子範例

本範例使用 Xor 運算子來做兩個運算式結果的邏輯互斥 (logical exclusion)。

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' 設定變數初值。

MyCheck = A > B Xor B > C	' 傳回 False。

MyCheck = B > A Xor B > C	' 傳回 True。

MyCheck = B > A Xor C > B	' 傳回 False。

MyCheck = B > D Xor A > B	' 傳回 Null。

MyCheck = A Xor B	' 傳回 2(位元比對的結果)。


Like 運算子範例

本範例使用 Like 運算子做字串的模式比對。

Dim MyCheck

MyCheck = "aBBBa" Like "a*a"	' 傳回 True。

MyCheck = "F" Like "[A-Z]"	' 傳回 True。

MyCheck = "F" Like "[!A-Z]"	' 傳回 False。

MyCheck = "a2a" Like "a#a"	' 傳回 True。

MyCheck = "aM5b" Like "a[L-P]#[!c-e]"	' 傳回 True。

MyCheck = "BAT123khg" Like "B?T*"	' 傳回 True。

MyCheck = "CAT123khg" Like "B?T*"	' 傳回 False。


Is 運算子範例

本範例使用 Is 運算子來比較兩個物件引用。範例中的物件變數名稱只是做說名用途之一般性名稱而已。

Dim MyObject, YourObject, ThisObject, OtherObject, ThatObject, MyCheck

Set YourObject = MyObject	' 指定物件引用。

Set ThisObject = MyObject

Set ThatObject = OtherObject

MyCheck = YourObject Is ThisObject	' 傳回 True。

MyCheck = ThatObject Is ThisObject	' 傳回 False。

' 假設 MyObject <> OtherObject

MyCheck = MyObject Is ThatObject	' 傳回 False。


運算子摘要

���

運算子	說明
算術運算子	用來執行數學計算的運算子。
比較運算子	用來執行比較的運算子。
連結運算子	用來合併字串的運算子。
邏輯運算子	用來執行邏輯運算的運算子。


運算子優先順序

��� [image] ���

當一個運算式中有數個動作發生時，各部分的動作會在預先決定的順序下完成，而此順序就是運算子的優先順序。

當運算式中有超過一種運算子時，會先執行算術運算子，其次是比較運算子，而後才是邏輯運算子。比較運算子的優先順序全都是相同的，也就是說依照出現的順序由左到右依序執行。而算術和邏輯運算子則必須依照下列的優先順序，依序執行：

算術	比較	邏輯
指數運算(^)	相等(=)	Not
負數(-)	不等(<>)	And
乘法和除法(*、 /)	小於(<)	Or
整數除法(\)	大於(>)	Xor
餘數運算(Mod)	小於或相等(<=)	Eqv
加法和減法(+、 -)	大於或相等(>=)	Imp
字串連結(&)	Like Is
若乘法和除法同時存在於運算式中，則計算時的順序就是依照其左右位置來決定。同樣地，若加法和減法同時存在於一個運算式中，計算時的順序就是依照其左右位置來決定。括號則可推翻優先順序的等級，並且強迫運算式的某些部分必須優先執行。括號內要比括號外部的先執行。然而，括號中運算子的優先順序與正常情況是一樣的。

字串連結運算子(&)不是算術運算子，但是在優先順序上它會落在所有算術運算子之後，且在所有比較運算子之前。

Like 的優先順序和所有比較運算子相同，但它實際上是屬於模式比對運算子。

Is 運算子是一個物件引用比較運算子。它並非比較物件或是它們的值；而是檢查兩個物件是否引用到相同的物件。


算術運算子

^ 運算子

* 運算子

/ 運算子

\ 運算子

Mod 運算子

+ 運算子

- 運算子


連結運算子

& 運算子

+ 運算子


邏輯運算子

And 運算子

Eqv 運算子

Imp 運算子

Not 運算子

Or 運算子

Xor 運算子


^ 運算子

��� [image] ���

用來使一個數字提升成為指數的次方數。

語法

result = number^exponent

^ 運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
number	必要引數；任意的數值運算式。
exponent	必要引數；任意數值運算式。
請注意

只有當 exponent 是整數值時，Number 才可以是負數。當在單一運算式中要執行超過一個指數運算時，^ 運算子的計算順序是從左到右依序進行。

result 的資料型態通常是 Double或是有 Double 的 Variant。然而，若 number 或 exponent 中有任何一個是 Null運算式時，則 result 也將會是 Null。


+ 運算子

��� [image] ���

用來加總兩個數目。

語法

result = expression1+expression2

+ 運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
expression1	必要引數；任意的運算式。
expression2	必要引數；任意的運算式。
請注意

使用 + 運算子時，您並無法確定發生的是加法或是字串連結。所以您最好使用 & 運算子來做連結，如此可避免混淆，並且增加程式碼的可讀性。

若至少有一個運算式不是 Variant時，則可運用以下的法則：

如果	則
兩個運算式都是數值資料型態 (Byte、Boolean、Integer、Long、Single、Double、Date、Currency 或是 Decimal)	相加。
兩個運算式都是 String	相連結。
一個運算式是數值資料型態而另一個是 Null 以外的任意 Variant。	相加。
一個運算式是 String 而另一個是 Null 以外的任意 Variant。	相連結。
有一個運算式是 Empty Variant	傳回另一個運算式做為 result。
一個運算式是數值資料型態，而另一個是 String	會產生一個 [型態不符合] 的錯誤。
每個運算式都是 Null	result 是 Null。
若兩個運算式都是 Variant 運算式，則將會運用以下的準則：

如果	則
兩個 Variant 運算式都是數字	相加。
兩個 Variant 運算式都是字串	相連結。
一個 Variant 運算式是數字而另一個是字串	相加。
對於只有數值資料型態運算式的單純加法運算而言，result 的資料型態常與精確度最高的運算式相同。而精確度由小到大的順序是 Byte、Integer、Long、Single、Double、Currency 和 Decimal。但下列是這個順序的例外：

如果	則 result 為
一個 Single 和一個 Long 相加，	一個 Double。
result 的資料型態是 Long、Single 或是 Date 變數，且超過本身的正確範圍時，	轉換成 Double 變數。
result 的資料型態是 Byte 變數，且超過本身的正確範圍時，	轉換成 Integer 變數。
result 的資料型態是 Integer 變數，且超過本身的正確範圍時，	轉換成 Long 變數。
將一個 Date 加到任意的資料型態上，	一個 Date.
若其中有一個或兩個運算式都是 Null 運算式，則 result 為 Null。若兩個運算式都是 Empty，則 result 是一個 Integer。然而，若只有一個運算式是 Empty，則另一個運算式會原封不動地被傳回來當成  result。

附註   加法和減法運算時所使用的精確度等級，與乘法運算時所使用的精確度等級不一樣。


- 運算子

��� [image] ���

用來取得兩個數目的差或是表示一數值運算式的負值。

語法 1

result = number1 - number2

語法 2

- number

-  運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
number	必要引數；任意的數值運算式。
number1	必要引數；任意的數值運算式。
number2	必要引數；任意的數值運算式。
請注意

在語法 1 中，- 運算子是算術減法運算子，用來得到兩個數目之間的差額。在語法 2 中，- 運算子用來當成負值的運算子，可指定一個運算式的負值。

result 的資料型態通常與精確度最高的運算式相同。而精確度由小到大的順序是  Byte、Integer、Long、Single、Double、Currency和 Decimal。但以下是例外：

如果	則 result 為
當減法運算中有一個 Single 和一個 Long，	轉換成一個 Double。
result 的資料型態是一個 Long、Single 或 Date變數，且超過本身的正確範圍，	轉換成有 Double 的 Variant。
result 的資料型態是一個 Byte 變數，且超過本身的正確範圍，	轉換成一個 Integer 變數。
result 的資料型態是一個 Integer 變數，且超過本身的正確範圍，	轉換成一個 Long 變數。
減法運算中有 Date 和其它任意的資料型態，	一個 Date。
減法運算中有兩個 Date 運算式，	一個 Double。
若其中有一個或兩個運算式都是 Null運算式，則 result 為 Null。若一個運算式是 Empty，則會被當成 0。

附註   加法和減法運算時所使用的精確度等級，與乘法運算時所使用的精確度等級不一樣。


* 運算子

��� [image] ���

用來相乘兩個數目。

語法

result = number1*number2

* 運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
number1	必要引數；任意的數值運算式。
number2	必要引數；任意的數值運算式。
請注意

result 的資料型態通常與最精密的運算式相同。而精確度由最小到最大的順序是  Byte、Integer、Long、Single、Currency、Double和 Decimal。但以下是例外：

如果	則 result 為
乘法運算有一個 Single和一個 Long，	轉換成 Double。
result  的資料型態是 Long、Single 或 Date 變數，且超出本身的正確範圍，	轉換成有 Double 的 Variant。
result 的資料型態是 Byte 變數，且它超出本身的正確範圍，	轉換成 Integer 變數。
result 的資料型態是 Integer 變數，且它超出本身的正確範圍，	轉換成 Long 變數。
若其中有一個或是兩個運算式都是 Null運算式，則 result 為 Null。若一個運算式是 Empty，則會被當成 0。

附註   乘法運算所使用的精確度等級，與加法和減法運算所使用的精確度等級不一樣。


/ 運算子

��� [image] ���

用來對兩個數作相除，並且傳回一個浮點數。

語法

result = number1/number2

/ 運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
number1	必要引數；任意的數值運算式。
number2	必要引數；任意的數值運算式。
請注意

result 的資料型態通常是 Double或是 Double 變數。但以下是例外：

如果	則 result 為
兩個運算式都是 Byte、Integer或Single運算式時，	一個 Single， 除非它已經超過了本身的正確範圍；一旦發生這種情況，就會造成錯誤。
兩個運算式都是 Byte、Integer 或是Single 變數，	一個 Single  變數，除非它已經超過了本身的正確範圍；一旦發生這種情況， result 是一個有 Double 的 Variant。
除法運算中有一個 Decimal及其它任意的資料型態，	一個 Decimal 資料型態。
若其中有一個或是兩個運算式都是 Null運算式，則result 為 Null。任何一個運算式是 Empty 時，它會被當成 0。


\ 運算子

��� [image] ���

用來對兩個數作相除，並且傳回一個整數。

語法

result = number1\number2

\ 運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
number1	必要引數；任意的數值運算式。
number2	必要引數；任意的數值運算式。
請注意

在執行除法運算之前，這種數值運算式必須是 Byte、Integer 或是 Long運算式。

通常，result  的資料型態為 Byte、Byte 變數、Integer、Integer 變數、 Long 或是 Long 變數，而不管 result 是否為一個整數。任何的小數部分都會被刪除。然而，若有任一個為 Null的運算式出現時，result 都將是 Null。若有運算式是 Empty型態，則它會被當作 0。


Mod 運算子

��� [image] ���

用來對兩個數作相除，並且只傳回其餘數。

語法

result = number1 Mod number2

Mod 的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
number1	必要引數；任意的數值運算式。
number2	必要引數；任意的數值運算式。
請注意

在 Mod 運算時，這個運算子會把 number1 除以 number2 (將浮點數字四捨五入成整數)，並且把餘數傳回當成 result 的值。例如，在下列的 運算式中，A (即 result) 將會等於 5。

A = 19 Mod 6.7

一般來說，result 的資料型態為 Byte、Byte 變數、 Integer、Integer 變數、 Long 或是一個有 Long 的 Variant，而不管 result 是否為一個整數。任何小數的部分都會被刪除。然而，若有任一個為 Null型態的運算式出現時，result 都將會是 Null。若有運算式是 Empty 型態，則它會被當成 0。


& 運算子

��� [image] ���

用來對兩個運算式作強迫字串連結。

語法

result = expression1 & expression2

& 運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的 String或是 Variant變數。
expression1	必要引數；任意的運算式。
expression2	必要引數；任意的運算式。
請注意

當 expression 不是字串時，它將會被轉換成 String 變數。如果兩個運算式都是字串運算式，則 result 的資料型態是 String；否則 result 會是 String變數。若兩個運算式都是 Null，則 result 也會是 Null。然而，如果只有一個 expression 是 Null，則在與其它運算式連結時，它都會被當成長度為零的字串("")。任何型態為 Empty 的運算式也都將當成長度為零的字串。


比較運算子

��� [image] ���

用來比較運算式。

語法

result = expression1 comparisonoperator expression2

result = object1 Is object2

result = string Like pattern

比較運算子具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
expression	必要引數；任意的運算式。
comparisonoperator	必要引數；任意的比較運算子。
object	必要引數；任意的物件名稱。
string	必要引數；任意的字串運算式。
pattern	必要引數；任意的字串運算式或是字元的範圍。
請注意

下列表格中有一系列的比較運算子，和決定 result 是 True、False 或 Null的條件：

運算子	True if	False if	Null if
< (小於)	expression1 < expression2	expression1 >= expression2	expression1 or expression2 = Null
<= (小於或等於)	expression1 <= expression2	expression1 > expression2	expression1 or expression2 = Null
> (大於)	expression1 > expression2	expression1 <= expression2	expression1 or expression2 = Null
>= (大於或等於)	expression1 >= expression2	expression1 < expression2	expression1 or expression2 = Null
= (等於)	expression1 = expression2	expression1 <> expression2	expression1 or expression2 = Null
<> (不等於)	expression1 <> expression2	expression1 = expression2	expression1 or expression2 = Null
附註   Is 和 Like 運算子有指定的比較功能，它們不同於表格中的運算子。

當比較兩運算式時，您可能難以確定將要比較的運算式是數字或是字串。以下的表格顯示出如何比較運算式，以及當其中一個運算式不是 Variant 時，比較之後的結果。

如果	則
兩個運算式都是數值資料型態(Byte、Boolean、Integer、Long、Single、Double、Date、Currency 或Decimal)	執行數字比較。
兩個運算式都是 String	執行字串比較。
一運算式是數值資料型態而另一是數字 Variant 、或可以為一數字	執行數字比較。
一運算式是數值資料型態而另一是字串的 Variant ，它不可被轉換成一數字	會發生 Type Mismatch 的錯誤。
一運算式是 String 而另一個是除了 Null 以外任意的Variant	執行字串比較。
一運算式是 Empty 而另一個是數值資料型態	執行數字比較，使用 0 當成 Empty 運算式。
一運算式是 Empty 而另一個是String	執行字串比較，使用長度為零的字串 ("") 當成 Empty 運算式。
若 expression1 和 expression2 兩者都是 Variant 運算式， 則它們潛在的型態決定了它們是如何作比較。下列的表格顯示出如何比較運算式，以及比較後得到的結果，此結果取決於 Variant 的潛在型態：

如果	則
兩個 Variant 運算式都是數字	執行數字比較。
兩個 Variant 運算式都是字串	執行字串比較。
一個 Variant 運算式是數字而另一個是字串	數字運算元小於字串運算元。
一個 Variant 運算式是 Empty 而另一個是數字	執行數字比較，使用 0 當成 Empty 運算式。
一個 Variant 運算式是 Empty 而另一個是字串	執行字串比較，使用長度為零的字串 ("") 當成 Empty 運算式。
兩個 Variant 運算式都是 Empty	這些運算式相等。
當一個 Single與一個 Double 要做比較時，此 Double 會捨去部分而與此Single 有相同的精確度。

若一個 Currency 要與一個 Single 或是 Double 做比較，則此 Single 或 Double 會轉換成一個 Currency。相類似的，當一個 Decimal 要與一個 Single 或是 Double 做比較時，則此 Single 或 Double 會轉換成一個 Decimal。在 Currency 的情況下， 將會捨棄任何小於 .0001 的小數，而在 Decimal 的情況下，將會捨棄任何小於 1E-28 的小數，或者會發生溢位的錯誤。這樣的小數部分捨棄會使得原本不相等的兩個數值在比較後的結果是相等的。


And 運算子

��� [image] ���

用來執行在兩個運算式上的邏輯連結。

語法

result = expression1 And expression2

And 運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
expression1	必要引數；任意的運算式。
expression2	必要引數；任意的運算式。
請注意

只有當兩個運算式的結果都是 True，result 才會是 True。若其中有一個運算式的結果是 False，則 result 會是 False。下列的資料表說明如何決定 result：

如果 expression1 為	且 expression2 為	則 result 為
True	True	True
True	False	False
True	Null	Null
False	True	False
False	False	False
False	Null	False
Null	True	Null
Null	False	False
Null	Null	Null
And 運算子也會執行位元比較，此運算式會對兩個數值運算式中相同位置的位元做比較；並根據下表對位於 result 的相對位元作設定：

如果在 expression1 的位元為	且在 expression2 中的位元為	result 為
0	0	0
0	1	0
1	0	0
1	1	1


Eqv 運算子

��� [image] ���

用來執行於兩個運算式上的邏輯相等。

語法

result = expression1 Eqv expression2

Eqv 運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
expression1	必要引數；任意的運算式。
expression2	必要引數；任意的運算式。
請注意

如果其中有一個運算式是 Null 型態，則 result 也會是 Null。 若運算式都不是 Null，則 result 根據下表來決定：

如果 expression1 為	且 expression2 為	則 result 為
True	True	True
True	False	False
False	True	False
False	False	True
Eqv 運算子會執行位元比較，這種運算會對兩個數值運算式中相同位置的位元做比較，並且根據下表，對位於 result 的相對位元做設定：

如果在 expression1 的位元為	且在 expression2 中的位元為	result 為
0	0	1
0	1	0
1	0	0
1	1	1


Imp 運算子

��� [image] ���

用來執行於兩個運算式上的邏輯關聯。

語法

result = expression1 Imp expression2

Imp 運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
expression1	必要引數；任意的運算式。
expression2	必要引數；任意的運算式。
請注意

下列的表格說明如何決定 result：

如果 expression1 為	且 expression2 為	則 result 為
True	True	True
True	False	False
True	Null	Null
False	True	True
False	False	True
False	Null	True
Null	True	True
Null	False	Null
Null	Null	Null
Imp 運算子會執行位元比較，這種運算會對兩個數值運算式中相同位置的位元做比較，並且根據下表，對位於 result 的相對位元做設定：

如果在 expression1 的位元為	且在 expression2 中的位元為	result 為
0	0	1
0	1	1
1	0	0
1	1	1


Not 運算子

��� [image] ���

用來執行對一運算式的邏輯否定。

語法

result = Not expression

Not 運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
expression	必要引數；任意的運算式。
請注意

下表說明如何決定 result：

如果 expression 為	則 result 為
True	False
False	True
Null	Null
另外，Not 運算子會轉變任何變數的位元值，並且根據下表來設定 result 中相對應的位元：

如果在 expression 的位元為	則在 result 中的位元為
0	1
1	0


Or 運算子

��� [image] ���

用來在兩個運算式上執行一邏輯分離的動作。

語法

result = expression1 Or expression2

Or 運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
expression1	必要引數；任意的運算式。
expression2	必要引數；任意的運算式。
請注意

如果兩個運算式中有一個或是兩者都是 True，則 result 是 True。下列的表格說明如何決定 result：

如果 expression1 為	且 expression2 為	則 result 為
True	True	True
True	False	True
True	Null	True
False	True	True
False	False	False
False	Null	Null
Null	True	True
Null	False	Null
Null	Null	Null
Or 運算子也會執行位元比較，此運算式會對兩個數值運算式中相同位置的位元做比較；並根據下表對位於 result 的相對位元作設定：

如果在 expression1 的位元為	且在 expression2 中的位元為	result 為
0	0	0
0	1	1
1	0	1
1	1	1


Xor 運算子

��� [image] ���

用來在兩個運算式上做邏輯互斥。

語法

[result =] expression1 Xor expression2

Xor 運算子的語法具有以下幾個單元：

單元	說明
result	選擇性引數；任意的數字變數。
expression1	必要引數；任意的運算式。
expression2	必要引數；任意的運算式。
請注意

如果運算式中只有一個的結果是 True，則 result 是 True。然而，若運算式中有一個是 Null，則 result 也將會是 Null。當兩個運算式都不是 Null，則 result 將根據下表來決定：

如果 expression1 為	且 expression2 為	則 result 為
True	True	False
True	False	True
False	True	True
False	False	False
Xor 可同時執行邏輯與位元運算子的運算。兩運算式的位元比較會如下表所示，以互斥-或的邏輯來得到結果：

如果 expression1 為	且 expression2 為	則 result 為
0	0	0
0	1	1
1	0	1
1	1	0


Is 運算子

��� [image] ���

用來比較兩個物件的引用變數。

語法

result = object1 Is object2

Is 運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
object1	必要引數；任意的物件名稱。
object2	必要引數；任意的物件名稱。
請注意

若 object1 和 object2 兩者引用相同的物件，則 result 為 True；如果不是的話，則 result 為 False。 在很多方法下，將兩個變數引用到相同的物件。

在下列的範例中，A 已被設定成與 B 引用相同的物件：

Set A = B

下列的範例會使 A 及 B 引用相同的的物件 C：

Set A = C

Set B = C


Like 運算子

��� [image] ���

用來比較兩個字串。

語法

result = string Like pattern

Like 運算子的語法具有以下幾個單元：

單元	說明
result	必要引數；任意的數字變數。
string	必要引數；任意的字串運算式。
pattern	必要引數；任意的字串運算式，遵循 [請注意] 中所描述模式比對的規格。
請參閱

如果 string 符合 pattern，則 result 為 True； 如果不符合，則 result 為 False。但是如果 string 或 pattern 中有一個是 Null， 則 result 為 Null。

Like 運算子的動作會隨著 Option Compare 陳述式而不同。每個模組的預設字串比較方法是 Option Compare Binary。

在字串比較中，Option Compare Binary 的結果是根據字元內部的二進位表示法排序順序而得出。排列順序是由代碼頁來決定。下列的範例是顯示傳統二進位的排列順序：

A < B < E < Z < a < b < e < z < _ < _ < _ < _ < _ < �

在字串比較中，Option Compare Text 的結果是根據本文中字元的大小寫排列順序，而這種排列順序是由您系統所設定的地區決定。當你使用Option Compare Text 來排序相同的字元，則會產生下列的文字順序：

(A=a) < (_=_) < (B=b) < (E=e) < (_=_) < (Z=z) < (_=_)

內建的模式比對功能在字串比較上提供了多用途的工具。模式比對功能可以讓你使用萬用字元、字元串列或字元範圍的任何組合來比對字串。下列表格顯示出可以在 pattern 中使用的字元和它們在字串中符合的情形：

pattern 中的字元	符合 string 中的
?	任意的單一字元。
*	零個以上的字元。
#	任一個數字(0-9)。
[charlist]	在 charlist.中的任一字元。
[!charlist]	不在 charlist 中的任一字元。
被中括號([ ])所圍起來的一個或多個字元(charlist)所組成的群，它可以用來與 string 中的任一字元核對，並且可以包含幾乎全部的字元碼，以及數字。

附註   左括號 ([)、問號 (?)、數字符號 (#)和星號 (*) 等特殊字元可以直接用來和在方括號內的它們本身相核對。然而右括號 (]) 卻不能在一個群組內和自己核對；但可以在群組外面，當作個別的字元來用。

在範圍的上限與下限之間用連字號 (-)，則 charlist 可以指定字元的範圍。如[A-Z]的例子，會使得在 string 中相對位置的字元，有在範圍 A 中的任意大寫字母，則會產生符合的結果。在括號內可以有多個範圍，而且不需要界定符號。

指定範圍的意義是依照執行階段中有效的字元順序 (如同在 Option Compare 和程式碼執行時系統的地區設定來決定)。在 Option Compare Binary 例子， 範圍[A]裡有 A、 B 及 E符合。而在 Option Compare Text 的例子，[A] 裡則有 A、 a、 嚏B 遄A B、 b、 E、 e符合。_ 或 _ 並不符合此範圍，因為重音字元的排序順序是在非重音字元之後。

下列是其它格式核對的重要規則：:

•	在 charlist 中開始的驚歎號 (!) 是表示：如果在 string 中發現有任何不在charlist 中的字元，則為符合的結果。若驚嘆號使用在括號外面，則它與自己相符合。

•	連字號 (-) 可以出現在 charlist 的開始 (若使用驚嘆號，則需在驚嘆號的後面) 或結束的地方，用來與自身相符合。而在任何其它地方，這種連字號是用來指示字元的範圍。

•	當指定字元範圍時，它們必須依照遞增的排列順序 (從最小到最大) 出現。[A-Z] 是有效的格式，但 [Z-A] 則不是。

•	若出現 [] 順序的字元，則應忽略；它會被當成是一個長度為零的字串("")。

某些語言中，在字母裏會有一些特殊字元，它們實際上是表示兩個分開的字元。例如，某些語言會用 "_" 來表示字元 "a" 與 "e" 的同時出現。Like 運算子會認定單一的特殊字元和兩個各別的字元相等。

當一個使用特殊字元的語言在系統地區設定時被指定時，則在 pattern 或 string 中出現的單一特殊字元將會與其他字串中對等的兩個字元順序產生符合。同樣地，在括號圍起來的 pattern 中如含有單一特殊字元 (在字元本身、字元串列或字元範圍) 將符合 string 中對等的兩個字元順序。


Count 屬性範例

本範例使用 Collection 物件的 Count 屬性，來指出要將 MyClasses 集合物件中所有成員全部移除所需執行的次數 (一次移除一個)。當集合物件以數字做索引值時，預設方式是數值 1 代表第一個成員。因為集合物件的成員若被移除，便會自動重新編排索引值，所以下列程式碼中只在迴圈中連續移除第一個成員，最後即可移除所有成員。

Dim Num, MyClasses

For Num = 1 To MyClasses.Count	' 移除集合物件裏的成員。

MyClasses.Remove 1	' 集合物件索引值預設方式為由 1 開始。

Next


Description 屬性範例

本範例將一個使用者自訂的訊息，指定給 Err 物件的 Description 屬性。

Err.Description = "It was not possible to access an object necessary " _

& "for this operation。"


HelpContext 屬性範例

本範例使用 Err 物件的 HelpContext 屬性，來顯示 Visual Basic 對於 [溢位] (Overflow) 錯誤的說明內容。

Dim Msg

Err.Clear

On Error Resume Next

Err.Raise 6 ' 產生 [溢位] 錯誤。

If Err.Number <> 0 Then

Msg = "Press F1 or HELP to see " & Err.HelpFile & " topic for" & _

" the following HelpContext: " & Err.HelpContext

MsgBox Msg, , "Error: " & Err.Description, Err.HelpFile, _

Err.HelpContext

End If


HelpFile 屬性範例

本範例使用 Err 物件的 HelpFile 屬性，來啟動說明系統。HelpFile 屬性預設值為 Visual Basic 說明檔之檔名。

Dim Msg

Err.Clear

On Error Resume Next	' 改變錯誤處理的方式。

Err.Raise 6	' 產生 [溢位] 錯誤。

Msg = "Press F1 or HELP to see " & Err.HelpFile & _

" topic for this error"

MsgBox Msg, , "Error: " & Err.Description,Err.HelpFile, Err.HelpContext


LastDLLError 屬性範例

當您將之複製到一個 UserForm 模組中時，下列程式碼會試圖呼叫某個 DLL (動態連結程式庫) 裏的函數。該呼叫會失敗，因為程式中故意傳入一個會產生錯誤的引數值 (傳入一 NULL 指標)。而且 SQL 如果沒有在執行的話，便無法取消它的作業。程式中接下來會檢查該函數的傳回值，並將 Err 物件的 LastDLLError 屬性值顯示出來。如系統中沒有DLLs，LastDLLError一定會傳回0。

Private Declare Function SQLCancel Lib "ODBC32.dll" _

(ByVal hstmt As Long) As Integer

Private Sub UserForm_Click()

Dim RetVal

' 呼叫函數，但傳入錯誤的引數值。

RetVal = SQLCancel(myhandle&)

' 檢查 SQL 的傳回值。

If RetVal = -2 Then

'顯示錯誤代碼。

MsgBox "Error code is :" & Err.LastDllError

    End If

End Sub


Number 屬性範例

第一個範例示範 Number 屬性在錯誤處理程序中的一般用法。第二個範例則檢查 Err 物件的 Number 屬性，以確定由某個 Automation 物件所傳回的錯誤代碼為該物件定義的，或是 Visual Basic 所定義的。請注意，常數 vbObjectError 為一個絕對值很大之負數，通常由 OLE Automation 物件所定義的錯誤代碼會加上這個值，而由 Visual Basic 所定義的就不會。所以，將 Err.Number 減去 vbObjectError 後便可判斷是否為 OLE Automation 物件定義的錯誤代碼 (參考程式碼中的註解)。範例中如果錯誤代碼為 OLE Automation 物件定義的，則該錯誤代碼便是 MyError 的值，並會和錯誤來源一起顯示出來。如果 Err.Number 為 Visual Basic 定義的錯誤代碼，則只將 Visual Basic 錯誤代碼顯示出來。

' Number 屬性的一般用法

Sub test()

On Error GoTo out

Dim x, y

x = 1 / y	' 產生一個 [除以零] 的錯誤

Exit Sub

out:

MsgBox Err.Number

MsgBox Err.Description

' 檢查是否發生 [除以零] 的錯誤

If Err.Number = 11 Then

y = y + 1

End If

Resume

End Sub

' 使用 Number 屬性來判斷 Automation 物件傳回的錯誤代碼

Dim MyError, Msg

' 首先，減去 OLE Automation 物件所加上的常數。

MyError = Err.Number - vbObjectError

' 如果減去常數 vbObjectError 後的值仍然在

' 0 到 65,535 之間，便是 OLE Automation 物件定義的錯誤代碼。

If MyError > 0 And MyError < 65535 Then

Msg = "The object you accessed assigned this number to the error: " _

 	& MyError & ". The originator of the error was: " _

& Err.Source & ". Press F1 to see originator's Help topic。"

' 否則便是 Visual Basic 定義的錯誤代碼。

Else

Msg = "This error (# " & Err.Number & ") is a Visual Basic error" & _

" number. Press Help button or F1 for the Visual Basic Help" _

& " topic for this error."

End If

MsgBox Msg, , "Object Error", Err.HelpFile, Err.HelpContext


Source 屬性範例

本範例將某個由 Visual Basic 產生的 Automation 物件之程式設計識別碼 (Programmatic ID) 存到變數 MyObjectID 中，並在程式使用 Raise 方法來產生一錯誤狀況時，將之存入 Err 物件的 Source 屬性中。在錯誤處理程序中，請不要在程式中使用 Source 屬性 (或 Number 除外的 Err 物件屬性)。只有在程式無法處理該錯誤時，才要使用 Number 以外的屬性將詳細的錯誤訊息顯示給使用者。該範例假設App和MyClass都是有效引用。

Dim MyClass, MyObjectID, MyHelpFile, MyHelpContext

' 某個 MyClass 型態的物件產生一個錯誤，並設定 Err 物件

' 的屬性值，包括 Source(記錄 MyObjectID － 為 App 物件

' 的 Title 屬性及 MyClass 物件的 Name 屬性之組合)。

MyObjectID = App.Title & "." & MyClass.Name

Err.Raise	Number := vbObjectError + 894, Source := MyObjectID, _

Description := "Was not able to complete your task", _

HelpFile := MyHelpFile, HelpContext := MyHelpContext


Calendar屬性

��� [image] ��� [image] ���

傳回或設定一個值，指定專案中使用日曆的類型。

可以為Calendar使用下列設定之一：

設定	值	描述
vbCalGreg	0	使用Gregorian日曆 (預設)。
vbCalHijri	1	使用 Hijri日曆。
請注意

只能利用程式設定 Calendar屬性。例如，要使用 Hijri日曆，使用：

Calendar = vbCalHijri


Count 屬性

��� [image] ��� [image] ���

傳回一個 Long (長整數)，等於在一個集合物件中的物件數目。唯讀。


Description 屬性

��� [image] ��� [image] ���

傳回或設定一個字串運算式。其內容是和物件有關係的敘述字串。可讀或寫。

對於 Err 物件，則傳回或設定和錯誤有關係的敘述字串。

請注意

Description 屬性的設定包含一個關於錯誤的簡短鈙述。當您無法或不想處理一個錯誤的時候，您可以使用這個屬性來提醒使用者。當要產生一個使用者自訂的錯誤時，您可以針對此錯誤指定一個簡短的敘述到 Description 屬性之中。如果 Description 沒有填入資料，而且當錯誤產生的時候，Number 的值正好符合 Visual Basic 執行階段錯誤，那麼由 Error 函數所傳回的字串會放在此 Description 中。


HelpContext 屬性

��� [image] ��� [image] ���

傳回或設定一個字串運算式以表示在 Microsoft Windows 說明檔案中，某個主題裏的內文ID。可讀或寫。.

請注意

HelpContext 屬性是用來自動顯示 HelpFile 屬性裏所指定的說明主題。如果 HelpFile 和 HelpContext 都是空的，那麼就會檢查 Number 的值。如果 Number 的值符合 Visual Basic 執行階段錯誤，那麼就會使用這個錯誤的的 Visual Basic 說明主題代碼。如果 Number 的值不符合 Visual Basic 錯誤代碼，那麼 Visual Basic說明檔案的內容視窗將會出現。.

附註   您應該在您的應用程式裏放入一些例行的程式片段來處理常見的錯誤。當您在使用物件來設計程式時，您可以使用該物件的說明檔案，以增強您的程式在錯誤處理上的品質，或是對您的使用者顯示一些有意義的訊息，特別是當錯誤是無法復原的時候。


HelpFile 屬性

��� [image] ��� [image] ���

傳回或設定一個 字串運算式來表示 Microsoft Windows 說明檔案的完整定位路徑。可讀或寫。

請注意

如果HelpFile 裏有指定特定的說明檔案，那麼當使用者在錯誤訊息對話方塊按下 Help 按鈕(或 F1 鍵 在Windows或在Macintosh中HELP鍵)時，該說明檔案會自動被呼叫使用。如果 HelpContext 屬性包含一個被指定檔案的內文ID，那麼主題將會被自動顯示出來。如果沒有任何 HelpFile 被指定，那麼 Visual Basic說明檔案會被顯示出來。

附註   您應該在您的應用程式裏放入一些例行的程式片段來處理常見的錯誤。當您在使用物件來設計程式時，您可以使用該物件的說明檔案，以增強您的程式在錯誤處理上的品質，或是對您的使用者顯示一些有意義的訊息，特別是當錯誤是無法復原的時候。


LastDLLError 屬性

��� [image] ��� [image] ���

傳回由呼叫動態連結程式庫(DLL)後所產生的系統錯誤代碼。唯讀。在Macintosh中，LastDLLError總是傳回 0。

請注意

LastDLLError 屬性只適用於 Visual Basic 程式裏產生的 DLL 呼叫。當此種呼叫產生時，被呼叫的函數通常會傳回一個代碼來表明結果是成功或是失敗，同時 LastDLLError 屬性會被填上資料。請檢查 DLL 函數的文件說明，來得知何者是表示成功的傳回值，及表示失敗的傳回值。只要表示失敗的代碼一被傳回，Visual Basic 的應用程式應該立即檢查此 LastDLLError 屬性。毫無例外的， LastDLLError 屬性都會被設定。


Number 屬性

��� [image] ��� [image] ���

傳回或設定一個表示錯誤的數字。Number 是 Err 物件的預設屬性。可讀或寫。

請注意

當一個物件要傳回使用者自訂的錯誤時，請用如下的方法來設定 Err.Number。將您所選來作為錯誤代碼的數字和 vbObjectError 常數相加。例如，您可以使用下列的程式碼來傳回 1051 這個數字作為錯誤代碼：

Err.Raise Number := vbObjectError + 1051, Source:= "SomeClass"


Source 屬性

��� [image] ��� [image] ���

傳回或設定一個字串運算式以指明產生錯誤的來源物件名稱或應用程式名稱。可讀或寫。

請注意

Source 屬性是一個用來表示產生錯誤之物件的字串運算式，此運算式通常是這個物件的物件類別名稱或程式設計識別碼，請使用 Source 來提供訊息，如果您的程式碼無法處理您所存取之物件所產生的錯誤，舉例來說，如果您存取 Microsoft Excel，而且它產生了一個 [除以 0] 的錯誤，Microsoft Excel 會設定 Err.Number 為代表此項錯誤的錯誤代碼，並且設定 Source 為 Excel.Application。

當程式碼產生一個錯誤時，Source 就是您應用程式的程式設計識別碼。對於物件類別模組，Source 應該包含一個project.class 型態的名稱。當您的程式碼發生無法預期的錯誤時，此 Source 屬性會自動被填上資料。對於在一般模組所發生的錯誤，Source 含有專案名稱。對於在物件類別模組裏所發生的錯誤，Source 含有 project.class 型態的名稱。


DeleteSetting 陳述式範例

下列範例先使用 SaveSetting 陳述式，來建立 Windows 註冊區 (或 16-位元 Windows 平台的 .INI 檔案) 裏 MyApp 程式的項目，然後使用 DeleteSetting 陳述式將之移除。因為沒有指定 key 引數，整個區段都會被移除掉，包括區段名稱及其所有的機碼 (key)。

' 在註冊區中加入一項。

SaveSetting appname := "MyApp", section := "Startup", _

            key := "Top", setting := 75

SaveSetting "MyApp","Startup", "Left", 50

' 移除區段及所有的設定。

DeleteSetting "MyApp", "Startup"


GetAllSettings 函數範例

本範例首先使用 SaveSetting 陳述式來建立 Windows 註冊區  裏 appname 程式的項目，然後再使用 GetAllSettings 函數來取得設定並顯示出來。請注意，程式名稱和 section 名稱無法用 GetAllSettings 函數取得。最後，使用 DeleteSetting 陳述式將該程式項目移除。

' 用來儲存 GetAllSettings 函數所傳回之二維陣列資料的變數

' 整數是用來記數用。

Dim MySettings As Variant, intSettings As Integer

' 在註冊區中加入輸入項。

SaveSetting appname := "MyApp", section := "Startup", _

key := "Top", setting := 75

SaveSetting "MyApp","Startup", "Left", 50

' 取得輸入項的設定。

MySettings = GetAllSettings(appname := "MyApp", section := "Startup")

For intSettings = LBound(MySettings, 1) To UBound(MySettings, 1)

Debug.Print MySettings(intSettings, 0), MySettings(intSettings, 1)

Next intSettings

DeleteSetting "MyApp", "Startup"


GetSetting 函數範例

本範例首先使用 SaveSetting 陳述式來建立 Windows 註冊區 (或 16-位元 Windows 平台的.INI 檔) 裏 appname 程式的項目，然後使用 GetSetting 函數來得到其中一項設定並顯示出來。因為有傳入引數 default，GetSetting 函數一定會有傳回值。請注意，section 名稱無法用 GetSetting 函數取得。最後，使用 DeleteSetting 陳述式將該程式項目移除。

' 用來儲存 GetSetting 函數所傳回之二維陣列資料的變數。

Dim MySettings As Variant

' 在註冊區中加入項目。

SaveSetting "MyApp","Startup", "Top", 75

SaveSetting "MyApp","Startup", "Left", 50

Debug.Print GetSetting(appname := "MyApp", section := "Startup", _

                       key := "Left", default := "25")

DeleteSetting "MyApp", "Startup"


SaveSetting 陳述式範例

下列範例首先使用 SaveSetting 陳述式來建立 Windows 註冊區 (或 16-位元 Windows 平台的.INI 檔) 裏 MyApp 程式的項目，然後使用 DeleteSetting 陳述式來將之移除。

' 在註冊區中加入項目。

SaveSetting appname := "MyApp", section := "Startup", _

            key := "Top", setting := 75

SaveSetting "MyApp","Startup", "Left", 50

' 移除區段及所有的設定。

DeleteSetting "MyApp", "Startup"


DeleteSetting 陳述式

��� [image] ���

從 Windows 的註冊區中刪除一個應用程式項目中的某個區段或主設定 或 (在 Macintosh 上) 應用程式的初始化檔案中的資訊。

語法

DeleteSetting appname, section[, key]

DeleteSetting 陳述式語法中具有以下的指名引數：

單元	說明
Appname	必要引數。字串運算式，代表一個應用程式或專案的名稱。 在 Macintosh 上，這是 System 資料夾中的 Preferences 資料夾中的初始化檔案的檔案名稱。
Section	必要引數。字串運算式，代表要刪除主設定的區段名稱。如果只有 appname 和 section，則區段中所有的相關設定都將被刪除。
Key	選擇性引數。字串運算式，代表要刪除的主設定。
請注意

如果您指定了所有的引數，則該指定的設定將被刪除。如果試圖在不存在的區段或機碼設定中使用 DeleteSetting 陳述式，則會產生執行階段錯誤。


GetAllSettings 函數

��� [image] ���

從 Windows 註冊區 或 (在 Macintosh 上) 應用程式的初始化檔案中的資訊中傳回某個應用程式項目的所有主設定及其個別值 (開始是由 SaveSetting 產生)。

語法

GetAllSettings(appname, section)

GetAllSettings 函數語法中具有以下的指名引數：

單元	說明
Appname	必要引數。字串運算式，代表所要主設定的應用程式或專案的名稱。在 Macintosh 上，這是 System 資料夾中的 Preferences 資料夾中的初始化檔案的檔案名稱。
Section	必要引數。字串運算式，主設定所在之區段的名稱。GetAllSettings 會傳回一個二維陣列的 Variant，其中含有指定區段中的所有主設定。
請注意

如果 appname 或 section 不存在，則 GetAllSettings 將傳回一個未初始化的 Variant。


GetSetting 函數

��� [image] ���

從 Windows 註冊區 或 (在 Macintosh 上) 應用程式的初始化檔案中的資訊中傳回某個應用程式項目的主設定值。

語法

GetSetting(appname, section, key[, default])

GetSetting 函數語法中具有以下的指名引數：

單元	說明
Appname	必要引數。字串運算式，代表某個應用程式或專案的名稱。 在 Macintosh 上，這是 System 資料夾中的 Preferences 資料夾中的初始化檔案的檔案名稱。
section	必要引數。字串運算式，傳回主設定所在區段的名稱。
key	必要引數。字串運算式，傳回主設定的名稱。
default	選擇性引數。運算式，如果主設定中沒有設定值，便會傳回這個值。如果省略這個引數的話，則 default 值會被預設為長度為零的字串("")。
請注意

如果 GetSetting 的引數中的任一個項目不存在，則 GetSetting 將傳回 default 值。


SaveSetting 陳述式

��� [image] ���

從 Windows 註冊區 或 (在 Macintosh 上) 應用程式的初始化檔案中的資訊中儲存或建立一個應用程式項目。

語法

SaveSetting appname, section, key, setting

SaveSetting 陳述式語法中具有以下的指名引數：

單元	說明
Appname	必要引數。字串運算式，代表某個應用程式或專案的名稱。在 Macintosh 上，這是 System 資料夾中的 Preferences 資料夾中的初始化檔案的檔案名稱。
Section	必要引數。字串運算式，所要儲存之主設定所在的區段名稱。
Key	必要引數。字串運算式，所要儲存之主設定的名稱。
Setting	必要引數。運算式，代表 key 設定之值。
請注意

如果主設定在任何因素下無法儲存，就會發生錯誤。


Visual Basic

���

歡迎使用 Visual Basic 文件。

Visual Basic 包含許多文件工具，設計每個工具的目的在於協助您學習和使用此產品特殊的部分。與 Visual Basic 一起提供的文件如下：

•	Visual Basic 使用者介面說明

提供有關 Visual Basic 編輯器介面元件的「說明」，這些元件如指令、對話方塊、視窗和工具列等。

•	Visual Basic 概念性主題

概念性說明的主題包含協助您瞭解 Visual Basic 程式設計的資訊。

•	Visual Basic 如何執行主題

查看「說明」的如何執行一節可找到有用的一般程序，例如，如何使用瀏覽物件或如何設定 Visual Basic 環境的選項。

•	Visual Basic 程式語言參考

此程式語言參考可以找到有關 Visual Basic 語言的「說明」：所有方法、屬性、陳述式、函數、運算子和物件。

•	Visual Basic 增益功能模型

如果您想要自訂 Visual Basic 編輯器，請參閱此程式語言參考以獲得有關物件模型的「說明」，這能讓您擴充此環境。

•	Microsoft 表單參考

在此提供有關 Userform 和控制項的「說明」，以及如何使用 Visual Basic 來撰寫它們。


Chr 函數範例

本範例使用 Chr 函數來傳回指定字元碼所代表的字元。

Dim MyChar

MyChar = Chr(65)	' 傳回 A。

MyChar = Chr(97)	' 傳回 a。

MyChar = Chr(62)	' 傳回 >。

MyChar = Chr(37)	' 傳回 %。


Format 函數範例

本範例示範以命名格式和使用者定義格式格式化值時， Format 函數的不同用法。對於日期分隔號(/)，時間分隔號(:)，以及 AM/ PM 等文字而言，其真正的顯示格式會因電腦上的地區選項(或國別設定)不同而有所差異。在開發階段，日期與時間是以短日期的格式，配合程式碼的地區選項(或國別設定)來顯示的。而在執行階段，短日期則格式是根據系統的地區選項(或國別設定)而定，而系統的地區選項(或國別設定)和程式碼的地區選項(或國別設定)可能並不相同。本範例中是假設地區選項(或國別設定)為 English/U.S。

MyTime 及 MyDate 在開發還境下是以目前系統的短日期設定和日期設定顯示出來的。

Dim MyTime, MyDate, MyStr

MyTime = #17:04:23#

MyDate = #January 27, 1993#

' 以系統設定的長時間格式傳回現在系統時間。

MyStr = Format(Time, "Long Time")

' 以系統設定的長日期格式傳回現在系統日期。

MyStr = Format(Date, "Long Date")

MyStr = Format(MyTime, "h:m:s")	' 傳回 "17:4:23"。

MyStr = Format(MyTime, "hh:mm:ss AMPM")	' 傳回 "05:04:23 PM"。

MyStr = Format(MyDate, "dddd, mmm d yyyy")	' 傳回 "Wednesday, Jan 27 1993"。

' 如果沒有指定格式，則傳回字串。

MyStr = Format(23)	' 傳回 "23"。

' 使用者自訂的格式。

MyStr = Format(5459.4, "##,##0。00")	' 傳回 "5,459.40"。

MyStr = Format(334。9, "###0。00")	' 傳回 "334.90"。

MyStr = Format(5, "0。00%")	' 傳回 "500.00%"。

MyStr = Format("HELLO", "<")	' 傳回 "hello"。

MyStr = Format("This is it", ">")	' 傳回 "THIS IS IT"。


Hex 函數範例

本範例使用 Hex 函數來得到某數值的 16 進位值。

Dim MyHex

MyHex = Hex(5)	' 傳回 5。

MyHex = Hex(10)	' 傳回 A。

MyHex = Hex(459)	' 傳回 1CB。


InStr 函數範例

本範例使用 InStr 函數來尋找某字串在另一個字串中首次出現的位置。

Dim SearchString, SearchChar, MyPos

SearchString ="XXpXXpXXPXXP"	' 被搜尋的字串。

SearchChar = "P"	' 要尋找字串 "P"。

' 從第四個字元開始，以 [文字比對] 的方式找起。傳回值為 6(小寫 p）。

' 小寫 p 和大寫 P 在 [文字比對] 下是一樣的。

MyPos = Instr(4, SearchString, SearchChar, 1)

' 從第一個字元開使，以 [二進位比對] 的方式找起。傳回值為 9(大寫 P）。

' 小寫 p 和大寫 P 在 [二進位比對] 下是不一樣的。

MyPos = Instr(1, SearchString, SearchChar, 0)

' 預設的比對方式為 [二進位比對](最後一個引數可省略)。

MyPos = Instr(SearchString, SearchChar)	' 傳回 9。

MyPos = Instr(1, SearchString, "W")	' 傳回 0。


LCase 函數範例

本範例使用 LCase 函數來將某字串轉成全部小寫。

Dim UpperCase, LowerCase

Uppercase = "Hello World 1234"	' 要轉換的字串。

Lowercase = Lcase(UpperCase)	' 傳回 "hello world 1234"。


Left 函數範例

本範例使用 Left 函數來得到某字串最左邊的數個字元。

Dim AnyString, MyStr

AnyString = "Hello World"	' 定義字串。

MyStr = Left(AnyString, 1)	' 傳回 "H"。

MyStr = Left(AnyString, 7)	' 傳回 "Hello W"。

MyStr = Left(AnyString, 20)	' 傳回 "Hello World"。


Len 函數範例

第一個範例使用 Len 傳回某字串的長度(字元數)或某變數的大小(位元數)。Type...End Type 程式區塊定義一個自訂資料型態 CustomerRecord。如果該資料型態定義在物件類別模組中，則必需以關鍵字 Private 開頭(表示為私有)。若定義在一般模組中，Type 定義就可以為 Public。

Type CustomerRecord	' 定義使用者自訂的資料型態。

ID As Integer	' 將此定義放在一般模組中。

Name As String * 10

Address As String * 30

End Type

Dim Customer As CustomerRecord	' 宣告變數。

Dim MyInt As Integer, MyCur As Currency

Dim MyString, MyLen

MyString = "Hello World"	' 設定變數初值。

MyLen = Len(MyInt)	' 傳回 2。

MyLen = Len(Customer)	' 傳回 42。

MyLen = Len(MyString)	' 傳回 11。

MyLen = Len(MyCur)	' 傳回 8。

如果用ANSI表示字串的話，第二個範例使用 LenB和使用者定義的函數 (LenMbcs) 傳回某字串的長度(字元數)。

Function LenMbcs (ByVal str as String)

LenMbcs = LenB(StrConv(str, vbFromUnicode))

End Function

Dim MyString, MyLen

MyString = "ABc"

' "A" 和 "B" 是 DBCS且 "c" 是SBCS。

MyLen = Len(MyString)

' 傳回字串中有3 �}3 個字元。

MyLen = LenB(MyString)

' 傳回 6 �} 6 位元用於Unicode。

MyLen = LenMbcs(MyString)

' 傳回 5 - 5個位元用於ANSI。


LSet 陳述式範例

本範例使用 LSet 陳述式，將某字串插入到另一字串的最左邊。雖然 LSet 也能用來複製一個使用者自訂型態變數之內容到另一個不一定完全一樣，但卻相容的使用者自訂型態變數中，但這種用法並不甚妥。因為不同作業系統間對資料結構的做法不同，使用 LSet 的程式並不能保證有很好的移植性。

Dim MyString

MyString = "0123456789"	' 設定字串初值。

Lset MyString = "<-Left"	' MyString 的內容為 "<-Left    "。


LTrim，RTrim，及 Trim 函數範例

本範例使用 LTrim 函數將某字串的開頭空格去除及使用RTrim 函數將某字串結尾的空格去除。事實上只使用 Trim 函數也可以做到將兩頭空格全部去除。

Dim MyString, TrimString

MyString = "  <-Trim->  "	' 設定字串初值。

TrimString = LTrim(MyString)	' TrimString = "<-Trim->  "。

TrimString = RTrim(MyString)	' TrimString = "  <-Trim->"。

TrimString = LTrim(RTrim(MyString))	' TrimString = "<-Trim->"。

' 只使用 Trim 函數也同樣將兩頭空格去除。

TrimString = Trim(MyString)	' TrimString = "<-Trim->"。


Mid 函數範例

第一個範例使用 Mid 函數來得到某個字串中的數個字元。

Dim MyString, FirstWord, LastWord, MidWords

MyString = "Mid Function Demo"	' 建立一個字串。

FirstWord = Mid(MyString, 1, 3)	' 傳回 "Mid"。

LastWord = Mid(MyString, 14, 4)	' 傳回 "Demo"。

MidWords = Mid(MyString, 5)	' 傳回 "Funcion Demo"。

第二個範例使用 MidB和使用者定義的函數 (MidMbcs) 也傳回某個字串中的字元。它們之間的不同之處在於輸入字串是ANSI 且長度以位元為單位。

Function MidMbcs(ByVal str as String, start, length)

MidMbcs = StrConv(MidB(StrConv(str, vbFromUnicode), start, length), vbUnicode)

End Function

Dim MyString

MyString = "AbCdEfG"

' "A", "C", "E", 和 "G" 是DBCS且 "b", "d",

' 和 "f" 是 SBCS。

MyNewString = Mid(MyString, 3, 4)

' 傳回 ""CdEf"

MyNewString = MidB(MyString, 3, 4)

' 傳回 ""bC"

MyNewString = MidMbcs(MyString, 3, 4)

' 傳回 "bCd"


Mid 陳述式範例

本範例使用 Mid 陳述式將某字串中的幾個字元置換為其它的字元。

Dim MyString

MyString = "The dog jumps"	' 設定字串初值。

Mid(MyString, 5, 3) = "fox"	' MyString = "The fox jumps"。

Mid(MyString, 5) = "cow"	' MyString = "The cow jumps"。

Mid(MyString, 5) = "cow jumped over"	' MyString = "The cow jumpe"。

Mid(MyString, 5, 3) = "duck"	' MyString = "The duc jumpe"。


Oct 函數範例

本範例使用 Oct 函數將某數值轉換成 8 進位表示式。

Dim MyOct

MyOct = Oct(4) 	' 傳回 4。

MyOct = Oct(8)	' 傳回 10。

MyOct = Oct(459)	' 傳回 713。


Right 函數範例

本範例使用 Right 函數來傳回某字串右邊算起的幾個字元。

Dim AnyString, MyStr

AnyString = "Hello World"	' 定義字串。

MyStr = Right(AnyString, 1)	' 傳回 "d"。

MyStr = Right(AnyString, 6)	' 傳回 " World"。

MyStr = Right(AnyString, 20)	' 傳回 "Hello World"。


RSet 陳述式範例

本範例使用 RSet 陳述式將某字串插入到另一字串的最右邊。

Dim MyString

MyString = "0123456789"	' 設定字串初值。

Rset MyString = "Right->"	' MyString 的內容為 "   Right->"。


Space 函數範例

本範例使用 Space 函數來產生一個字串，字串的內容為空格，長度為指定的長度。

Dim MyString

' 傳回 10 個空格的字串。

MyString = Space(10)

' 將 10 個空格插在兩個字串中間。

MyString = "Hello" & Space(10) & "World"


Str 函數範例

本範例使用 Str 函數來將一個數字轉成字串。當數字轉成字串時，字串的第一個位元一定是空格或是正負號。

Dim MyString

MyString = Str(459)	' 傳回 " 459"。

MyString = Str(-459.65)	' 傳回 "-459.65"。

MyString = Str(459.001)	' 傳回 " 459.001"。


StrComp 函數範例

本範例使用 StrComp 函數來比較兩個字串。如果第三個引數值為 1，字串是以 [文字比對] 的方式進行比較；如果第三個引數值為 0 或是省略掉，則以 [二進位比對] 的方式進行比較。

[文字比對] 方式會將大小寫字母視為一樣，但 [二進位比對] 方式則視為不同。

Dim MyStr1, MyStr2, MyComp

MyStr1 = "ABCD": MyStr2 = "abcd"	' 定義變數。

MyComp = StrComp(MyStr1, MyStr2, 1)	' 傳回 0。

MyComp = StrComp(MyStr1, MyStr2, 0)	' 傳回 -1。

MyComp = StrComp(MyStr2, MyStr1)	' 傳回 1。


String 函數範例

本範例使用 String 函數來產生一指定長度，且只含單一字元的字串。

Dim MyString

MyString = String(5, "*")	' 傳回 "*****"。

MyString = String(5, 42)	' 傳回 "*****"。

MyString = String(10, "ABC")	' 傳回 "AAAAAAAAAA"。


UCase 函數範例

本範例使用 UCase 函數來將某字串轉成全部大寫。

Dim LowerCase, UpperCase

LowerCase = "Hello World 1234"	' 要轉換的字串。

UpperCase = UCase(LowerCase)	' 傳回 "HELLO WORLD 1234"。


StrConv 函數範例

本範例使用 StrConv 函數來將 Unicode 字串轉換成 ANSI 字串。

Dim i As Long

Dim x() As Byte

x = StrConv("ABCDEFG", vbFromUnicode)	' Convert string.

For i = 0 To UBound(x)

Debug.Print x(i)

Next


Chr 函數

��� [image] ���

傳回一個含有與指定的字元碼相關之字元的 String。

語法

Chr(charcode)

charcode 引數是一個用來識別某字元的Long。

請注意

0 到 31 之間的數字與一般、非列印的ASCII碼相同，例如，Chr(10) 會傳回換行字元。charcode 的正常範圍為 0-255。然而，在DBCS系統，charcode 的實際範圍為 -32768 到 65535。

附註   ChrB 函數是使用於含有位元組資料的 String，而非傳回一個字元，其有可能是一或兩個位元組，而 ChrB 都是傳回一個位元組。ChrW 函數則傳回一個包含Unicode 字元的String，若在不支援Unicode的平台上，其功能與Chr函數相同。

備註���Visual Basic for the Macintosh 不支援 Unicode 字串。所以，ChrW(n) 無法傳回 n 個數值 (範圍為 128 到 65,535) 的所有 Unicode 字元，因為它位在 Windows 環境中。相反地，ChrW(n) 會企圖為 n 大於 127 的 Unicode 數值進行「最佳推測」。因此，您不可以在 Macintosh 環境中使用 ChrW。


Format 函數

��� [image] ���

傳回一 Variant (String)，含有一個根據格式運算式來格式化的運算式。

語法

Format(expression[, format[, firstdayofweek[, firstweekofyear]]])

Format 函數的語法具有以下幾個單元：

單元	說明
Expression	必要引數。任何正確的運算式。
Format	選擇性引數。為一正確的指名運算式或使用者自訂格式運算式。
Firstdayofweek	選擇性引數。為一常數，表示一星期的第一天。
firstweekofyear	選擇性引數。為一常數，表示一年的第一週。
設定

firstdayofweek 引數有以下設定：

常數	值	說明
vbUseSystem	0	使用 NLS API 設定。
VbSunday	1	星期日 (預設)
vbMonday	2	星期一
vbTuesday	3	星期二
vbWednesday	4	星期三
vbThursday	5	星期四
vbFriday	6	星期五
vbSaturday	7	星期六
firstweekofyear 引數有以下設定：

常數	值	說明
vbUseSystem	0	使用 NLS API 設定。
vbFirstJan1	1	以一月一日為第一週開始 (預設)。
VbFirstFourDays	2	以一週為開始，而此週至少有四天存在這一年中。
VbFirstFullWeek	3	以一週為開始，而此週完全存在這一年中。
請注意

格式化	作法
數字	使用預先定義的指名數值格式或建立使用者自訂數值格式。
日期和時間	使用預先定義的指名日期/時間格式或建立使用者自訂日期/時間格式。
日期、時間和序號	使用日期和時間格式或數值格式。
字串	建立您自訂的字串格式。
如果您沒有指名格式而格式化，Format 會產生與 Str 函數類似的功能。然而，不同的是，以 Format 作用在正數上不會保留正負號空間，而以 Str 的話則會。

如果您正在格式化非本土化的數字字串，就應該使用使用者自訂的數字格式以確保會獲得您要的外觀。

備註   如果 Calendar 屬性的設定為 Gregorian，且 format 指定了日期的格式化，則此提供的 expression 必須是 Gregorian。如果 Visual Basic Calendar 屬性的設定為 Hijri，則此提供的 expression 必須是 Hijri。

如果日曆是 Gregorian，則不會變更 format 運算式符號的意義。如果日曆是 Hijri，則所有日期格式符號 (例如，dddd、mmmm、yyyy) 會有相同的意義但適用於 Hijri 日曆。格式符號仍會以英文顯示；以文字顯示的符號 (例如，AM 和 PM) 則會顯示與該符號有關聯的字串 (英文或阿拉伯文)。當日曆是 Hijri 時，某些符號的範圍會改變。

符號	範圍
d	1-30
dd	1-30
ww	1-51
mmm	顯示完整的月份名稱 (Hijri 月份名稱沒有縮寫字)。
y	1-355
yyyy	100-9666
vbFriday	星期五
vbSaturday	星期六


指名數值格式 (Format 函數)

��� [image] ���

以下表格列出了一些數值格式名稱：

格式名稱	說明
General Number	顯示的數字沒有千分位符號。
Currency	顯示的數值含千分位符號；小數點後會顯示兩位數。其輸出需視系統地區設定而有不同。
Fixed	小數點左邊至少一位數，右邊有兩位數。
Standard	顯示的數值含千分位符號，小數點左邊至少一位數，右邊有兩位數。
Percent	以百分比格式顯示；小數點右邊有兩位數。
Scientific	使用標準科學符號。
Yes/No	如果數字為 0，顯示 No；否則顯示 Yes。
True/False	如果數字為 0，顯示 False；否則顯示 True。
On/Off	如果數字為 0，顯示 Off；否則顯示 On。


使用者自訂數值格式 (Format 函數)

��� [image] ���

以下表格列出了一些可用來建立使用者自訂數值格式的字元：

字元	說明
無	顯示數值不具格式。
(0)	預留位數。顯示對應位數的數值或是零。如果運算式在格式字串中 0 的位置有數字存在，那麼就顯示出來：不然，就以零顯示。如果運算式中數值的位數少於零的位數 (無論是小數點的左方或右方 )，那麼就把前面或後面的零補足。如果運算式中數值的小數點右方位數多於零的位數，那麼就只顯示到有零的位數。如果運算式中數值的小數點左方位數多於零的位數，那麼多出的部份還是要顯示出來。
(#)	預留位數。顯示對應位數或不顯示。如果運算式在格式字串中 # 的位置有數字存在，那麼就顯示出來：不然，該位置就不顯示。此符號的運作和 0 預留位數大致相同，不同之處只有在當運算式中數值的位數少於 #  的位數 ( 無論是小數點左方或右方 ) 時，不會把前面或後面的零顯示出來。
(.)	預留小數點。在一些地區，則是用逗號來當小數點。預留小數用來決定在小數點左右可顯示多少位數。如果格式運算式在此符號左邊只有正負號，那麼小於 1 的數字將以小數點為開頭。如欲在小數前有 0 的話，那麼請在預留小數點前加上 0 這個預留位數。預留小數點的實際字元在輸出時得看您系統的數字格式而定 。
(%)	預留百分比符號，運算式會乘上 100。而字元 (%) 會安插在格式字串上應該出現的位置。
(,)	預留千分位符號。在一些地區，則是用句點來當千位符號。千位符號主要是把數值小數點左邊超過四位數以上分出千位。標準的使用法為一旦格式中包含千分位符號，則該出現時即會出現。兩個緊鄰的千分位符號或一個千分位符號緊接在小數點左邊，其意思為 "將數值以除以1000來表示，除後四捨五入"。例如，您可以用格式字串"##0,,"將 1 億表示成 100。數值小於 1 百萬的話表示成 0，兩個緊鄰的千分位符號除了緊接在小數點左邊以外，在任何位置均視為千分位符號的進一步用法。預留小數點的真正字元在輸出時，需視系統的數字格式而定。
(:)	時間分隔符號。在一些地區，可能用其他符號來當時間分隔符號。若欲格式化時間值，時間分隔符號可以用來分隔時、分、秒。預留時間分隔符號的真正字元在輸出時，需視系統的格式設定而定。
(/)	日期分隔符號。在一些地區，可能用其他符號來當日期分隔符號。若要格式化日期數值，日期分隔符號可以用來分隔年、月、日。預留日期分隔符號的真正字元在輸出時，需視系統的格式而定。
(E- E+ e- e+)	科學符號格式。如果格式運算式在 E-、E+、e- 或 e+ 的右方含有至少一個預留位數 ( 0或 # )，那麼數值將表示成科學格式，而 E 或 e 會被安置在數字和指數之間。E 或 e 右方預留位數的數字取決於指數數字。使用 E- 或 e- 時，會用減號來表示負的指數。使用 E+ 或 e+ 時，會用減號來表示負的指數或用加號來表示正的指數。
- + $ ( )	顯示一個文字字元。如欲顯示非所列字元的話，可以用 ( \ ) 字元表示或以 (" ") 將之括起來。
(\)	將格式字串中下一個字元顯示出來。如欲顯示一特殊字元，可將此字元置於 (\) 之後。(\) 並不會顯示出來。而使用 (\) 的效果和使用雙引號是一樣的。如欲顯示反斜線字元，可使用 (\\)。 而一些無法顯示的字元是日期格式字元和時間格式字元 (a, c, d, h, m, n, p, q, s, t, w, y, / , :)、數值格式字元 (#, 0, %, E, e, 逗點, 句點)和字串格式字元(@, &, <, >, !)。
("ABC")	將雙引號 (" ") 內之字串顯示出來。欲在 format 中含入一個字串，您必須用 Chr(34) 將字串圍起來 ( 34 為雙引號 (") 的字元碼)。


相異數值之相異格式 (Format 函數)

���

一個使用者自訂數值格式運算式可以有一至四個區段，各區段間以分號隔開。但如果 format 函數的引數含有指名數值格式，則只能有一個區段。

如果您使用...	其結果為...
只有一個區段	格式運算式適用於所有值。
兩個區段	第一個區段適用於正值或零，第二個區段適用於負值。
三個區段	第一個區段適用於正值，第二個區段適用於負值，第三個區段適用於零。
四個區段	第一個區段適用於正值，第二個區段適用於負值，第三個區段適用於零，第四個區段適用於Null值。
以下的例子有兩個區段：第一個區段定義正值和零的格式；第二個區段定義負值。

"$#,##0;($#,##0)"

如果您的分號之間沒有格式，那失去的區段將以正值的格式來表示。例如，以下的格式以第一個區段顯示正值及負值，而如果值為零，則顯示"Zero"。

"$#,##0;;\Z\e\r\o"


使用者自訂數值格式運算式範例

以下的表格列出一些範例數值格式運算式。(這些範例皆假設您系統之地區設定為 English-U.S.) 第一行所含為格式字串;其他行則為依格式之輸出結果。

Format (格式)	正 5	負 5	小數點 .5	Null
零長度字串 ("")	5	-5	0.5
0	5	-5	1
0.00	5.00	-5.00	0.50
#,##0	5	-5	1
#,##0.00;;;Nil	5.00	-5.00	0.50	Nil
$#,##0;($#,##0)	$5	($5)	$1
$#,##0.00;($#,##0.00)	$5.00	($5.00)	$0.50
0%	500%	-500%	50%
0.00%	500.00%	-500.00%	50.00%
0.00E+00	5.00E+00	-5.00E+00	5.00E-01
0.00E-00	5.00E00	-5.00E00	5.00E-01


指名日期/時間格式 (Format 函數)

��� [image] ���

以下的表格列出一些您可以使用的日期和時間格式名稱：

格式名稱	說明
General Date	顯示日期和/或時間。例如，4/3/93 05:34 PM。如果沒有時間部份，只顯示日期，例如，4/3/93。如果沒有整數部份，只顯示時間，例如，05:34 PM。日期的顯示要依系統設定而定。
Long Date	以系統的長日期格式顯示日期。
Medium Date	依適當的主應用程式語言版本的中等日期格式來顯示日期。
Short Date	以您系統的長日期格式顯示日期。
Long Time	以您系統的長時間格式顯示時間；包括時、分、秒。
Medium Time	以時和分以及 AM/PM指示，來顯示 12 小時時間格式的時間。
Short Time	以 24 小時的時間格式來顯示時間，例如，17:45。


使用者自訂日期/時間格式 (Format 函數)

��� [image] ���

以下表格列出一些可用來建立使用者自訂日期/時間格式的字元：

字元	說明
(:)	時間分隔符號。在一些地區 ，可能用其他符號來當時間分隔符號。當欲格式化時間值時，時間分隔符號可以分隔時、分、秒。預留時間分隔符號的真正字元在輸出時得看您系統的格式設定而定。
(/)	日期分隔符號。在一些地區，可能用其他符號來當日期分隔符號。當欲格式化日期數值時，日期分隔符號可以分隔年、月、日。預留日期分隔符號的真正字元在輸出時得看系統的格式而定。
c	以 ddddd 來顯示日期並且以 ttttt 來顯示時間。如果欲顯示的數值無時間部份，只顯示日期部份，如果欲顯示的數值無日期部份，只顯示時間部份。
d	以沒有零開頭的數字來顯示日 (1�-�31)。
dd	以有零開頭的數字來顯示日 (01�-�31)。
ddd	以簡寫來表示日 (Sun�-Sat)。
dddd	以全名來表示日 (Sunday�-Saturday)。
ddddd	以完整日期表示法顯示 (包括年、月、日)，日期的顯示要依您系統的短日期格式而定。對於預設的短日期格式為 m/d/yy。
Dddddd	以完整日期表示法顯示 (包括年、月、日)，日期的顯示要依您系統的長日期格式而定。對於預設的長日期格式為 mmmm dd, yyyy。
aaaa	與 dddd 相同，這只是字串的本土化版本。
w	將一週中的日期以數字表示 (1表星期日~ 7表星期六)。
ww	將一年中的星期以數字表示 (1��}�54)。
m	以沒有零開頭的數字來顯示月 (1�-�12)。如果 m 是直接跟在 h 或 hh 之後，那麼顯示的將是分而非月。
Mm	以有零開頭的數字來顯示月 (01�-�12)。如果m是直接跟在h或hh之後，那麼顯示的將是分而非月。
Mmm	以簡寫來表示月 (Jan�-Oec)。
Mmmm	以全名來表示月 (January�-December)。
oooo	與 mmmm 相同，這只是字串的本土化版本。
Q	將一年以數字表成四等份 (1�-�4)。
Y	將一年中的日以數字表示 (1�-�366)。
Yy	以兩位數來表示年 (00�-�99)。
Yyyy	以四位數來表示年 (00�-�99)。
h	以沒有零開頭的數字來顯示小時 (0�-�23)。
Hh	以有零開頭的數字來顯示小時 (00-�23)。
N	以沒有零開頭的數字來顯示分 (0�- 59)。
Nn	以有零開頭的數字來顯示分 (00�- 59)。
S	以沒有零開頭的數字來顯示秒 (0�- 59)。
Ss	以有零開頭的數字來顯示分 (00�- 59)。
t t t t t	以完整時間表示法顯示 (包括時、分、秒)，格式的時間分隔符號的得依您的系統。如果選擇開頭有零並且時間是在的 10:00 A.M. 或 P.M.，那麼將顯示有零開頭的時間。預設的時間格式為 h:mm:ss。
AM/PM	在中午前以 12 小時配合大寫AM符號來使用；在中午和 11:59 P.M.間以 12 小時配合大寫PM來使用。
am/pm	在中午前以 12 小時配合小寫am符號來使用；在中午和 11:59 P.M.間以 12 小時配合小寫pm來使用。
A/P	在中午前以 12 小時配合大寫A符號來使用；在中午和 11:59 P.M.間以 12 小時配合大寫P來使用。
a/p	在中午前以 12 小時配合小寫a符號來使用；在中午和 11:59 P.M.間以 12 小時配合小寫p來使用。
AMPM	在中午前以 12 小時配合您系統設定的 AM 字串字元來使用；在中午和11:59 P.M.間以12小時配合您系統設定的PM字串字元來使用。AMPM 可以是大寫或小寫，但必須和您的系統設定相配。預設格式為 AM/PM。


使用者自訂日期/時間格式範例

以下表格列出以使用者自訂日期/時間格式來顯示 December 7, 1958的範例：

格式	顯示結果
m/d/yy	12/7/58
d-mmm	7-Dec
d-mmmm-yy	7-December-58
d mmmm	7 December
mmmm yy	December 58
hh:mm AM/PM	08:50 PM
h:mm:ss a/p	8:50:35 p
h:mm	20:50
h:mm:ss	20:50:35
m/d/yy h:mm	12/7/58 20:50


使用者自訂字串格式 (Format 函數)

��� [image] ���

您可以用以下字元來建立格式運算式：

字元	說明
@	預留字元。顯示字元或是空白。如果字串在格式字串中@的位置有數字存在，那麼就顯示出來；不然，就以空白代替那位置。除非有驚嘆號字元 (!) 在格式字串中，否則預留字元將由右而左填補。
&	預留字元。顯示字元或是不顯示，如果字串在格式字串中 (&) 的位置有數字存在，那麼就顯示出來；不然，就不顯示。除非有驚嘆號字元 (!) 在格式字串中，否則預留字元將由右而左填補。
<	強制小寫。將所有字元以小寫顯示。
>	強制大寫。將所有字元以大寫顯示。
!	強制由左而右填補預留字元。預設值是由右而左。


相異字串之相異格式 (Format 函數)

���

格式運算式可以是一或兩個區段，各區段間以分號 (;) 隔開。

如果您使用...	其結果為...
只有一個區段	格式運算式會適用於所有字串值。
兩個區段	第一個區段適用於字串值，第二個區段適用於Null值和零長度字串("")。


Hex 函數

��� [image] ���

將數字以十六進位 String傳回。

語法

Hex(number)

此必要的 number 引數為任何正確的數值運算式或字串運算式。

請注意

如果 number 不是一個整數，那麼在執行前會先被四捨五入成最接近的整數。

如果 number 為...	所得為...
Null	Null
Empty	零(0)
任何其他的數字	最多可到八個十六進位字元。
您可以將十六進位數字直接以&H開頭來表示。例如，&H10代表十進位的16。


InStr 函數

��� [image] ���

傳回在某字串中一字串的最先出現位置，此位置為 Variant (Long)。

語法

InStr([start, ]string1, string2[, compare])

InStr 函數的語法具有以下的指名引數：

單元	說明
start	選擇性引數。為數值運算式，設定每次搜尋的起點。如果省略，將從第一字元開始。如果 start 所含為 Null，將發生錯誤。如果有加 compare 參數，則一定要有 start 引數。
String1	必要引數。欲搜尋的字串運算式。
String2	必要引數。欲搜尋的字串運算式。
Compare	選擇性引數。設定字串比對種類。如果 compare 是 Null，將發生錯誤。如果省略 compare，Option Compare 的設定將決定比對的類型。指定一正確的 LCID (LocaleID) 以便在比對中使用此特定地區的規則。
設置值

 compare 引數設定如下:

常數	值	描述
VbUseCompareOption	-1	使用Option Compare陳述句設定執行一個比較。
VbBinaryCompare	0	執行一個二進位比較。
VbTextCompare	1	執行一個按照文字的比較。
VbDatabaseCompare	2	只適用於Microsoft Access。執行一個資料庫中資訊的比較。

傳回值

如為	InStr傳回
string1為零長度	0
string1為Null	Null
string2 為零長度	start
string2 為Null	Null
string2 找不到	0
在 string1中找到string2	找到的位置
start > string2	0
請注意

InStrB 函數是使用在位元組資料字串上。所以 InStrB 傳回的是位元組位置，而非字元位置。


LCase 函數

��� [image] ���

傳回一轉成小寫的 String。

語法

LCase(string)

此string 引數可以是任何正確的字串運算式。如果 string 所含為 Null，將傳回 Null。

請注意

只有大寫的字母會轉成小寫；所有小寫字母和非字母字元保持不變。


Left 函數

��� [image] ���

傳回一字串由左算起特定數量的字元所構成的 Variant (String)。

語法

Left(string, length)

此 Left 函數的語法有以下的指名引數：

單元	說明
string	必要引數。為函數欲執行的字串運算式，自最左方的字元開始傳回。如果 string 所含為Null，將傳回Null。
length	必要引數；為 Variant (Long)。為數值運算式，指出欲傳回多少字元。如果為 0，傳回零長度("")。如果大於或等於 string 的字元數，則傳回整個字串。
請注意

欲知 string 的字元數，請用 Len 函數。

附註   LeftB 函數是使用在位元組資料字串上。所以 LeftB 傳回的是位元組數，而非字元數。


Len 函數

��� [image] ���

傳回一Long，為字串內字元的數目，或是傳回儲存一變數所需的位元組數。

語法

Len(string | varname)

Len 函數語法有以下單元：

單元	說明
string	為任何正確的字串運算式。如果 string 所含為 Null，會傳回Null。
Varname	為任何正確的變數名稱。如果 varname 所含為 Null，會傳回 Null。如果 varname 是Variant，Len 會視其為 String並且傳回其所含之字元數。
請注意

兩引數必須有其一 (而且只能有一)。如為使用者自訂型態,，Len 會傳回其寫至檔案的大小。

附註    LenB 函數是使用在位元組資料字串上，如同在雙位元組字元集 (DBCS) 語言中一樣。所以 LenB 傳回的是位元組位置，而非字元位置。如為使用者自訂型態，LenB 會傳回在記憶體中之大小，包括元件之間的間隙。例如，對於使用 LenB的範例代碼，請參閱中的第二個。

附註   當在使用者自訂資料型態中使用不定長度字串時，Len 可能無法得知確切的位元組數目。


LSet 陳述式

��� [image] ���

在一字串變數中將一字串往左對齊，或是將一使用者自訂型態變數複製到另一使用者自訂型態變數。

語法

LSet stringvar = string

LSet varname1 = varname2

LSet 陳述式的語法有以下單元：

單元	說明
stringvar	必要引數。為字串變數名稱。
string	必要引數。在 stringvar 內欲往左對齊的字串運算式。
Varname1	必要引數。複製成的使用者自訂型態變數名稱。
Varname2	必要引數。欲複製的使用者自訂型態變數名稱。
請注意

LSet會將 stringvar 中剩餘的字元以空白替代。

如果 string 比 stringvar 還長，Lset 只放置最左且長度只到 stringvar 的幾個字元。

警告   我們並不鼓勵使用 Lset 將一使用者自訂型態變數複製到另一使用者自訂型態變數。將一資料型態資料複製到一空間給另一資料型態，有可能會造成無法預測的結果。

當您從一使用者自訂型態複製一變數給其他變數時，此變數的二元資料會複製到記憶體給其他變數，但其資料型態並不會詳細檢查，而導致無法預測的結果。


LTrim、RTrim 與 Trim 函數

��� [image] ���

傳回一個沒有前頭空白 (LTrim)、後面空白 (RTrim) 或前後均無空白的Variant (String)，其中所含為給定的字串。

語法

LTrim(string)

RTrim(string)

Trim(string)

string 引數可以是任何正確的字串運算式。如果 string 所含為 Null，將傳回 Null。


Mid 函數

��� [image] ���

從一字串傳回特定數量字元所構成的Variant (String) 。

語法

Mid(string, start[, length])

Mid 函數的語法具有以下的指名引數：

單元	說明
string	必要引數。傳回字元之來源字串運算式。如果 string 所含為 Null，將傳回Null。
start	必要引數；為 Long。欲傳回字元之開頭位置。如果 start 超過 string 的範圍，Mid 傳回零長度字串 ("")。
length	選擇性引數；為 Variant (Long)。即傳回之字元數。如果省略或 length 超過可以傳回的字元數，(包括 start 處的字元) ，那將傳回從 start 到尾端的所有字元。
請注意

欲知 string 的字元數，可用Len 函數。

附註   使用 MidB 函數可得字串之位元組數，如同在雙位元組字元集語言中依樣。。其引數所重的非字元數，而是位元組數。對於使用 MidB的代碼，請參閱中的第二個。


Mid 陳述式

��� [image] ���

將一 Variant (String) 變數中某數量的字元以其他字串字元替代。

語法

Mid(stringvar, start[, length]) = string

Mid 陳述式語法具有以下幾個單元：

單元	說明
stringvar	必要引數。欲更改的字串變數名稱。
start	必要引數；為 Variant (Long)。stringvar 中欲取代的字元開頭位置。
Length	選擇性引數；為Variant (Long)。欲取代的字元數。如果省略，string將全部用上。
string	必要引數。為字串運算式，取代部份 stringvar 的字串。
請注意

被取代的字元數量將小於或等於 stringvar 的字元數。

附註    使用 MidB 陳述式所用為字串之位元組數。MidB 陳述式，start 為 stringvar 中欲取代的位元組開頭位置，而欲取代的位元組數。


Oct 函數

��� [image] ���

傳回一 Variant (String)，代表一數字的八進位值。

語法

Oct(number)

此 number 引數為任何正確的數值運算式或字串運算式。

請注意

如果 number尚非整數，那麼在執行前會先四捨五入成最近似的整數。

如果 number為	Oct傳回
Null	Null
Empty	零 (0)
任何其他的數字	最多可到11 個八進位字元。
您可以將八進位數字直接以&O 開頭來表示。例如，&O10代表十進位的8。


Right 函數

��� [image] ���

傳回一字串右邊特定數量字元所構成的 Variant (String)。

語法

Right(string, length)

Right 函數的語法具有以下的指名引數：

單元	說明
string	必要引數。為函數欲執行的字串運算式，自最右方的字元開始傳回。如果string所含為 Null，將傳回Null。
length	必要引數；為Variant (Long)。為數值運算式，指出欲傳回多少字元。如果為 0，傳回零長度("")。如果大於或等於 string 的字元數，則傳回整個字串。
請注意

欲知 string 的字元數，請用 Len 函數。

附註    RightB 函數是使用在位元組資料字串上。所以 RightB 傳回的是位元組數，而非字元數。


RSet 陳述式

��� [image] ���

在一字串變數中將一字串往右對齊。

語法

RSet stringvar = string

RSet 陳述式的語法有以下單元：

單元	說明
stringvar	必要引數。為字串變數名稱。
String	必要引數。在 stringvar 內欲往右對齊的字串運算式。
請注意

如果 stringvar比 string 還長，Rset 會將 stringvar 中剩餘的字元以空白代替。

附註   RSet 不適用於使用者自訂型態。


Space 函數

��� [image] ���

傳回特定數目空格的 Variant (String)。

語法

Space(number)

number 引數為您想要的空格數。

請注意

Space 函數在格式輸出或清除固定長度字串資料很有用。


Str 函數

��� [image] ���

傳回代表一數字的 Variant (String)。

語法

Str(number)

number 引數為一 Long，所含為任何正確的數值運算式。

請注意

當一數字轉成字串，會保留一空位在前頭來表正負。如果 number 為正，其傳回的字串前頭會有一加號。

使用 Format 函數可將數值轉成您要的格式，如日期、時間、貨幣、使用者自訂格式...等。與 Str 不同的是，Format 函數不會在前面預留正負號的位置。

附註   Str 函數只視句點 (.) 為正確的小數點。如果有使用到不同的小數點 (例如，國際性的應用程式)，可使用 CStr 將數字轉成字串。


StrComp 函數

��� [image] ���

傳回 Variant (Integer)，為字串比對的結果。

語法

StrComp(string1, string2[, compare])

StrComp 函數的語法有以下的指名引數：

單元	說明
string1	必要引數。任何正確的字串運算式。
string2	必要引數。任何正確的字串運算式。
Compare	選擇性引數。指定字串比對的型態。如果 compare 引數是 Null，將發生錯誤。如果省略 compare，Option Compare 的設定將決定比對的類型。
設定值

compare 參數設定為：

常數	值	描述
vbUseCompareOption	-1	使用Option Compare陳述句設定執行一個比較。
vbBinaryCompare	0	執行一個二進位比較。
vbTextCompare	1	執行一個按照原文的比較。
vbDatabaseCompare	2	只適用於Microsoft Access，執行一個資料庫資訊的比較。
傳回值

StrComp 函數有下行傳回值：

如果	StrComp傳回
string1小於 string2	-1
string1等於 string2	0
string1大於 string2	1
string1或 string2為Null	Null


StrConv 函數

��� [image] ���

傳回一特定轉換後的 Variant (String)。

語法

StrConv(string, conversion, LCID)

StrConv 函數的語法有以下的指名引數：

單元	說明
string	必要引數。為欲轉換的字串運算式。
conversion	必要引數：為Integer。其值的和決定轉換的型態。
LCID	選項的。如果與系統LocaleID不同，則為LocaleID（系統LocaleID為缺省值。）
設定

conversion 引數的設定為：

常數	值	說明
vbUpperCase	1	將字串字元轉成大寫。
vbLowerCase	2	將字串字元轉成小寫。
vbProperCase	3	將字串中字的開頭字母轉成大寫。
vbWide*	4*	將字串中單位元組字元轉成雙位元組字元。
vbNarrow*	8*	將字串中雙位元組字元轉成單位元組字元。
vbKatakana**	16**	將字串中平假名字元轉成片假名字元。
vbHiragana**	32**	將字串中片假名字元轉成平假名字元。
vbUnicode	64	據系統的預設字元碼對應頁將字串轉成 Unicode。 (在Macintosh中無法使用。)
vbFromUnicode	128	將字串由 Unicode 轉成系統的預設字元碼對應頁。 (在Macintosh中無法使用。)
*	適用於遠東地區。

**	僅適用於日本。

附註    Visual Basic 為應用程式定了這些常數。您可以使用它們在您的程式中來取代真正的值。大部份是可以結合的，例如 vbUpperCase + vbWide，互斥的話就不行，例如 vbUnicode + vbFromUnicode。當在不適用的地區使用常數 vbWide、vbNarrow、vbKatakana，和 vbHiragana，就會導致執行階段錯誤。

以下為一些不同情況下字的分界法；Null (Chr$(0))，水平定位點 (Chr$(9))，跳列 (Chr$(10))，垂直定位點(Chr$(11))，跳頁(Chr$(12)) ，換行控制碼(Chr$(13))，空白(SBCS) (Chr$(32))。空白的實際值會隨 DBCS與國家而不同。

請注意

當從 ANSI 格式中 Byte 陣列轉換為一個字串時，使用 StrConv 函數。當在 Unicode 格式中轉換同樣的陣列時，使用指定的陳述式。


String 函數

��� [image] ���

傳回一重複某字元的 Variant (String)。

語法

String(number, character)

String 函數的語法有以下的指名引數：

單元	說明
number	必要引數；為 Long。為欲傳回之字串長度。如果 number 所含為 Null，將傳回 Null。
character	必要引數；為 Variant。為指定某字元的字元碼或字串運算式的第一字元。如果 character 所含為 Null，就會傳回 Null。
請注意

如果您設定 character 的數值大於255，String 會以下面式子將之轉為正確的字元碼：

character Mod 256


UCase 函數

��� [image] ���

傳回一個 Variant (String)，所含為轉成大寫之字串。

語法

UCase(string)

string 引數為任何正確的字串運算式。如果 string 所含為 Null，將傳回 Null。

請注意

只有小寫的字母會轉成大寫；原本大寫或非字母之字元保持不變。


關鍵字分類

分類	說明
陣列	建立、定義與使用陣列。
編譯指令	指定編譯方式。
控制流程	迴圈及程序流程控制。
轉換	轉換數值及資料型態。
資料型態	資料型態與 variant 次型態。
日期與時間	轉換、使用日期與時間運算式。
檔案系統	控制檔案系統與處理檔案。
錯誤	偵測與傳回錯誤值。
金融	執行各種金融運算。
輸入與輸出	接受輸入與顯示輸出。
數學	執行各種數學運算。
其它	啟動其它應用程式與處理事件。
運算子	比較運算式與執行其他它運算。
字串處理	處理字串及字串資料型態。
變數與常數	宣告、定義變數與常數。


陣列關鍵字摘要

作用	關鍵字
確認一個陣列。	IsArray
建立一個陣列。	Array
改變下標的預設最小值。	Option Base
宣告及初始陣列。	Dim, Private, Public, ReDim, Static
判斷陣列下標極限值。	LBound, UBound
重新初始一個陣列。	Erase, ReDim


集合物件關鍵字摘要

作用	關鍵字
建立一個 Collection 物件。	Collection
新增物件到集合物件中。	Add
從集合物件中移除物件。	Remove
引用集合物件中的項目。	Item


編譯指令關鍵字摘要

作用	關鍵字
定義編譯常數。	#Const
編譯程式碼中的選取區塊。	#If...Then...#Else


控制流程關鍵字摘要

作用	關鍵字
分支。	GoSub...Return, GoTo, On Error, On...GoSub, On...GoTo
結束或暫停程式。	DoEvents, End, Exit, Stop
迴圈。	Do...Loop, For...Next, For Each...Next, While...Wend, With
判斷。	Choose, If...Then...Else, Select Case, Switch
程序。	Call, Function, Property Get, Property Let, Property Set, Sub


轉換關鍵字摘要

作用	關鍵字
ANSI 值轉為字串。	Chr
大小寫轉換。	Format, LCase, UCase
日期轉為序數。	DateSerial, DateValue
數字進位轉換。	Hex, Oct
數值轉為字串。	Format, Str
資料型態轉換。	CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
日期轉換。	Day, Month, Weekday, Year
時間轉換。	Hour, Minute, Second
字串轉為 ASCII 值。	Asc
字串轉為數值。	Val
時間轉為序數。	TimeSerial, TimeValue


資料型態關鍵字摘要

作用	關鍵字
資料型態轉換。	CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
設定資料型態。	Boolean, Byte, Currency, Date, Double, Integer, Long, Object, Single, String, Variant (預設)
檢查資料型態。	IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject


日期與時間關鍵字摘要

作用	關鍵字
設定現在日期或時間。	Date, Now, Time
計算日期。	DateAdd, DateDiff, DatePart
傳回日期。	DateSerial, DateValue
傳回時間。	TimeSerial, TimeValue
設定日期或時間。	Date, Time
計時。	Timer


檔案系統關鍵字摘要

作用	關鍵字
改變目錄或資料夾。	ChDir
改變磁碟。	ChDrive
複製檔案。	FileCopy
新建目錄或資料夾。	MkDir
移除目錄或資料夾。	RmDir
重新命名檔案、目錄或資料夾。	Name
傳回目前路徑。	CurDir
傳回檔案的日期時間。	FileDateTime
傳回檔案、目錄及標籤屬性。	GetAttr
傳回檔案長度。	FileLen
傳回檔名或磁碟標籤。	Dir
設定檔案的屬性 。	SetAttr


錯誤關鍵字摘要

作用	關鍵字
產生執行階段錯誤。	Clear, Error, Raise
取得錯誤訊息。	Error
提供錯誤資訊。	Err
傳回 Error variant。	CVErr
執行階段的錯誤處理。	On Error, Resume
型態確認。	IsError


金融關鍵字摘要

作用	關鍵字
計算折舊率。	DDB, SLN, SYD
計算未來值。	FV
計算利率。	Rate
計算本質利率。	IRR, MIRR
計算期數。	NPer
計算支付。	IPmt, Pmt, PPmt
計算目前淨值。	NPV, PV


輸入與輸出關鍵字摘要

作用	關鍵字
存取或建立檔案。	Open
關閉檔案。	Close, Reset
控制輸出外觀。	Format, Print, Print #, Spc, Tab, Width #
複製檔案。	FileCopy
取得檔案相關資訊。	EOF, FileAttr, FileDateTime, FileLen, FreeFile, GetAttr, Loc, LOF, Seek
檔案管理。	Dir, Kill, Lock, Unlock, Name
從檔案讀取。	Get, Input, Input #, Line Input #
傳回檔案長度。	FileLen
設定或取得檔案屬性。	FileAttr, GetAttr, SetAttr
設定檔案讀寫位置。	Seek
寫入檔案。	Print #, Put, Write #


數學關鍵字摘要

作用	關鍵字
三角函數。	Atn, Cos, Sin, Tan
一般計算。	Exp, Log, Sqr
產生亂數。	Randomize, Rnd
取得絕對值。	Abs
取得運算式的正負號。	Sgn
數值轉換。	Fix, Int


其它關鍵字摘要

作用	關鍵字
處理擱置事件。	DoEvents
執行其它程式。	AppActivate, Shell
傳送按鍵訊息給其它應用程式。	SendKeys
發出警告聲。	Beep
系統。	Environ
提供指令列字串。	Command
Automation。	CreateObject, GetObject
色彩。	QBColor, RGB


運算子關鍵字摘要

作用	關鍵字
算術。	^, �}, *, /, \, Mod, +, &, =
比較。	=, <>, <, >, <=, >=, Like, Is
邏輯運算。	Not, And, Or, Xor, Eqv, Imp


登錄關鍵字摘要

作用	關鍵字
刪除程式設定。	DeleteSetting
讀取程式設定。	GetSetting, GetAllSettings
儲存程式設定。	SaveSetting


字串處理關鍵字摘要

作用	關鍵字
字串比較。	StrComp
轉換字串。	StrConv
大小寫轉換。	Format, LCase, UCase
建立重複字元的字串。	Space, String
計算字串長度。	Len
設定字串格式。	Format
重排字串。	LSet, RSet
處理字串。	InStr, Left, LTrim, Mid, Right, ,RTrim, Trim
設定字串比較規則。	Option Compare
運用 ASCII 與 ANSI 值。	Asc, Chr


變數與常數關鍵字摘要

作用	關鍵字
指定值。	Let
宣告變數或常數。	Const, Dim, Private, Public, New, Static
宣告模組為私有。	Option Private Module
判斷 Variant。	IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject, TypeName, VarType
引用目前物件。	Me
變數須明確宣告。	Option Explicit
設定預設資料型態。	Deftype


可處理的錯誤

���

可處理的錯誤通常發生在應用程式執行時，但也有一些會發生在開發期間或編譯階段。您可使用 On Error 陳述式與 Err 物件來測試並回應可處理的錯誤。1 - 1000 之間未使用之錯誤代碼都是保留給 Visual Basic 以後使用的。

代碼	訊息
3	Return 沒有相對應的 GoSub
5	不正確的程序呼叫
6	溢位
7	記憶體不足
9	陣列索引超出範圍
10	此陣列為固定的或暫時鎖定
11	除以零
13	型態不符合
14	堆疊空間不足
16	運算式太過複雜
17	無法執行所要求的動作
18	發生使用者中斷
20	Resume 沒有對應的錯誤處理常式
28	堆疊空間不足
35	沒有定義 Sub、Function，或 Property
47	程式碼資源或DLL 應用程式的客戶端過多
48	載入程式碼資源或 DLL 時發生錯誤
49	程式碼資源或 DLL 呼叫規格錯誤
51	內部錯誤
52	不正確的檔案名稱或數目
53	找不到檔案
54	不正確的檔案模式
55	檔案已開啟
57	週邊設備 I/O 錯誤
58	檔案已經存在
59	資料錄的長度不正確
61	磁碟已滿
62	輸入已超過檔案結尾
63	資料錄的個數不正確
67	檔案過多
68	週邊設備無法使用
70	沒有使用權限
71	磁碟尚未就緒
74	無法更名為其它磁碟機
75	路徑/檔案存取錯誤
76	找不到路徑
91	尚未設定物件變數或 With 區塊變數
92	For 迴圈沒有被初始
93	模式比對字串不正確
94	Null 的使用不正確
97	無法在一個非定義的物件類別之執行物件上呼叫 Friend 程序
98	屬性或方法呼叫不能包括私有物件的引用，無論是當作引數或傳回值
298	系統 資源或 DLL無法被載入
320	無法在指定的檔名中使用字元週邊設備名稱
321	不正確的檔案格式
322	無法建立必要的暫時檔案
325	來源檔案中有不正確的格式
327	找不到指名的資料值
328	不正確的參數；無法寫入陣列
335	無法存取系統登記
336	原件登記不正確
337	找不到原件
338	執行不正確
360	物件已載入
361	無法載入或載出此物件
363	找不到指定的控制項
364	物件已釋出
365	無法在此內容釋出
368	指定的檔案已過時，該程式需要較新的版本
371	指定的物件不能當作 Show 的擁有人表單
380	屬性的值不正確
381	不正確的屬性陣列索引
382	Property Set 無法在執行階段執行
383	Property Set 無法用於唯讀屬性
385	需要屬性陣列索引
387	Property Set 不允許
393	Property Get 無法在執行階段執行 (錯誤 393)
394	Property Get 無法用於唯寫屬性
400	表單已顯示；無法強制顯示
402	程式必須先關閉最上方的強制回應表單
419	不允許使用物件
422	找不到屬性
423	找不到屬性或方法
424	此處需要物件
425	物件使用不正確
429	元件無法建立物件或傳回引用到此物件
430	物件類別不支援 Automation
432	在 Automation 作業期間找不到檔案或物件類別名稱
438	物件不支援此屬性或方法
440	Automation 錯誤
442	連接至型態程式庫或物件程式庫的遠端處理已經遺失
443	Automation 物件沒有預設值
445	物件不支援此動作
446	物件不支援指名引數
447	物件不支援目前的地區設定
448	找不到指名引數
449	引數不為選擇性或不正確的屬性設定
450	引數的個數錯誤或不正確的屬性設定
451	物件並非集合物件
452	序數不正確
453	找不到指定的程式碼來源
454	找不到程式碼
455	程式碼鎖定錯誤
457	此索引鍵已經與集合物件中的某元素相關
458	變數使用的型態是 Visual Basic 不支援的
459	此元件不支援事件
460	剪貼簿格式不正確
461	找不到方法或資料成員
462	遠端伺服器不存在或無法使用
463	類別未在本機註冊
480	無法建立 AutoRedraw 影像
481	圖片不正確
482	印表機錯誤
483	印表機驅動程式不支援指定屬性
484	從系統得到印表機的資訊時出錯。確定正確設定了印表機。
485	無效的圖形型態。
486	不能用這種類型的印表機列印表單影像
520	不能清理剪貼簿
521	不能打開剪貼簿
735	無法將檔案儲存至 TEMP 目錄
744	找不到要搜尋的文字
746	取代資料過長
31001	記憶體不足
31004	沒有物件
31018	未設定物件類別
31027	無法啟動物件
31032	無法建立內嵌物件
31036	存檔有誤
31037	載入檔案有誤


AddressOf 運算子範例

下面的範例建立一個內含清單方塊的表單，該清單方塊包含系統中根據英文字母或中文筆劃順序排序的的字型清單。

要執行該範例，請建立一個內含清單方塊的表單。表單單元的程式碼如下：

Option Explicit

Private Sub Form_Load()

    Module1.FillListWithFonts List1

End Sub

把下面的程式碼放置於模組中。EnumFontFamilies 函數定義中的第三個引數 Long ，它代表一個程序。該引數必須包含這個程序的位址，而不是程序轉回之值。在對 EnumFontFamilies 的呼叫中，第三個引數需要 AddressOf 運算子來傳回 EnumFontFamProc 程序的位址，該程序是當呼叫 Windows API 函數(即 EnumFontFamilies) 時提供的回調程序名稱。當把 AddressOf EnumFontFamProc 傳遞給 EnumFontFamilies 時，Windows 就會為系統中的每一個字型程式庫呼叫一次 EnumFontFamProc。傳遞給 EnumFontFamilies 的最後引數指定用來顯示資訊的清單方塊。

'字型列舉型態

Public Const LF_FACESIZE = 32

Public Const LF_FULLFACESIZE = 64

Type LOGFONT

        lfHeight As Long

        lfWidth As Long

        lfEscapement As Long

        lfOrientation As Long

        lfWeight As Long

        lfItalic As Byte

        lfUnderline As Byte

        lfStrikeOut As Byte

        lfCharSet As Byte

        lfOutPrecision As Byte

        lfClipPrecision As Byte

        lfQuality As Byte

        lfPitchAndFamily As Byte

        lfFaceName(LF_FACESIZE) As Byte

End Type

Type NEWTEXTMETRIC

        tmHeight As Long

        tmAscent As Long

        tmDescent As Long

        tmInternalLeading As Long

        tmExternalLeading As Long

        tmAveCharWidth As Long

        tmMaxCharWidth As Long

        tmWeight As Long

        tmOverhang As Long

        tmDigitizedAspectX As Long

        tmDigitizedAspectY As Long

        tmFirstChar As Byte

        tmLastChar As Byte

        tmDefaultChar As Byte

        tmBreakChar As Byte

        tmItalic As Byte

        tmUnderlined As Byte

        tmStruckOut As Byte

        tmPitchAndFamily As Byte

        tmCharSet As Byte

        ntmFlags As Long

        ntmSizeEM As Long

        ntmCellHeight As Long

        ntmAveWidth As Long

End Type

' ntmFlags 段旗標

Public Const NTM_REGULAR = &H40&

Public Const NTM_BOLD = &H20&

Public Const NTM_ITALIC = &H1&

'  tmPitchAndFamily 旗標

Public Const TMPF_FIXED_PITCH = &H1

Public Const TMPF_VECTOR = &H2

Public Const TMPF_DEVICE = &H8

Public Const TMPF_TRUETYPE = &H4

Public Const ELF_VERSION = 0

Public Const ELF_CULTURE_LATIN = 0

'  EnumFonts 遮罩

Public Const RASTER_FONTTYPE = &H1

Public Const DEVICE_FONTTYPE = &H2

Public Const TRUETYPE_FONTTYPE = &H4

Declare Function EnumFontFamilies Lib "gdi32" Alias _
 "EnumFontFamiliesA" _ (ByVal hDC As Long, ByVal lpszFamily As String, _  ByVal lpEnumFontFamProc As Long, LParam As Any) As Long

Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long

Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, _
 ByVal hDC As Long) As Long

Function EnumFontFamProc(lpNLF As LOGFONT, lpNTM As NEWTEXTMETRIC, _
 ByVal FontType As Long, LParam As ListBox) As Long

Dim FaceName As String

Dim FullName As String

    FaceName = StrConv(lpNLF.lfFaceName, vbUnicode)

    LParam.AddItem Left$(FaceName, InStr(FaceName, vbNullChar) - 1)

    EnumFontFamProc = 1

End Function

Sub FillListWithFonts(LB As ListBox)

Dim hDC As Long

    LB.Clear

    hDC = GetDC(LB.hWnd)

    EnumFontFamilies hDC, vbNullString, AddressOf EnumFontFamProc, LB

    ReleaseDC LB.hWnd, hDC

End Sub


Assert 方法範例

下面的範例說明如何使用 Assert 方法。範例需要一個內含兩個按紐控制項的表單。預設的按紐名稱是 Command1 和 Command2。

當範例執行階段，按一下 Command1 按紐使得按紐上的文字在 0 和 1 之間進行Shift。按一下 Command2 按紐可能不做任何事，也可能引起一個確認，應該執行哪一個操作取決於 Command1 按紐上所顯示的值。該確認將在最後陳述式執行之後使整個執行停止，並且 Debug.Assert 資料列被反白顯示顯式。

Option Explicit

Private blnAssert As Boolean

Private intNumber As Integer

Private Sub Command1_Click()

    blnAssert = Not blnAssert

    intNumber = IIf(intNumber <> 0, 0, 1)

    Command1.Caption = intNumber

End Sub

Private Sub Command2_Click()

    Debug.Assert blnAssert

End Sub

Private Sub Form_Load()

    Command1.Caption = intNumber

    Command2.Caption = "Assert Tester"

End Sub


Friend 範例

將下面的程式碼放置在一個類別模組中時，該段程式碼會使得成員變數 dblBalance 對該專案中的物件類別所有使用者來說都是可存取的。物件類別的任何使用者都可以獲得該變數值；但是只有專案內的程式碼可以對該變數進行指定。

Private dblBalance As Double

Public Property Get Balance() As Double

    Balance = dblBalance

End Property

Friend Property Let Balance(dblNewBalance As Double)

    dblBalance = dblNewBalance

End Property


RaiseEvent 陳述式範例

下面的範例使用事件來計數 100 米短跑比賽展示的最短時間秒數。程式碼展示了所有與事件有關的方法、屬性、以及陳述式，包括 RaiseEvent 陳述式。

引發一個事件的物件類別是事件源，而實現這個事件的物件類別是吸收物件類別。一個事件源可以有多個吸收物件類別用於吸收這個事件源所產生的事件。當物件類別引發事件時，該事件將會引發在每一個選取來為該物件執行個體吸收事件的物件類別上。

該範例使用了一個內含按紐 (Command1)、標籤 (Label1)、和兩個文字方塊 (Text1 和 Text2) 的表單 (Form1)。當按一下該按紐時，第一個文字方塊顯示「From Now」並且第二個文字方塊開始時間計數。當整個時間 (9.84 秒) 結束時，第一個文字方塊將顯示「Until Now」，並且第二個文字方塊顯示「9.84」。

Form1 的程式碼指定了表單的最初狀態和結束狀態。它同時還包括當事件引發時所要執行的程式碼。

Option Explicit

Private WithEvents mText As TimerState

Private Sub Command1_Click()

    Text1.Text = "From Now"

    Text1.Refresh

    Text2.Text = "0"

    Text2.Refresh

    Call mText.TimerTask(9.84)

End Sub

Private Sub Form_Load()

    Command1.Caption = "Click to Start Timer"

    Text1.Text = ""

    Text2.Text = ""

    Label1.Caption = "The fastest 100 meters ever run took this long:"

    Set mText = New TimerState

    End Sub

Private Sub mText_ChangeText()

    Text1.Text = "Until Now"

    Text2.Text = "9.84"

End Sub

Private Sub mText_UpdateTime(ByVal dblJump As Double)

    Text2.Text = Str(Format(dblJump, "0"))

    DoEvents

End Sub

剩下的程式碼在一個名為 TimerState 的類別模組中。包括在該模組指令中的是 Raise Event陳述式。

Option Explicit

Public Event UpdateTime(ByVal dblJump As Double)

Public Event ChangeText()

Public Sub TimerTask(ByVal Duration As Double)

    Dim dblStart As Double

    Dim dblSecond As Double

    Dim dblSoFar As Double

    dblStart = Timer

    dblSoFar = dblStart

    Do While Timer < dblStart + Duration

        If Timer - dblSoFar >= 1 Then

            dblSoFar = dblSoFar + 1

            RaiseEvent UpdateTime(Timer - dblStart)

        End If

    Loop

    RaiseEvent ChangeText

End Sub


AddressOf 運算子

��� [image] ���

一個單項運算符，它將其後面的程序位址傳遞給 API 程序，該 API 程序在引數資料表對應位置中需要一個函數指標。

語法

AddressOf procedurename

必需的 procedurename 指定要傳遞的位址是哪一個程序位址。這個程序必須是發出呼叫指令的專案中之一個一般模組模組裡的一個程序。

請注意

當一個程序的名稱出現在一個引數清單中時，通常已經進行該程序的評估，並且傳遞該程序傳回值的位址。AddressOf 允許將該程序的位址傳遞給動態連結程式庫 (DLL) 中的一個 Windows API 函數，而不是傳遞該自程序轉回值。然後API 函數就可以使用這個位址來呼叫相對的 Basic 程序，這個程序就是我們所知道的回調。AddressOf 運算子只出現在對 API 程序的呼叫中。

盡管可以使用 AddressOf 運算子在 Basic 程序之間傳遞程序指標，卻無法透過這樣的指標從 Basic 內部呼叫函數。這就是說，例如，使用 Basic 撰寫的物件類別 無法使用這樣的指標來回調自己的控制器。當使用 AddressOf 運算子在 Basic 內的程序之間傳遞程序的指標時，被呼叫程序的參數型態必須定義為 As Long。

警告   如果無法完全理解函數回調的概念，則使用 AddressOf 運算子可能會導致意想不到的結果。必須理解回調的 Basic 部分是如何工作，以及接受所傳遞之函數位址 DLL 的程式碼是如何工作。要偵錯這樣的互動操作是非常困難的，因為該程式和開發環境執行在相同的處理序中。在某些情況下，系統的偵錯也許是不可能。

附註   可以使用 Microsoft Visual C++ (或者類似的工具) 編譯的 DLLs 來建立自己的回調函數原型。要使用 AddressOf 運算子來工作，您的原型必需使用 __stdcall 呼叫規格。預設的呼叫規格 (__cdecl) 無法與 AddressOf 運算子一起工作。

因為一個回調的呼叫程式不在使用者自己的程式中，所以很重要的一點是要保證回調程序中的錯誤不會回傳給呼叫者。可以透過把 On Error Resume Next 陳述式放置於回調程序的起始處來達到這個要求。


Assert 方法

��� [image] ��� [image] ���

有準則地在該方法出現的資料列上暫停執行。

語法

object.Assert booleanexpression

Assert 方法的語法有如下的物件定位項 (qualifier) 和引數：

單元	描述
object	必需的。一定為 Debug 物件。
booleanexpression	必需的。值為 True 或者 False 的運算式。
請注意

Assert 呼叫只在開發環境中工作。將模組編譯成為可執行的檔案時，則會忽略過呼叫 Debug 物件的方法。

全部 booleanexpression 會常常進行評估。例如，即使將 And 運算式的第一單元評估為 False，整個運算式還要要進行評估。


Friend

��� [image] ���

修改表單模組或者類別模組中程序的定義，使得物件類別以外的模組可以呼叫該程序，但必須是在定義該物件類別的專案的單元內。Friend 程序在一般的模組中是無法使用的。

語法

[Private | Friend | Public] [Static] [Sub | Function | Property] procedurename

必需的 procedurename 是所要設定為在整個專案中都是可見的之程序名稱，但是該程序對於物件類別的控制器卻不顯示。

請注意

物件類別中的 Public 程序在任何地方都可以呼叫，即使是該物件類別執行個體的控制器要呼叫也可以。宣告一個程序為 Private，就阻止了該物件的控制器對於該程序之呼叫，但是同時也阻止定義該物件類別的專案內部對該程序之呼叫。Friend 使得該程序在整個專案中都是可見的，但是對於一個物件執行個體的控制器卻不顯示。Friend 只能出現在表單模組和類別模組中，並且只能修改程序的名稱，無法修改變數或者型態。一個物件類別中的程序可以存取某個專案所有其它物件類別的 Friend 程序。Friend 程序不會出現在物件類別的形態程式庫中。一個 Friend 程序無法進行後續結合。


RaiseEvent 陳述式

��� [image] ���

引發在一個物件類別、表單、或者文件中的模組層次中宣告的事件。

語法

RaiseEvent eventname [(argumentlist)]

必需的 eventname 是在模組 中進行宣告，並且符合 Basic 變數命名規格的一個事件名稱。

RaiseEvent 陳述式的語法有如下單元：

單元	描述
Eventname	必需的。所引發的事件名稱。
Argumentlist	選項的。用逗號 分隔的變數、陣列，或者運算式的清單。argumentlist 必須用圓括號括起來。如果沒有引數，則必須忽略圓括號。
請注意

如果在引發事件的模組內沒有宣告該事件，就會發生錯誤。下面這個程式片段說明事件的宣告以及引發該事件的程序。

' 在類別模組的模組級宣告一個事件

Event LogonCompleted (UserName as String)

Sub

' 引發該事件。

RaiseEvent LogonCompleted ("AntoineJan")

End Sub

如果在 RaiseEvent 中該事件沒有引數，包括無的圓括號，則對該事件的呼叫就會導致錯誤。無法使用 RaiseEvent 來引發在模組中沒有明確定義的事件。例如，如果表單有 Click 事件，則無法使用 RaiseEvent 來引發該表單的 Click 事件。如果在表單模組 中宣告 Click 事件，則它將覆蓋表單自己的 Click 事件。仍然可以使用呼叫該事件的正常語法來呼叫該表單的 Click 事件，但是無法使用 RaiseEvent 陳述式。

事件的引發是根據連接建立的順序來進行。因為事件可以有 ByRef 參數，所以後來連接的處理序可能接收已經由更早的事件處理程式更改過之參數。


字元集 (128 - 255)
字元集 (128 ﹣255)

���

128	•	160	[space]	192	�	224	�
129	•	161	�	193	�	225	�
130	•	162	�	194	�	226	�
131	•	163	�	195	�	227	�
132	•	164	�	196	�	228	�
133	•	165	�	197	�	229	�
134	•	166	�	198	�	230	�
135	•	167	�	199	�	231	�
136	•	168	�	200	�	232	�
137	•	169	�	201	�	233	�
138	•	170	�	202	�	234	�
139	•	171	�	203	�	235	�
140	•	172	�	204	�	236	�
141	•	173	�	205	�	237	�
142	•	174	�	206	�	238	�
143	•	175	�	207	�	239	�
144	•	176	�	208	�	240	�
145	�}	177	�	209	�	241	�
146	�}	178	�	210	�	242	�
147	•	179	�	211	�	243	�
148	•	180	�	212	�	244	�
149	•	181	�	213	�	245	�
150	•	182	�	214	�	246	�
151	•	183	�	215	�	247	�
152	•	184	�	216	�	248	�
153	•	185	�	217	�	249	�
154	•	186	�	218	�	250	�
155	•	187	�	219	�	251	�
156	•	188	�	220	�	252	�
157	•	189	�	221	�	253	�
158	•	190	�	222	�	254	�
159	•	191	�	223	�	255	�
•	Microsoft Windows 並不支援這些字元。

上表中的值均是 Windows 的預設值。但是，ANSI 字元集中 127 以上的值由指定作業系統的程式碼頁決定。


日期格式常數

���

僅當您的專案對包含這些常數定義的相應型態程式庫有一個顯式引用時，才可以使用這些常數 。

常數	值	描述
vbGeneralDate	0	顯示日期和/或時間。對於一個實數，顯示日期和時間。如果沒有小數單元，則僅顯示日期。如果沒有整數單元，則僅顯示時間。日期和時間的顯示由系統設定值確定。
vbLongDate	1	用電腦上地區選項(或國別設定)中指定的完整日期格式顯示日期。
vbShortDate	2	用電腦上地區選項(或國別設定)中指定的簡短日期格式顯示日期。
vbLongTime	3	用電腦上地區選項(或國別設定)中指定的完整時間顯示時間。
vbShortTime	4	用電腦上地區選項(或國別設定)中指定的簡短時間顯示時間。


磁碟機型態常數

���

僅當您的專案對包含這些常數定義的相應型態程式庫有一個顯式引用時，才可以使用這些常數。

常數	值	描述
Unknown	0	無法確定磁碟機型態。
Removable	1	磁碟機具有可移除媒體。包括所有軟碟機和許多其它類型的儲存週邊設備。
Fixed	2	磁碟機具有固定媒體 (不可移除的)。包括可移除硬碟在內的所有硬碟驅動器。
Remote	3	網路磁碟機。包括在網路上任何地方都可以共用的磁碟機。
CDROM	4	磁碟機是一個 CD-ROM。唯讀和可讀寫的 CD-ROM 是沒有區別的。
RAMDisk	5	磁碟機是本機電腦上的一區塊隨機存取記憶體 (RAM)，它工作起來就像是磁碟機一樣。


檔案屬性常數

���

僅當您的專案對包含這些常數定義的相應型態程式庫有一個顯式引用時，才可以使用這些常數。

常數	值	描述
Normal	0	普通檔案。沒有設定屬性。
ReadOnly	1	唯讀檔案。屬性是可讀/寫。
Hidden	2	隱藏檔。屬性是可讀/寫。
System	4	系統檔。屬性是可讀/寫。
Volume	8	磁碟機標籤。屬性是唯讀。
Directory	16	資料夾或目錄。屬性是唯讀。
Archive	32	自上次備份之後已經改變的檔案。屬性是可讀/寫。
Alias	64	連結或捷徑。屬性是唯讀。
Compressed	128	壓縮檔案。屬性是唯讀。


檔案輸入/輸出常數

���

僅當您的專案對包含這些常數定義的相應型態程式庫有一個顯式引用時，才可以使用這些常數。

常數	值	描述
ForReading	1	開啟檔案用於唯讀操作。您無法寫入改檔案。
ForWriting	2	開啟檔案用於寫入。如果存在具有相同檔名的檔案，檔案原有的內容會被覆蓋。
ForAppending	8	開啟檔案並向檔案的結尾寫入。


特殊資料夾常數

���

僅當您的專案對包含這些常數定義的相應型態程式庫有一個顯式引用時，才可以使用這些常數。

常數	值	描述
WindowsFolder	0	Windows 資料夾包含由 Windows 作業系統安裝的檔案。
SystemFolder	1	System (系統) 資料夾包含程式庫、字型和週邊設備驅動程式。
TemporaryFolder	2	Temp (暫存) 資料夾用於儲存暫存檔。它的路徑可在 TMP 環境變數中找到。


三態 (Tristate) 常數

���

僅當您的專案對包含這些常數定義的相應型態程式庫有一個顯式引用時，才可以使用這些常數。

常數	值	描述
vbTrue	-1	True
vbFalse	0	False
vbUseDefault	-2	使用預設值。


Filter 函數

��� [image] ���

描述

傳回一個從零開始的陣列，該陣列包含基於指定篩選準則的一個字串陣列的子集。

語法

Filter(sourcesrray, match[, include[, compare]])

Filter 函數語法有如下幾個指名引數：

單元	描述
sourcearray	必要引數。要執行搜尋的一維字串陣列。
match	必要引數。要搜尋的字串。
include	選擇性引數。Boolean 值，表示傳回子字串包含或不包含 match 字串。如果 Include 是 True，Filter 傳回的是包含 match 子字串的陣列子集。如果 Include 是 False，Filter 傳回的是不包含  match 子字串的陣列子集。
compare	選擇性引數。數字值，表示所使用的字串比較型態。有關其設定，請參閱下面的「設定值」。
設定值

compare 引數的設定值如下：

常數	值	描述
VbUseCompareOption	-1	使用 Option Compare 陳述式的設定值來執行比較。
vbBinaryCompare	0	執行二進位比較。
vbTextCompare	1	執行文字比較。
vbDatabaseCompare	2	只用於 Microsoft Access。基於您的資料庫資訊來執行比較。
請注意

如果在 sourcearray 中沒有發現與 match 相符合的值，Filter 傳回一個無陣列。如果 sourcearray 是 Null 或不是一個一維陣列，則產生錯誤。

Filter 函數所傳回的陣列，其組成項目數剛好是所找到的符合項目數。


FormatCurrency 函數

��� [image] ���

描述

傳回一個貨幣值格式的運算式，它使用「控制台」、「地區選項(或國別設定)」中定義的貨幣符號。

語法

FormatCurrency(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

FormatCurrency 函數語法有如下幾個單元：

單元	描述
Expression	必要引數。要格式化的運算式。
NumDigitsAfterDecimal	選擇性引數。數字值，表示小數點右邊的顯示位元數。預設值為 �}1，表示使用電腦地區選項(或國別設定)中的設定值。
IncludeLeadingDigit	選擇性引數。三態常數，表示小數點前是否顯示一個零。關於其值，請參閱「設定值」。
UseParensForNegativeNumbers	選擇性引數。三態常數，表示是否把負數值放在園括號內。關於其值，請參閱「設定值」。
GroupDigits	選擇性引數。三態常數，表示是否用數位群組符號對數字進行分組，數位群組符號由電腦地區選項(或國別設定)中的設定值指定。關於其值，請參閱「設定值」。
設定值

IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 引數的設定值如下：

常數	值	描述
vbTrue	-1	True
vbFalse	0	False
vbUseDefault	-2	使用電腦地區選項(或國別設定)中的設定值。
請注意

當忽略一個或多個選擇性引數時，被忽略的引數值由電腦地區選項(或國別設定)中的設定值提供。

貨幣符號相對貨幣值的位置由電腦地區選項(或國別設定)中的設定值確定。

附註   除起始的零外，所有設定值資訊都來自「控制台」、「地區選項(或國別設定)」的「貨幣」頁籤，起始的零來自「數字」頁籤。


FormatDateTime函數

��� [image] ���

描述

傳回一個日期或時間格式的運算式。

語法

FormatDateTime(Date[,NamedFormat])

FormatDateTime 函數語法有如下幾個單元：

單元	描述
Date	必要引數。要被格式化的日期運算式。
NamedFormat	選擇性引數。數字值，表示日期/時間所使用的格式。如果忽略該值，則使用 vbGeneralDate。
設定值

NamedFormat 引數的設定值如下：

常數	值	描述
vbGeneralDate	0	顯示日期和/或時間。如果有日期單元，則用簡短日期格式顯示。如果有時間單元，則用完整時間顯示。如果都有，兩單元都顯示。
vbLongDate	1	用電腦地區選項(或國別設定)中指定的完整日期格式顯示日期。
vbShortDate	2	用電腦地區選項(或國別設定)中指定的簡短日期格式顯示日期。
vbLongTime	3	用電腦地區選項(或國別設定)中指定的時間格式顯示時間。
vbShortTime	4	用24小時格式 (hh：mm) 顯示時間。


FormatNumber函數

��� [image] ���

描述

傳回一個數字格式的運算式。

語法

FormatNumber(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

FormatNumber函數語法有如下幾個單元：

單元	描述
Expression	必要引數。要被格式化的運算式。
NumDigitsAfterDecimal	選擇性引數。數字值，表示小數點右邊的顯示位元數。預設值為�}1，表示使用電腦地區選項(或國別設定)中的設定值。
IncludeLeadingDigit	選擇性引數。三態常數，表示小數點前是否顯示零。關於其值，請參閱「設定值」。
UseParensForNegativeNumbers	選擇性引數。三態常數，表示是否把負數值放在圓括號內。關於其值，請參閱「設定值」。
GroupDigits	選擇性引數。三態常數，表示是否用數位群組符號對數字分組，數位群組符號在電腦地區選項(或國別設定)中指定。關於其值，請參閱「設定值」。
設定值

IncludeLeadingDigit、UseParensForNegativeNumbers和GroupDigits引數的設定值如下：

常數	值	描述
vbTrue	-1	True
vbFalse	0	False
vbUseDefault	-2	用電腦地區選項(或國別設定)中的設定值。
請注意

當忽略一個或多個選擇性引數時，被忽略的引數值由電腦地區選項(或國別設定)中的設定值提供。

附註   所有設定值資訊都來自「控制台」、「地區選項(或國別設定)」的「數字」頁籤。


FormatPercent函數

��� [image] ���

描述

傳回一個百分比格式 (乘以 100) 的運算式，後面有 % 符號。

語法

FormatPercent(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

FormatPercent函數語法有如下幾個單元：

單元	描述
Expression	必要引數。要格式化的運算式。
NumDigitsAfterDecimal	選擇性引數。表示小數點右邊的顯示位元數。預設值為 -1，表示使用電腦地區選項(或國別設定)中的設定值。
IncludeLeadingDigit	選擇性引數。三態常數，表示小數點前是否顯示零。關於其值，請參閱「設定值」。
UseParensForNegativeNumbers	選擇性引數。三態常數，表示是否把負數放在圓括號內。關於其值，請參閱「設定值」。
GroupDigits	選擇性引數。三態常數，表示是否用數位群組符號對數字進行分組，數位群組符號在電腦的地區選項(或國別設定)中指定。關於其值，請參閱「設定值」。
設定值

IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 引數的設定值如下：

常數	值	描述
vbTrue	-1	True
vbFalse	0	False
vbUseDefault	-2	使用電腦地區選項(或國別設定)中的設定值。
請注意

當忽略一個或多個選擇性引數時，被忽略的引數值由電腦地區選項(或國別設定)中的設定值提供。

附註   所有的設定值資訊都來自「控制台」、「地區選項(或國別設定)」的「數字」頁籤。


InStrRev函數

��� [image] ���

描述

傳回一個字串在另一個字串中出現的位置，從字串的末尾算起。

語法

InstrRev(stringcheck, stringmatch[, start[, compare]])

InstrRev 函數語法有如下幾個指名引數：

單元	描述
stringcheck	必要引數。要執行搜尋的字串運算式。
stringmatch	必要引數。要搜尋的字串運算式。
Start	選擇性引數的。數值運算式，設定每次搜尋的開始位置。如果忽略，則使用 �}1，它表示從上一個字元位置開始搜尋。如果 start 包含 Null，則產生一個錯誤。
Compare	選項的。數字值，指出在判斷子字串時所使用的比較方法。如果忽略，則執行二進位比較。關於其值，請參閱「設定值」。
設定值

compare 引數值如下：

常數	值	描述
vbUseCompareOption	-1	用Option Compare陳述式的設定值來執行比較。
vbBinaryCompare	0	執行二進位比較。
vbTextCompare	1	執行文字比較。
vbDatabaseCompare	2	只用於 Microsoft Access。根據您的資料庫資訊執行比較。
傳回值

InStrRev傳回值如下：

如果	InStrRev傳回
stringcheck 長度為零。	0
stringcheck 為 Null。	Null
stringmatch 長度為零	Start
stringmatch 為 Null	Null
stringmatch 沒有找到。	0
stringmatch 在 stringcheck 中找到。	找到相符合的文字串的位置。
start > Len(stringmatch)	0
請注意

請注意，InstrRev 函數的語法和 Instr 函數的語法不相同。


Join 函數

��� [image] ���

描述

傳回一個字串，該字串是透過連結某個陣列中的多個子字串而建立的。

語法

Join(sourcearray[, delimiter])

Join函數語法有如下幾個指名引數：

單元	描述
sourcearray	必要引數。包含被連結子字串的一維陣列。
delimiter	選擇性引數。在傳回字串中用於分隔子字串的字元。如果忽略該項目，則使用空白 (" ") 來分隔子字串。如果 delimiter 是零長度字串 ("")，則清單中的所有項目都連結在一起，中間沒有分隔符號。


MonthName函數

��� [image] ���

描述

傳回一個表示指定月份的字串。

語法

MonthName(month[, abbreviate])

MonthName函數語法有如下幾個單元：

單元	描述
month	必要引數。月份的數值表示。例如一月是 1，二月是 2，等等。
abbreviate	選擇性引數。Boolean 值，資料表示月份名是否縮寫。如果忽略，預設值為False，表明月份名無法被縮寫。


Replace 函數

��� [image] ���

描述

傳回一個字串，該字串中指定的子字串已被取代成另一子字串，並且取代發生的次數也是指定的。

語法

Replace(expression, find, replace[, start[, count[, compare]]])

Replace 函數語法有如下幾個指名引數：

單元	描述
expression	必要引數。字串運算式，包含要取代的子字串。
find	必要引數。要搜尋到的子字串。
replace	必要引數。用來取代的子字串。
start	選擇性引數。在運算式中子字串搜尋的開始位置。如果忽略，假定從 1 開始。
count	選擇性引數。子字串進行取代的次數。如果忽略，預設值是 �}1，它表明進行所有可能的取代。
compare	選擇性引數。數字值，表示判別子字串時所用的比較模式。關於其值，請參閱「設定值」。
設定值

compare引數的設定值如下：

常數	值	描述
vbUseCompareOption	-1	使用 Option Compare 陳述式的設定值來執行比較。
vbBinaryCompare	0	執行二進位比較。
vbTextCompare	1	執行文字比較。
vbDatabaseCompare	2	僅用於 Microsoft Access。根據您的資料庫的資訊執行比較。
傳回值

Replace的傳回值如下：

如果	Replace傳回值
Expression 長度為零	零長度字串 ("")。
Expression 為 Null	一個錯誤。
Find 長度為零	Expression 的複本。
Replace 長度為零	Expression 的複本，其中移除了所有出現的 find 的字串。
start > Len(expression)	長度為零的字串。
count is 0	Expression 的複本。
請注意

Replace 函數的傳回值是一個字串，但是，其中從 start 所指定的位置開始，到 expression 字串的結尾處的一段子字串已經發生過取代動作。並不是原字串從頭到尾的一個複製。


Round 函數

��� [image] ���

描述

傳回一個數值，該數值是按照指定的小數位元數進行四捨五入運算的結果。

語法

Round(expression [,numdecimalplaces])

Round函數語法有如下幾個單元：

單元	描述
expression	必要引數。要進行四捨五入運算的數值運算式。
numdecimalplaces	選擇性引數。數字值，表示進行四捨五入運算時，小數點右邊應保留的位元數。如果忽略，則 Round 函數傳回整數。


Split 函數

��� [image] ���

描述

傳回一個陳列索引從零開始的一維陣列，它包含指定數目的子字串。

語法

Split(expression[, delimiter[, limit[, compare]]])

Split 函數語法有如下幾個指名引數：

單元	描述
expression	必要引數。包含子字串和分隔符號的字串運算式 。如果 expression 是一個長度為零的字串 ("")，Split 則傳回一個無陣列，即沒有組成項目和資料的陣列。
delimiter	選擇性引數。用於標識子字串邊界的字串字元。如果忽略，則使用空白字元 (" ") 作為分隔符號。如果 delimiter 是一個長度為零的字串，則傳回的陣列僅包含一個組成項目，即完整的 expression 字串。
limit	選擇性引數。要傳回的子字串數，-1 表示傳回所有的子字串。
compare	選擇性引數。數字值，表示判別子字串時使用的比較模式。關於其值，請參閱「設定值」。
設定值

compare 引數的設定值如下：

常數	值	描述
vbUseCompareOption	-1	用 Option Compare 陳述式中的設定值執行比較。
vbBinaryCompare	0	執行二進位比較。
vbTextCompare	1	執行文字比較。
vbDatabaseCompare	2	僅用於 Microsoft Access。根據您的資料庫的資訊執行比較。


StrReverse函數

��� [image] ���

描述

傳回一個字串，其中一個指定子字串的字元順序是反向的。

語法

StrReverse(expression)

引數 expression 是一個字串，它的字元順序要被反向。如果 expression 是一個長度為零的字串 ("")，則傳回一個長度為零的字串。如果 expression 為 Null，則產生一個錯誤。


WeekdayName函數

��� [image] ���

描述

傳回一個字串，表示一星期中的某天。

語法

WeekdayName(weekday, abbreviate, firstdayofweek)

WeekdayName函數語法有如下幾個單元：

單元	描述
Weekday	必要引數。數字值，表示一星期中的某天。該數字值要依賴于firstdayofweek設定中的設定值來決定。
Abbreviate	選擇性引數。Boolean 值，表示星期的名稱是否被縮寫。如果忽略該值，預設值為 False，表明星期的名稱無法被縮寫。
firstdayofweek	選擇性引數。數字值，表示一星期中第一天。關於其值，請參閱「設定值」。
設定值

firstdayofweek 引數值如下：

常數	值	描述
vbUseSystem	0	使用本國語言支援 (NLS) API 設定值。
vbSunday	1	星期日 (預設值)。
vbMonday	2	星期一
vbTuesday	3	星期二
vbWednesday	4	星期三
vbThursday	5	星期四
vbFriday	6	星期五
vbSaturday	7	星期六


Add 方法 (目錄)

��� [image] ��� [image] ���

描述

加入一對相對應的關鍵字和項目到 Dictionary 物件。

語法

object.Add key, item

Add方法的語法有如下幾個單元：

單元	描述
Object	必要引數。一個 Dictionary 物件的名字。
Key	必要引數。與所加入的項目相關的關鍵字。
Item	必要引數。與所加入的關鍵字相關的項目。
請注意

如果該關鍵字已經存在，則產生一個錯誤。


AddFolders 方法 (資料夾)

��� [image] ��� [image] ���

描述

加入一個新的 Folder 到 Folders 集合物件。

語法

object.Add folderName

Add 方法的語法有如下個單元：

單元	描述
Object	必要引數。一個 Folders 集合物件的名稱。
FolderName	必要引數。新加入的 Folder 的名稱。
請注意

如果 folderName 已經存在，則產生一個錯誤。


BuildPath 方法

��� [image] ��� [image] ���

描述

附加一個名字到一個已經存在的路徑。

語法

object.BuildPath(path, name)

BuildPath 方法語法有如下個單元：

單元	描述
object	必要引數。始終是 FileSystemObject 的名字。
path	必要引數。要對其附加名字的已存在路徑。路徑可以是絕對的也可以是相對的，不必指定一個已存在的資料夾。
name	必要引數。要附加到已存在路徑上的名字。
請注意

只有在需要時，BuildPath 方法才在已存在路徑和名字之間插入一個附加的路徑分隔符號。


Close 方法

��� [image] ��� [image] ���

描述

關閉一個開啟的 TextStream 檔案。

語法

object.Close

object始終是一個 TextStream 物件的名字。


Copy 方法

��� [image] ��� [image] ���

描述

把一個指定的檔案或資料夾從一個地方複寫到另一個地方。

語法

object.Copy destination[, overwrite]

Copy 方法語法有如下個單元：

單元	描述
object	必要引數。始終是一個 File 或 Folder 物件的名字。
destination	必要引數。檔案或資料夾要複寫到的接收日期端。不允許有萬用字元。
overwrite	選擇性引數。Boolean 值，如果該為 True (預設)，則已存在的檔案或資料夾將被覆蓋。如果為 False，則它們不被覆蓋。
請注意

對一個 File 或 Folder，Copy 方法的結果和執行 FileSystemObject.CopyFile 或FileSystemObject.CopyFolder 操作的結果是一樣的，在後者中， object 所引用的檔案或資料夾是作為引數傳遞的。應當注意，後面的方法能夠複寫多個檔案或資料夾。


CopyFile 方法

��� [image] ��� [image] ���

描述

把一個或多個檔案從一個地方複寫到另一個地方。

語法

object.CopyFile source, destination[, overwrite]

CopyFile 方法語法有如下個單元：

單元	描述
object	必要引數。Object 始終是一個 FileSystemObject 的名字。
source	必要引數。指明一個或多個要被複寫檔案的字串檔案說明，可以包括萬用字元。
destination	必要引數。指明 source 中的一個或多個檔案要被複寫到的接收日期端的字串，不允許有萬用字元。
overwrite	選擇性引數。Boolean ，表示存在的檔案是否被覆蓋。如果是 True，檔案將被覆蓋；如果是 False，們不被覆蓋。預設是 True。注意如果 destination 具有唯讀屬性設定，不論 overwrite 如何，CopyFile 都將失敗。
請注意

萬用字元只能用在 source 引數的最後路徑元件。例如，你可以在下面情況使用萬用字元：

FileSystemObject.CopyFile "c:\mydocuments\letters\*.doc", "c:\tempfolder\"

但下面情況無法使用：

FileSystemObject.CopyFile "c:\mydocuments\*\R1???97.xls", "c:\tempfolder"

如果 source 包含萬用字元或 destination 以路徑分隔符號(\)為結尾，則認為 destination 是一個已存在資料夾，在其中複寫相符合的檔案。否則認為 destination 是一個要建立檔案的名字。不論是那種情況，複寫一個檔案時，可能發生三種事件。

•	如果 destination 不存在，source 得到複寫。這是通常的情況。

•	如果 destination 是一個已存在的檔案，則 overwrite 為 False 時生一個錯誤，否則，source 的複寫檔案將試圖覆蓋已存在檔案。

•	如果 destination 是一個目錄，則會生一個錯誤。

如果使用萬用字元的 source 無法和任何檔案符合，同樣會產生一個錯誤。CopyFile 方法停止在遇到的第一個錯誤上。不要試圖復原或復原錯誤生前所做的任何改變。


CopyFolder 方法

��� [image] ��� [image] ���

描述

從一個地方遞迴地複寫一個資料夾到另一個地方。

語法

object.CopyFolder source, destination[, overwrite]

CopyFolder 方法語法有如下幾個單元：

單元	描述
Object	必要引數。始終為一個 FileSystemObject 的名字。
source	必要引數。指明一個或多個被複製資料夾的字串資料夾說明，可以包括萬用字元。
destination	必要引數。指明 source 中被複製資料夾和子資料夾的接收日期端的字串，不允許有萬用字元。
overwrite	選擇性引數。Boolean 值，它表示已存在的資料夾是否被覆蓋。如果為 True，檔案被覆蓋。如果為 False，檔案不被覆蓋。預設為 True。
請注意

萬用字元僅可用於 source 引數的最後路徑元件。例如，您可以在下面情況使用：

FileSystemObject.CopyFolder "c:\mydocuments\letters\*", "c:\tempfolder\"

但無法在下面情況使用它：

FileSystemObject.CopyFolder "c:\mydocuments\*\*", "c:\tempfolder\"

如果 source 包含萬用字元或 destination 以路徑分隔符號 (\) 為結尾，則認為 destination 是一個已存在的資料夾，在其中複寫相符合的資料夾和子資料夾。否則認為 destination 是一個要建立的資料夾的名字。不論何種情況，當複寫一個資料夾時，可能發生四種事件。

•	如果 destination 不存在，source 資料夾和所有的內容得到複寫。這是通常的情況。

•	如果 destination 是一個已存在的檔案，則生一個錯誤。

•	如果 destination 是一個目錄，將嘗試複製資料夾和它所有的內容。如果一個包含在 source 的檔案已在 destination 中存在， overwrite 為 False 時生一個錯誤，否則將試覆蓋這個檔案。

•	如果 destination 是一個唯讀目錄，試去複寫一個已存在的唯讀檔案到此目錄並且 overwrite 為 False 時，則生一個錯誤。

如果 source 使用的萬用字元無法和任何資料夾符合，也生一個錯誤。

CopyFolder 方法停止在遇到的第一個錯誤上。不要試復原錯誤生前所做的任何改變。


CreateFolder 方法

��� [image] ��� [image] ���

描述

建立一個資料夾。

語法

object.CreateFolder(foldername)

CreateFolder 方法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject 的名字。
foldername	必要引數。字串運算式，它標識建立的資料夾。
請注意

如果指定的資料夾已經存在，則發生一個錯誤。


CreateTextFile 方法

��� [image] ��� [image] ���

描述

建立一個指定的檔名並且傳回一個用於該檔案讀寫的 TextStream 物件。

語法

object.CreateTextFile(filename[, overwrite[, unicode]])

CreateTextFile 方法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject 或 Folder 物件的名字。
filename	必要引數。字串運算式，它標識建立的檔案。
overwrite	選擇性引數。Boolean ，表示一個已存在檔案是否可被覆蓋。如果可被覆蓋其值為 True，其為 False 時無法覆蓋。如果它被省略，則已存在檔案無法覆蓋。
unicode	選擇性引數。Boolean ，表示檔案是作為一個 Unicode 檔案建立的還是作為一個 ASCII 檔案建立的。如果作為一個 Unicode 檔案建立，其為 True，作為一個 ASCII 檔案建立，其為 False。如果省略的話，則認為是一個 ASCII 檔案。
請注意

下面的程式碼舉例說明如何使用 CreateTextFile 方法建立和開啟文字檔。

Sub CreateAfile

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set a = fs.CreateTextFile("c:\testfile.txt", True)

    a.WriteLine("This is a test.")a.Close

End Sub

對於一個已經存在的 filename，如果 overwrite 引數是 False 或者沒有提供，則生一個錯誤。


Delete 方法

��� [image] ��� [image] ���

描述

移除一個指定的檔案或資料夾。

語法

object.Delete force

Delete 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 File 或 Folder 物件的名字。
force	選擇性引數。Boolean ，如果要移除具有唯讀屬性設定的檔案或資料夾，其為 True。其為 False 時 (預設)，無法移除具有唯讀屬性設定的檔案或資料夾。
請注意

如果指定的檔案或資料夾不存在，則發生一個錯誤。

對於一個 File 或 Folder，Delete 方法的結果和執行 FileSystemObject.DeleteFile 或FileSystemObject.DeleteFolder 操作的結果是一樣的。

Delete 方法對於資料夾內是否有內容不做區別。不管指定的資料夾是否有內容，都會被移除。


DeleteFile 方法

��� [image] ��� [image] ���

描述

移除一個指定的檔案。

語法

object.DeleteFile filespec[, force]

DeleteFile 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject 的名字。
filespec	必要引數。要移除檔案的名字。Filespec 可以在最後的路徑元件中包含萬用字元。
force	選擇性引數。Boolean 值，如果要移除具有唯讀屬性設定的檔案，其值為 True。如果其為 False (預設)，則無法移除具有唯讀屬性設定的檔案。
請注意

如果沒有現相符合的檔案，則產生一個錯誤。DeleteFile 方法停在它遇到的第一個錯誤上。不要嘗試復原或復原錯誤發生前所做的任何改變。


DeleteFolder 方法

��� [image] ��� [image] ���

描述

移除一個指定的資料夾和它的內容。

語法

object.DeleteFolder folderspec[, force]

DeleteFolder 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject 的名字。
folderspec	必要引數。要移除的資料夾的名字。 Folderspec 可以在最後的路徑元件中包含萬用字元。
force	選擇性引數。Boolean 值，如果要移除具有唯讀屬性設定的資料夾，其值為 True，如果值為 False (預設)，則無法移除具有唯讀屬性設定的資料夾。
請注意

DeleteFolder 方法對資料夾中有無內容不做區別。不管指定的資料夾中是否有內容，它都會被移除。

如果沒有發現相符合的資料夾，則發生一個錯誤。DeleteFolder 方法停止在它遇到的第一個錯誤上，不要嘗試復原或復原錯誤發生前所做的任何改變。


DriveExists 方法

��� [image] ��� [image] ���

描述

如果指定的磁碟機存在，傳回 True，如果不存在傳回 False。

語法

object.DriveExists(drivespec)

DriveExists 方法語法有如下幾個單元：

單元	描述
Object	必要引數。始終是一個 FileSystemObject 的名字。
Drivespec	必要引數。一個磁碟機字元或一個完整的路徑說明。
請注意

對於可移除媒體的磁碟機，即使沒有媒體存在，DriveExists 方法也傳回 True。使用 Drive 物件的 IsReady 屬性確定磁碟機是否準備好。


Exists 方法

��� [image] ��� [image] ���

描述

如果在 Dictionary 物件中指定的關鍵字存在，傳回 True，若不存在，傳回 False。

語法

object.Exists(key)

Exists 方法語法有如下幾個單元：

單元	描述
Object	必要引數。始終是一個 Dictionary 物件的名字。
Key	必要引數。在 Dictionary 物件中搜尋的 Key 值。


FileExists 方法

��� [image] ��� [image] ���

描述

如果指定的檔案存在，傳回 True，若不存在，則傳回 False。

語法

object.FileExists(filespec)

FileExists 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject 的名字。
filespec	必要引數。要定是否存在的檔案的名字。如果認為檔案不在目前資料夾中，必須提供一個完整的路徑說明 (絕對的或相對的)。


FolderExists 方法

��� [image] ��� [image] ���

描述

如果指定的資料夾存在傳回 True，不存在傳回 False。

語法

object.FolderExists(folderspec)

FolderExists 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject 物件的名字。
folderspec	必要引數。要確定是否存在的資料夾名字。如果認為資料夾不在目前資料夾中，必須提供一個完整的路徑說明 (絕對的或相對的)。


GetAbsolutePathName 方法

��� [image] ��� [image] ���

描述

從提供的路徑說明中傳回一個完整、明確的路徑。

語法

object.GetAbsolutePathName(pathspec)

GetAbsolutePathName 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject 的名字。
pathspec	必要引數。要改變到一個完整、明確路徑的路徑說明。
請注意

一個路徑如果提供了從指定磁碟機主目錄的一個完整引用，則該路徑是完整、明確的。一個完整的路徑如果指定一個被對應磁碟機的根資料夾，它只能以路徑分隔符號 (\) 為結尾。

假設目前目錄是 c:\mydocuments\reports，下面的資料表說明了 GetAbsolutePathName 方法的運作方式。

Pathspec	傳回的路徑
"c:"	"c:\mydocuments\reports"
"c:.."	"c:\mydocuments"
"c:\\\"	"c:\"
"c:*.*\may97"	"c:\mydocuments\reports\*.*\may97"
"region1"	"c:\mydocuments\reports\region1"
"c:\..\..\mydocuments"	"c:\mydocuments"


GetBaseName 方法

��� [image] ��� [image] ���

描述

傳回一個包含路徑中最後元件的基本名字 (去掉任何檔案副檔名) 的字串。

語法

object.GetBaseName(path)

GetBaseName 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject 的名字。
path	必要引數。 要傳回其基本名字的元件的路徑說明。
請注意

如果沒有元件和 path 引數符合，GetBaseName 方法傳回一個長度為零的字串 ("")。

附註   GetBaseName 方法只對提供的 path 字串起作用。它既不試圖去辨認路徑，也不檢查指定路徑是否存在。


GetDrive 方法

��� [image] ��� [image] ���

描述

傳回一個與指定路徑中的磁碟機相對應到的 Drive 物件。

語法

object.GetDrive drivespec

GetDrive 方法語法有如下幾個單元：

單元	描述
Object	必要引數。始終是一個 FileSystemObject 的名字。
Drivespec	必要引數。Drivespec 可以是一個磁碟機字元 (c)、一個磁碟機字元加一個冒號 (c:)、一個磁碟機字元加冒號和路徑分隔符號 (c:\) 或任何網路共用的說明 (\\computer2\share1)。
請注意

對於網路共用，要進行檢查以確保共用存在。

如果 drivespec 不符合任何一種可以接收日期的形式或者不存在，則發生一個錯誤。

對一個普通路徑字串呼叫 GetDrive 方法，使用下面步驟得到一個適合作為 drivespec 使用的字串：

DriveSpec = GetDriveName(GetAbsolutePathName(Path))


GetDriveName 方法

��� [image] ��� [image] ���

描述

傳回一個包含指定路徑的磁碟機名字的字串。

語法

object.GetDriveName(path)

GetDriveName 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject 的名字。
path	必要引數。要傳回其磁碟機名字的元件的路徑說明。
請注意

如果磁碟機無法定，GetDriveName 方法會傳回一個長度為零的字串 ("")。

附註   GetDriveName 方法只對提供的路徑字串起作用。它沒有嘗試去辨認路徑，也不對指定路徑是否存在繼續檢查。


GetExtensionName 方法

��� [image] ��� [image] ���

描述

傳回一個包含路徑中最後元件副檔名的字串。

語法

object.GetExtensionName(path)

GetExtensionName 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject 的名字。
path	必要引數。.要傳回其副檔名的元件的指定路徑。
請注意

對於網路磁碟機，根目錄 (\) 被認為是一個元件。

如果沒有元件和 path 引數相符合，GetExtensionName 方法傳回一個長度為零的字串 ("")。


GetFile 方法

��� [image] ��� [image] ���

描述

傳回一個和指定路徑中文字件相對應到的 File 物件。.

語法

object.GetFile(filespec)

GetFile 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject. 的名字。
filespec	必要引數。Filespec 是到一個指定檔案的路徑 (絕對的或相對的)。
請注意

如果指定的檔案不存在，則發生一個錯誤。


GetFileName 方法

��� [image] ��� [image] ���

描述

傳回指定路徑中的最後元件，該路徑不是在指定磁碟機中的一部份。

語法

object.GetFileName(pathspec)

GetFileName 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject 的名字。
pathspec	必要引數。到一個指定檔案的路徑 (絕對的或相對的)。
請注意

如果 pathspec 不是以已命名元件結尾，則GetFileName 方法會傳回一個零長度字串 ("")。

附註   GetFileName 方法僅在提供的路徑字串上起作用。它沒有嘗試去辨認路徑，也不對指定路徑是否存在進行檢查。


GetFolder 方法

��� [image] ��� [image] ���

描述

傳回一個和指定路徑中文字件夾相對應到的 Folder 物件。

語法

object.GetFolder(folderspec)

GetFolder方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject. 的名字。
folderspec	必要引數。Folderspec 是指定資料夾的路徑 (絕對的和相對的)。
請注意

如果指定的資料夾不存在，則發生一個錯誤。


GetParentFolderName 方法

��� [image] ��� [image] ���

描述

傳回一個包含指定路徑最後元件父資料夾名字的字串。

語法

object.GetParentFolderName(path)

GetParentFolderName 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是 一個 FileSystemObject 的名字。
path	必要引數。要傳回其父資料夾名字的元件的路徑說明。
請注意

如果 path 引數指定的元件沒有父資料夾，則 GetParentFolderName 方法傳回一個零長度字串("")。

附註   GetParentFolderName 方法僅對提供的 path 字串起作用。它沒有嘗試去辨認路徑，也不對指定路徑是否存在進行檢查。


GetSpecialFolder 方法

��� [image] ��� [image] ���

描述

傳回指定的特殊資料夾。

語法

object.GetSpecialFolder(folderspec)

GetSpecialFolder 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject 的名字。
folderspec	必要引數。要傳回的特殊資料夾的名字。可以是在設定值單元中列出的任何常數。
設定

folderspec 可為任何的下列：

常數		描述
WindowsFolder	0	Windows 資料夾，包含由 Windows 作業系統安裝的檔案。
SystemFolder	1	系統資料夾，包含程式庫、字型、週邊設備驅動程式。
TemporaryFolder	2	暫存資料夾，用於儲存暫存檔。它的路徑在 TMP 環境變數中。


GetTempName 方法

��� [image] ��� [image] ���

描述

傳回一個隨機產生的暫存檔或資料夾的名字，該名字在執行需要暫存檔或資料夾的操作時有用。

語法

object.GetTempName

選項的 object 始終是一個 FileSystemObject. 的名字。

請注意

GetTempName 方法不產生一個檔案，它僅提供一個暫存檔名字，該名字可被 CreateTextFile 用於建立一個檔案。


Items 方法

��� [image] ��� [image] ���

描述

傳回一個包含 Dictionary 物件中所有項目的陣列。

語法

object.Items

object始終是一個 Dictionary 物件的名字。

請注意

下面的程式碼舉例說明了 Items 方法的使用。:

Dim a, d, i             '建立一些變數

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"     '加入一些關鍵字和項目。

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

a = d.Items             '取得項目

For i = 0 To d.Count -1 '重複陣列

    Print a(i)          '列印項目

Next

...


Keys 方法

��� [image] ��� [image] ���

描述

傳回一個陣列，該陣列包含一個 Dictionary 物件中的全部既存的的關鍵字。

語法

object.Keys

object始終是一個 Dictionary 物件的名字。

請注意

下面的程式碼舉例說明了 Keys 方法的使用。

Dim a, d, i             '建立一些變數

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"     '加入一些關鍵字和項目。

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

a = d.keys              '取得關鍵字

For i = 0 To d.Count -1 '重複陣列

    Print a(i)          '列印關鍵字

Next

...


Move 方法

��� [image] ��� [image] ���

描述

將一個指定的檔案或資料夾從一個地方移動到另一個地方。

語法

object.Move destination

Move 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 File 或 Folder 物件的名字。
destination	必要引數。檔案或資料夾要移動到的目的地。不允許有萬用字元。
請注意

Move 方法對一個 File 或 Folder 的結果和執行 FileSystemObject.MoveFile 或 FileSystemObject.MoveFolder 操作的結果是一樣的。但應當注意，後面的方法能夠移動多個檔案或資料夾。


MoveFile 方法

��� [image] ��� [image] ���

描述

將一個或多個檔案從一個地方移動到另一個地方。

語法

object.MoveFile source, destination

MoveFile 方法語法有如下幾個單元：

單元	描述
Object	必要引數。始終是一個 FileSystemObject 的名字。
Source	必要引數。一個或多個要移動檔案的路徑。Source 引數字串只能在路徑的最後元件中包含萬用字元。
destination	必要引數。一個或多個檔案要移動到的目的地路徑。Destination 引數無法包含萬用字元。
請注意

如果 source 資料夾包含萬用字元或 destination 以路徑分隔符號 (\) 為結尾，則認為 destination 指定了一個存在的資料夾，在此資料夾中移動相符合的檔案。否則，認為 destination 是一個要建立的目的地檔名。在上面任一情況下，當移動一個檔案時可能出現三種事件。

•	如果 destination 不存在，檔案得到移動。這是通常的情況。

•	如果 destination 是一個已存在檔案，則發生一個錯誤。

•	如果 destination 是一個目錄，則生一個錯誤。

如果一個在 source 中使用的萬用字元無法和任何一個檔案符合，也發生一個錯誤。 MoveFile 方法停止在遇到的第一個錯誤上。錯誤生前所做的任何改變都無法復原。

重要事項   只有作業系統支援的情況下，這個方法才允許在卷之間移動檔案。


MoveFolder 方法

��� [image] ��� [image] ���

描述

將一個或多個資料夾從一個地方移動到另一個地方。

語法

object.MoveFolder source, destination

MoveFolder 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 FileSystemObject 的名字。
source	必要引數。一個或多個要移動的資料夾路徑。Source 引數字串只能在路徑的最後元件中包含萬用字元。
destination	必要引數。一個或多個資料夾要移動到的目的地路徑。Destination 引數無法包含萬用字元。
請注意

如果 source 包含萬用字元或 destination 以路徑分隔符號 (\) 為結尾，則認為 destination 指定了一個已存在的資料夾，在此資料夾中移動相符合的檔案。否則，認為 destination 是一個要建立的目的地資料夾名字。在上面的任何一種情況下，當一個資料夾被移動時可能出現三種情況。

•	如果 destination 不存在，資料夾得到移動。這是通常的情況。

•	如果 destination 是一個已存在檔案，則生一個錯誤。

•	如果 destination 是一個目錄，則生一個錯誤。

如果 source 中使用的一個萬用字元無法和任何資料夾相符合，也發生一個錯誤。MoveFolder 方法停止在它遇到的第一個錯誤上。錯誤發生前所做的任何改變都無法復原。

重要事項   只有在作業系統支援的情況下，這個方法才允許資料夾在卷之間移動。


OpenAsTextStream 方法

��� [image] ��� [image] ���

描述

開啟一個指定的檔案並傳回一個 TextStream 物件，該物件可用來對檔案進行讀、寫、附加操作。

語法

object.OpenAsTextStream([iomode, [format]])

OpenAsTextStream 方法語法有如下幾個單元：

單元	描述
Object	必要引數。始終是一個 File 物件的名字。
Iomode	選擇性引數。資料表明輸入/輸出模式。可為三個常數之一：ForReading、ForWriting 或 ForAppending。
format	選擇性引數。三個 Tristate 值之一，用於指導開啟檔案的格式。如果省略，則檔案以 ASCII 格式開啟。
設定

iomode 引數可為下面設定中的任何：

常數		描述
ForReading	1	開啟一個唯讀檔案，無法對此檔案進行寫入。
ForWriting	2	開啟一個用於寫入的檔案。如果和此檔案同名的檔案已存在，則覆蓋以前內容。
ForAppending	8	開啟一個檔案並寫輸出至檔案的尾部。
Format 引數可為下面設定值中的任何值：

常數		描述
TristateUseDefault	�}2	使用系統預設開啟檔案。
TristateTrue	�}1	以 Unicode 格式開啟檔案。
TristateFalse	��0	以 ASCII 格式開啟檔案。.
請注意

OpenAsTextStream 方法提供了和 FileSystemObject. 的 OpenTextFile 方法相同的功能。此外，OpenAsTextStream 方法還可以用於對一個檔案進行寫入。

下面的程式碼舉例說明了 OpenAsTextStream 方法的使用：

Sub TextStreamTest

    Const ForReading = 1, ForWriting = 2, ForAppending = 3

    Const TristateUseDefault = -2, TristateTrue = -1,

 TristateFalse = 0

    Dim fs, f, ts, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    fs.CreateTextFile "test1.txt"            '建立一個檔案

    Set f = fs.GetFile("test1.txt")

    Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)

    ts.Write "Hello World"ts.Close

    Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)

    s = ts.ReadLineMsgBox sts.Close

End Sub


OpenTextFile 方法

��� [image] ��� [image] ���

描述

開啟一個指定的檔案並傳回一個 TextStream 物件，該物件可用於對檔案進行讀取或附加。

語法

object.OpenTextFile(filename[, iomode[, create[, format]]])

OpenTextFile 方法有如下幾個單元：

單元	描述
Object	必要引數。始終是一個 FileSystemObject 的名字。
filename	必要引數。字串運算式，它標識了開啟的檔案。
iomode	選擇性引數。表示輸入/輸出模式。可為兩個常數之一：ForReading或ForAppending。
create	選擇性引數。Boolean 值，它表示如果指定的 filename 不存在是否可以建立一個開新檔案。如果建立開新檔案，其值為 True。若不建立檔案其值為 False。預設值為 False。
format	選擇性引數。三種 Tristate 值之一，用於指定開啟檔案的格式。如果省略，則檔案以 ASCII 格式開啟。
設定

iomode 引數可為下面設定值的任何一個：

常數		描述
ForReading	1	開啟一個唯讀檔案。無法對此檔案進行寫入。
ForAppending	8	開啟一個檔案並寫輸出至檔案的尾部。
Format 引數可為下面設定值的任何值：

常數		描述
TristateUseDefault	�}2	使用系統預設開啟檔案。
TristateTrue	�}1	以 Unicode 格式開啟檔案。
TristateFalse	��0	以 ASCII 格式開啟檔案。
請注意

下面的程式碼舉例說明了使用 OpenTextFile 方法開啟一個用於附加文字的檔案：

Sub OpenTextFileTest

    Const ForReading = 1, ForWriting = 2, ForAppending = 3

    Dim fs, f

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.OpenTextFile("c:\testfile.txt", ForAppending,TristateFalse)

    f.Write "Hello world!"f.Close

End Sub


Read 方法

��� [image] ��� [image] ���

描述

從一個 TextStream 檔案中讀取指定數量的字元並傳回得到的字串。

語法

object.Read(characters)

Read 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 TextStream 物件的名字。
characters	必要引數。自檔案中所要讀取的字元數。


ReadAll 方法

��� [image] ��� [image] ���

描述

讀一個完整的 TextStream 檔案並傳回得到的字串。

語法

object.ReadAll

object 始終是一個 TextStream 物件的名字。

請注意

對於大的檔案，使用 ReadAll 方法浪費記憶體資源。應使用其它的技術去輸入一個檔案，比如一列一列地讀取檔案。


ReadLine 方法

��� [image] ��� [image] ���

描述

從一個完整的 TextStream 檔案讀取一整列 (到換行字元但不包括換行字元) 並傳回得到的字串。

語法

object.ReadLine

object引數始終是一個 TextStream 物件的名字。


Remove 方法

��� [image] ��� [image] ���

描述

從一個 Dictionary 物件中移除一個關鍵字和項目對。

語法

object.Remove(key)

Remove 方法語法有如下幾個單元：

單元	描述
Object	必要引數。始終是一個 Dictionary 物件的名字。
Key	必要引數。Key 與要從 Dictionary 物件中移除的關鍵字和項目對相關。
請注意

如果指定的關鍵字和項目對不存在，則發生一個錯誤。

下面的程式碼舉例說明了 Remove 方法的使用：

Dim a, d, i             '建立一些變數

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"     '加入一些關鍵字和項目

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

...

a = d.Remove()          '移除第二對


RemoveAll 方法

��� [image] ��� [image] ���

描述

RemoveAll 方法從 Dictionary 物件中移除所有關鍵字和項目對。

語法

object.RemoveAll

object始終是一個 Dictionary 物件的名字。

請注意

下面的程式碼舉例說明了 RemoveAll 方法的用法：

Dim a, d, i             '建立一些變數

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"     '加入一些關鍵字和項目

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

...

a = d.RemoveAll         '清除字典


Skip 方法

��� [image] ��� [image] ���

描述

當讀一個 TextStream 檔案時略過指定數量的字元。

語法

object.Skip(characters)

Skip 方法語法有下面幾個單元：

單元	描述
object	必要引數。始終是一個 TextStream 物件的名字。
characters	必要引數。當讀取檔案時要略過的字元的數量。
請注意

略過的字元被放棄。


SkipLine 方法

��� [image] ��� [image] ���

描述

讀一個 TextStream 檔案時略過下一列。

語法

object.SkipLine

object始終是一個 TextStream 物件的名字。

請注意

略過一列是指讀取並放棄一列中的所有字元，一直到並包括該列的換行字元。

如果讀的檔案沒有開啟，則產生一個錯誤。


Write 方法

��� [image] ��� [image] ���

描述

寫入一個指定的字串到一個 TextStream 檔案。

語法

object.Write(string)

Write 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 TextStream 物件的名字。
string	必要引數。要寫入輸出至檔案中的內文。
請注意

指定的字串被寫入輸出至檔案中，在每個字串之間沒有插入空白或字元。使用 WriteLine 方法寫入一個換行字元或一個以換行字元為結尾的字串。


WriteBlankLines 方法

��� [image] ��� [image] ���

描述

寫入指定數量的換行字元到一個 TextStream 檔案中。

語法

object.WriteBlankLines(lines)

WriteBlankLines 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 TextStream 物件的名字。
lines	必要引數。要寫入的換行字元數量。


WriteLine 方法

��� [image] ��� [image] ���

描述

寫入一個指定的字串和換行字元到一個 TextStream 檔案中。.

語法

object.WriteLine([string])

WriteLine 方法語法有如下幾個單元：

單元	描述
object	必要引數。始終是一個 TextStream 物件的名字。
string	選擇性引數。要寫入檔案的內文。如果省略，一個換行字元被寫入檔案中。


Dictionary 物件

��� [image] ��� [image] ��� [image] ��� [image] ���

描述

物件，用於儲存資料關鍵字和項目對。

語法

Scripting.Dictionary

請注意

Dictionary 物件與 PERL 相關陣列全等。可以是任何型式的資料的項目被儲存在陣列中。每個項目都與一個唯一的關鍵字相關。該關鍵字用來取出單個項目，通常是整數或字串，可以是除陣列外的任何型態。

下面的程式碼舉例說明了如何建立一個 Dictionary 物件：

Dim d                   '建立一個變數

Set d = CreateObject(Scripting.Dictionary)

d.Add "a", "Athens"     '加入一些關鍵字和項目

d.Add "b", "Belgrade"d.Add "c", "Cairo"

...


Drive 物件

��� [image] ��� [image] ��� [image] ��� [image] ���

描述

對指定的磁碟機或網路共用的屬性提供存取。

請注意

下面的程式碼舉例說明了用 Drive 物件來存取磁碟機屬性：

Sub ShowFreeSpace(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Drive " & UCase(drvPath) & " - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)

    s = s & " Kbytes"MsgBox s

End Sub


Drives 集合物件

��� [image] ��� [image] ��� [image] ��� [image] ���

描述

所有可用磁碟機的唯讀集合物件。

請注意

對於可移除媒體的磁碟機，不需要將媒體插入其中，它就可以在Drives集合物件中顯示出來。

下面的程式碼舉例說明了如何獲得 Drives 集合物件，以及如何用 For Each...Next 陳述式來存取該集合物件中的每個Drive：

Sub ShowDriveList

    Dim fs, d, dc, s, n

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set dc = fs.Drives

    For Each d in dc

        s = s & d.DriveLetter & " - "

        If d.DriveType = Remote Then

           n = d.ShareName

        Else

           n = d.VolumeName

        End If

        s = s & n & vbCrLf

     Next

     MsgBox s

End Sub


File 物件

��� [image] ��� [image] ��� [image] ��� [image] ���

描述

提供對檔案所有屬性的存取。

請注意

下面的程式碼舉例說明了如何得一個 File 物件，以及如何檢視的一個屬性。

Sub ShowFileInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = f.DateCreated

    MsgBox s

End Sub


Files 集合物件

��� [image] ��� [image] ��� [image] ��� [image] ���

描述

在一個資料夾內的所有 File 物件的集合物件。

請注意

下面的程式碼舉例說明了如何獲得一個 Files 集合物件，以及如何用 For Each...Next 陳述式來存取這個集合物件中的每個File：

Sub ShowFolderList(folderspec)

    Dim fs, f, f1, fc, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set fc = f.Files

    For Each f1 in fc

        s = s & f1.name

        s = s & vbCrLf

    Next

    MsgBox s

End Sub


FileSystemObject 物件

��� [image] ��� [image] ��� [image] ��� [image] ���

描述

提供對電腦檔案系統的存取。

語法

Scripting.FileSystemObject

請注意

下面的程式碼舉例說明了如何使用 FileSystemObject 傳回一個 TextStream 物件，該物件是可讀取並可寫入的：

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.CreateTextFile("c:\testfile.txt", True)

a.WriteLine("This is a test.")

a.Close

在上面列出的程式碼中，CreateObject 函數傳回 FileSystemObject (fs)。CreateTextFile 方法接著建立檔案作為一個 TextStream 物件 (a)，而 WriteLine 方法則向立的文字檔中寫入一列文字。Close 方法重新整理暫存區並關閉檔案。


Folder 物件

��� [image] ��� [image] ��� [image] ��� [image] ���

描述

提供對一個資料夾所有屬性的存取。

請注意

下面的程式碼舉例說明了如何獲得一個 Folder 物件，以及如何傳回的一個屬性：

Sub ShowFolderInfo(folderspec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    s = f.DateCreated

    MsgBox s

End Sub


Folders 集合物件

��� [image] ��� [image] ��� [image] ��� [image] ���

描述

包含在一個 Folder 物件內的所有 Folder 物件的集合物件。

請注意

下面的程式碼舉例說明了如何得一個 Folders 集合物件，以及如何用 For Each...Next 陳述式來存取該集合物件中的每個Folder：

Sub ShowFolderList(folderspec)

    Dim fs, f, f1, fc, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)Set fc = f.SubFolders

    For Each f1 in fc

        s = s & f1.name

        s = s &  vbCrLf

    Next

    MsgBox s

End Sub


TextStream 物件

��� [image] ��� [image] ��� [image] ��� [image] ���

描述

加快對檔案的順序存取。

語法

TextStream.{property | method}

property 和 method 參數可以是和 TextStream 物件相關的任何屬性和方法。請注意，在實際應用中，TextStream 被一個變數預留位置所替代，該變數預留位置表示從 FileSystemObject 傳回的 TextStream 物件。

請注意

在下面的程式碼中，a 是由 FileSystemObject 的 CreateTextFile 方法傳回的 TextStream 物件：

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.CreateTextFile("c:\testfile.txt", True)

a.WriteLine("This is a test.")

a.Close

WriteLine 和 Close 是 TextStream 物件的兩個方法。


= 運算子

��� [image] ���

描述

用於指定一個值到某個變數或屬性。

語法

variable = value

= 運算子語法有如下幾個單元：

單元	描述
variable	任何變數或任何可寫入的屬性。
value	任何數值型態或字串文字、常數或運算式。
請注意

等號左邊的名字可以是一個簡單的純量變數或一個陣列的組成項目。等號左邊的屬性只能是執行階段可寫入的屬性。


AtEndOfLine 屬性

��� [image] ��� [image] ���

描述

唯讀屬性，在 TextStream 檔案中，如果檔案指標正好在列結尾標記前面，那麼該屬性值傳回 True；否則傳回 False。

語法

object.AtEndOfLine

object 始終是一個 TextStream 物件的名稱。

請注意

AtEndOfLine 屬性僅適用於已開啟供讀取的 TextStream 檔案；否則就會出錯。

下面的程式碼舉例說明了 AtEndOfLine 屬性的用法：

Dim fs, a, retstring

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.OpenTextFile("c:\testfile.txt", ForReading, False)

Do While a.AtEndOfLine <> True

    retstring = a.Read(1)

    ...

Loop

a.Close


AtEndOfStream 屬性

��� [image] ��� [image] ���

描述

唯讀屬性，如果檔案指標在 TextStream 檔案末尾，則該屬性傳回 True；否則傳回 False。

語法

object.AtEndOfStream

object 始終是一個 TextStream 物件的名稱。

請注意

AtEndOfStream 屬性僅適用於已開啟供讀取的 TextStream 檔案；否則就會出錯。

下面的程式碼舉例說明了 AtEndOfStream 屬性的用法：

Dim fs, a, retstring

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.OpenTextFile("c:\testfile.txt", ForReading, False)

Do While a.AtEndOfStream <> True

    retstring = a.ReadLine

    ...

Loop

a.Close


Attributes 屬性

��� [image] ��� [image] ���

描述

設定或者傳回檔案或資料夾的屬性。讀取/寫入或唯讀，取決於屬性。

語法

object.Attributes [= newattributes]

Attributes 屬性有下列幾個單元：

單元	描述
object	必要引數。始終是一個 File 或者 Folder 物件的名字。
newattributes	選擇性引數。如果提供的話，newattributes 就是所指定 object 的新屬性。
設定

newattributes 引數可以是具有下列中的任何一個或任何的邏輯組合：

常數		描述
Normal	0	一般檔案。未設定屬性。
ReadOnly	1	唯讀檔案。屬性為讀取/寫入。
Hidden	2	隱藏檔。屬性為讀取/寫入。
System	4	系統檔。屬性為讀取/寫入。
Volume	8	磁碟機標籤。屬性為唯讀。
Directory	16	資料夾或目錄。屬性為唯讀。
Archive	32	自上次備份後已經改變的檔案。屬性為讀取/寫入。
Alias	64	連結或捷徑。屬性為唯讀。
Compressed	128	壓縮檔案。屬性為唯讀。
請注意

下面的程式碼用一個檔案舉例說明了 Attributes 屬性的用法：

Sub SetClearArchiveBit(filespec)

    Dim fs, f, rSet fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(fs.GetFileName(filespec))

    If f.attributes and 32 Then

        r = MsgBox("The Archive bit is set, do you want to clear it?", vbYesNo, "Set/Clear Archive Bit")

        If r = vbYes Then

            f.attributes = f.attributes - 32

            MsgBox "Archive bit is cleared."

        Else

        MsgBox "Archive bit remains set."

        End If

    Else

    r = MsgBox("The Archive bit is not set. Do you want to set it?", vbYesNo, "Set/Clear Archive Bit")

        If r = vbYes Then

            f.attributes = f.attributes + 32

            MsgBox "Archive bit is set."

        Else

            MsgBox "Archive bit remains clear."

       End If

    End If

End Sub


AvailableSpace 屬性

��� [image] ��� [image] ���

描述

傳回在指定的磁碟機或網路共用上的使用者可用容量。

語法

object.AvailableSpace

object 始終是一個 Drive 物件。

請注意

一般來說，AvailableSpace 屬性的傳回與 FreeSpace 屬性的傳回是相同的。對於支援限額的電腦系統來說，兩個之間可能會有所不同。

下面的程式碼舉例說明了 AvailableSpace 屬性的用法：

Sub ShowAvailableSpace(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Drive " & UCase(drvPath) & " - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "Available Space: " & FormatNumber(d.AvailableSpace/1024, 0)

    s = s & " Kbytes"

    MsgBox s

End Sub


Column 屬性

��� [image] ��� [image] ���

描述

唯讀屬性，傳回 TextStream 檔案中目前字元位置的行號。

語法

object.Column

object 始終是一個 TextStream 物件的名稱。

請注意

在寫入了一個新行字元後，但在寫入任何其他字元之前，Column 的是 1。


CompareMode 屬性

��� [image] ��� [image] ���

描述

設定或傳回 Dictionary 物件中的比較字串關鍵字的比較模式。

語法

object.CompareMode[ = compare]

CompareMode 屬性具有下列單元：

單元	描述
object	必要引數。始終是一個 Dictionary 物件的名稱。
compare	選擇性引數。如果提供的話，compare 是一個代表比較模式的，該比較模式用於像 StrComp 這樣的函數。
設定

compare 引數可以具有下列值：

常數	值	描述
VbUseCompareOption	-1	使用 Option Compare 陳述式的設定進行比較。
vbBinaryCompare	0	進行二進位比較。
vbTextCompare	1	進行文字比較。
vbDatabaseCompare	2	僅用於 Microsoft Access。進行基於您自己資料庫中資訊的比較。
請注意

如果試圖對已經包含資料的 Dictionary 物件的比較模式進行更改的話，就會出錯。

CompareMode 屬性所用的引數與 StrComp 函數所用的 compare 引數相同。可以用大於 2 的表示使用指定的 Locale IDs (LCID) 的比較。


Count 屬性

��� [image] ��� [image] ���

描述

傳回集合或 Dictionary 物件中的項目數。唯讀。

語法

object.Count

object 始終是「適用於」清單中某一項目的名稱。

請注意

下面的程式碼舉例說明了 Count 屬性的使用方法：

Dim a, d, i             '建立一些變數

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"     '加入一些關鍵字和項目。

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

a = d.Keys              '獲得關鍵字

For i = 0 To d.Count -1 '遍及陣列

    Print a(i)          '列印關鍵字

Next

...


DateCreated 屬性

��� [image] ��� [image] ���

描述

傳回指定檔案或資料夾的建立日期和時間。唯讀。

語法

object.DateCreated

object 始終是一個 file 或Folder物件。

請注意

下面的程式碼用一個檔案舉例說明了 DateCreated 屬性的用法：

Sub ShowFileInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = "Created: " & f.DateCreated

    MsgBox s

End Sub


DateLastAccessed 屬性

��� [image] ��� [image] ���

描述

傳回最後一次存取指定檔案或資料夾的日期和時間。唯讀。

語法

object.DateLastAccessed

object 始終是一個 file 或 Folder 物件。

請注意

下面的程式碼用一個檔案舉例說明了 DateLastAccessed 屬性的用法：

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(filespec) & vbCrLf

    s = s & "Created: " & f.DateCreated & vbCrLf

    s = s & "Last Accessed: " & f.DateLastAccessed & vbCrLf

    s = s & "Last Modified: " & f.DateLastModified

    MsgBox s, 0, "File Access Info"

End Sub

重要事項   這種方法由其下一級作業系統決定其運作方式。如果作業系統不支援提供時間資訊，則沒有傳回資訊。


DateLastModified 屬性

��� [image] ��� [image] ���

描述

傳回最後一次修改指定檔案或資料夾的日期和時間。唯讀。

語法

object.DateLastModified

object 始終是一個 file 或 Folder 物件。

請注意

下面的程式碼用一個檔案舉例說明了 DateLastModified 屬性的用法：

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(filespec) & vbCrLf

    s = s & "Created: " & f.DateCreated & vbCrLf

    s = s & "Last Accessed: " & f.DateLastAccessed & vbCrLf

    s = s & "Last Modified: " & f.DateLastModified

    MsgBox s, 0, "File Access Info"

End Sub


Drive 屬性

��� [image] ��� [image] ���

描述

傳回指定檔案或資料夾所在的磁碟機代碼。唯讀。

語法

object.Drive

object 始終是一個 File 或 Folder 物件。

請注意

下面的程式碼舉例說明了 Drive 屬性的用法：

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = f.Name & " on Drive " & UCase(f.Drive) & vbCrLf

    s = s & "Created: " & f.DateCreated & vbCrLf

    s = s & "Last Accessed: " & f.DateLastAccessed & vbCrLf

    s = s & "Last Modified: " & f.DateLastModified

    MsgBox s, 0, "File Access Info"

End Sub


DriveLetter 屬性

��� [image] ��� [image] ���

描述

傳回某個物理本機磁碟機或網路共用的磁碟機代碼。唯讀。

語法

object.DriveLetter

object 始終是一個 Drive 物件。

請注意

如果指定的磁碟機沒有和某個磁碟機代碼相關，例如，未被映射到一個磁碟機代碼的網路共用，則 DriveLetter 屬性傳回一個 0 位元組長度的字串 ("")。

下面的程式碼舉例說明了 DriveLetter 屬性的用法：

Sub ShowDriveLetter(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Drive " & d.DriveLetter & ": - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)

    s = s & " Kbytes"

    MsgBox s

End Sub


Drives 屬性

��� [image] ��� [image] ���

描述

傳回包含本機上所有可用 Drive 物件的 Drives 集合物件。

語法

object.Drives

object 始終是一個 FileSystemObject。

請注意

對於可移除媒體磁碟機來說，不需要插入媒體，就可使其出現在 Drives 集合物件中。

您可以用 For Each...Next 結構遍及 Drives 集合物件中的成員，如下面的程式碼所示：

Sub ShowDriveList

    Dim fs, d, dc, s, n

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set dc = fs.Drives

    For Each d in dc

        s = s & d.DriveLetter & " - "

        If d.DriveType = 3 then

            n = d.ShareName

        Else

            n = d.VolumeName

        End If

        s = s & n & vbCrLf

    Next

    MsgBox s

End Sub


DriveType 屬性

��� [image] ��� [image] ���

描述

傳回一個值，表示指定磁碟機的型態。

語法

object.DriveType

object 始終是一個 Drive 物件。

請注意

下面的程式碼舉例說明了 DriveType 屬性的用法：

Sub ShowDriveType(drvpath)

    Dim fs, d, s, t

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(drvpath)

    Select Case d.DriveType

        Case 0: t = "Unknown"

        Case 1: t = "Removable"

        Case 2: t = "Fixed"

        Case 3: t = "Network"

        Case 4: t = "CD-ROM"

        Case 5: t = "RAM Disk"

    End Select

    s = "Drive " & d.DriveLetter & ": - " & t

    MsgBox s

End Sub


Files 屬性

��� [image] ��� [image] ���

描述

傳回由所有 File 物件組成的 Files 集合物件，這些 File 物件包含在指定的資料夾中──包括設定了隱藏和系統檔屬性的那些檔案。

語法

object.Files

object 始終是一個 Folder 物件。

請注意

下面的程式碼舉例說明了 Files 屬性的用法：

Sub ShowFileList(folderspec)

    Dim fs, f, f1, fc, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set fc = f.Files

    For Each f1 in fc

        s = s & f1.name

        s = s &  vbCrLf

    Next

    MsgBox s

End Sub


FileSystem 屬性

��� [image] ��� [image] ���

描述

傳回指定磁碟機所使用的檔案系統。

語法

object.FileSystem

object 始終是一個 Drive 物件。

請注意

可以得到的傳回包括 FAT、NTFS、以及 CDFS。

下面的程式碼舉例說明了 FileSystem 屬性的用法：

Sub ShowFileSystemType

    Dim fs,d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive("e:")

    s = d.FileSystem

    MsgBox s

End Sub


FreeSpace 屬性

��� [image] ��� [image] ���

描述

傳回指定磁碟機上或網路共用的使用者可用磁碟剩餘空間容量。唯讀。

語法

object.FreeSpace

object 始終是一個 Drive 物件。

請注意

一般來說，FreeSpace 屬性的傳回和 AvailableSpace 屬性的傳回是相同的。對於支援限額的電腦系統來說，二者之間可能有所不同。

下面的程式碼舉例說明了 FreeSpace 屬性的用法：

Sub ShowFreeSpace(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Drive " & UCase(drvPath) & " - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)

    s = s & " Kbytes"

    MsgBox s

End Sub


IsReady 屬性

��� [image] ��� [image] ���

描述

如果指定的磁碟機已準備好，傳回 True；否則傳回 False。

語法

object.IsReady

object 始終是一個 Drive 物件。

請注意

對於可移除媒體磁碟機和 CD-ROM磁碟機來說，僅當插入了適的媒體，並已準備好供存取時，IsReady 才傳回 True。

下面的程式碼舉例說明了 IsReady 屬性的用法：

Sub ShowDriveInfo(drvpath)

    Dim fs, d, s, t

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(drvpath)

    Select Case d.DriveType

        Case 0: t = "Unknown"

        Case 1: t = "Removable"

        Case 2: t = "Fixed"

        Case 3: t = "Network"

        Case 4: t = "CD-ROM"

        Case 5: t = "RAM Disk"

    End Select

    s = "Drive " & d.DriveLetter & ": - " & t

    If d.IsReady Then

        s = s & vbCrLf & "Drive is Ready."

    Else

        s = s & vbCrLf & "Drive is not Ready."

    End If

    MsgBox s

End Sub


IsRootFolder 屬性

��� [image] ��� [image] ���

描述

如果指定的資料夾是根資料夾，則傳回 True；否則傳回 False。

語法

object.IsRootFolder

object 始終是一個 Folder 物件。

請注意

下面的程式碼舉例說明了 IsRootFolder 屬性的用法：

Dim fs

Set fs = CreateObject("Scripting.FileSystemObject")

Sub DisplayLevelDepth(pathspec)

Dim f, nSet f = fs.GetFolder(pathspec)

If f.IsRootFolder Then

        MsgBox "The specified folder is the root folder."

    Else

        Do Until f.IsRootFolder

            Set f = f.ParentFoldern = n + 1

        Loop

        MsgBox "The specified folder is nested " & n & " levels deep."

    End If

End Sub


Item 屬性

��� [image] ��� [image] ���

描述

對 Dictionary 物件中指定的Key，設定或傳回一個Item 。對於集合來說，基於指定的Key，傳回一個Item。讀取/寫入屬性。

語法

object.Item(key) [= newitem]

Item 屬性具有下列單元：

單元	描述
object	必要引數。始終是一個集合或 Dictionary 物件的名稱。
key	必要引數。與被取出或加入的項目相關的 Key 。
newitem	選擇性引數。僅用於 Dictionary 物件；沒有用於集合的應用程式。如果提供的話，newitem 是與指定的 Key 相關的新值。
請注意

如果在改變某個 item 時，沒有找到 key，則用指定的newitem建立一個新的 key。如果在試圖傳回某個已存在項目時，沒有找到 key，則建立一個新 key，且其相對的項目為無。


Key 屬性

��� [image] ��� [image] ���

描述

在一個 Dictionary 物件中設定一個 key。

語法

object.Key(key) = newkey

Key 屬性具有下列單元：

單元	描述
object	必要引數。始終是一個 Dictionary 物件的名字。
key	必要引數。被更改的 Key。
newkey	必要引數。取代指定 key 的新。
請注意

如果在更改某個 key 時，沒有找到 key，則會出現執行階段錯誤。


Line 屬性

��� [image] ��� [image] ���

描述

唯讀屬性，傳回一個 TextStream 檔案中的目前列號。

語法

object.Line

object 始終是一個 TextStream 物件的名字。

請注意

檔案初次開啟後，在寫入任何東西之前，Line 的為 1。


Name 屬性

��� [image] ��� [image] ���

描述

設定或傳回指定檔案或資料夾名。讀取/寫入屬性。

語法

object.Name [= newname]

Name 屬性有下資料行幾個單元：

單元	描述
object	必要引數。始終是某個 File 或 Folder 物件的名字。
newname	選擇性引數。如果提供的話，newname 是指定的 object 的新名。
請注意

下面的程式碼舉例說明了 Name 屬性的用法：

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = f.Name & " on Drive " & UCase(f.Drive) & vbCrLf

    s = s & "Created: " & f.DateCreated & vbCrLf

    s = s & "Last Accessed: " & f.DateLastAccessed & vbCrLf

    s = s & "Last Modified: " & f.DateLastModified

    MsgBox s, 0, "File Access Info"

End Sub


ParentFolder 屬性

��� [image] ��� [image] ���

描述

傳回指定檔案或資料夾的父資料夾物件。唯讀。

語法

object.ParentFolder

object 始終是一個 File 或 Folder 物件。

請注意

下面的程式碼用一個檔案舉例說明了 ParentFolder 屬性的用法：

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(f.Name) & " in " & UCase(f.ParentFolder) & vbCrLf

    s = s & "Created: " & f.DateCreated & vbCrLf

    s = s & "Last Accessed: " & f.DateLastAccessed & vbCrLf

    s = s & "Last Modified: " & f.DateLastModified

    MsgBox s, 0, "File Access Info"

End Sub


Path 屬性

��� [image] ��� [image] ���

描述

傳回指定檔案、資料夾、或磁碟機的路徑。

語法

object.Path

object 始終是一個 File、Folder、或 Drive 物件。

請注意

對於磁碟機代碼來說，不包括根磁碟機。例如，C 磁碟機的路徑是 C:，而不是 C:\。

下面的程式碼用一個 File 物件舉例說明了 Path 屬性的用法：

Sub ShowFileAccessInfo(filespec)

    Dim fs, d, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(f.Path) & vbCrLf

    s = s & "Created: " & f.DateCreated & vbCrLf

    s = s & "Last Accessed: " & f.DateLastAccessed & vbCrLf

    s = s & "Last Modified: " & f.DateLastModified

    MsgBox s, 0, "File Access Info"

End Sub


RootFolder 屬性

��� [image] ��� [image] ���

描述

傳回一個 Folder 物件，該物件表示一個指定磁碟機的根資料夾。唯讀屬性。

語法

object.RootFolder

object 始終是一個 Drive 物件。

請注意

磁碟機上所包含的所有檔案和資料夾都可以使用傳回的 Folder 物件進行存取。


SerialNumber 屬性

��� [image] ��� [image] ���

描述

傳回用於唯一標識磁碟標籤的十進位製序號。

語法

object.SerialNumber

object 始終是一個 Drive 物件。

請注意

可以使用 SerialNumber 屬性確保正的磁片已插入到某個帶有可移除媒體的磁碟機中。

下面的程式碼舉例說明了 SerialNumber 屬性的用法：

Sub ShowDriveInfo(drvpath)

  Dim fs, d, s, t

  Set fs = CreateObject("Scripting.FileSystemObject")

  Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

  Select Case d.DriveType

      Case 0: t = "Unknown"

      Case 1: t = "Removable"

      Case 2: t = "Fixed"

      Case 3: t = "Network"

      Case 4: t = "CD-ROM"

      Case 5: t = "RAM Disk"

  End Select

  s = "Drive " & d.DriveLetter & ": - " & t

  s = s & vbCrLf & "SN: " & d.SerialNumber

  MsgBox s

End Sub


ShareName 屬性

��� [image] ��� [image] ���

描述

傳回指定磁碟機的網路共用名稱。

語法

object.ShareName

object 始終是一個 Drive 物件。

請注意

如果 object 不是一個網路磁碟機，則 ShareName 屬性傳回一個 0 位元組長度的字串 ("")。

下面的程式碼舉例說明 ShareName 屬性的用法：

Sub ShowDriveInfo(drvpath)

  Dim fs, d, s

  Set fs = CreateObject("Scripting.FileSystemObject")

  Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

  s = "Drive " & d.DriveLetter & ": - " & d.ShareName

  MsgBox s

End Sub


ShortName 屬性

��� [image] ��� [image] ���

描述

傳回需要較早的 8.3 命名規格的程式所使用的短名字。

語法

object.ShortName

object 始終是一個 File 或 Folder 物件。

請注意

下面的程式碼用一個 File 物件舉例說明了 ShortName 屬性的用法：

Sub ShowShortName(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = "The short name for " & "" & UCase(f.Name)

    s = s & "" & vbCrLfs = s & "is: " & "" & f.ShortName & ""

    MsgBox s, 0, "Short Name Info"

End Sub


ShortPath 屬性

��� [image] ��� [image] ���

描述

傳回需要較早的 8.3 檔案命名規格的程式所使用的短路徑。

語法

object.ShortPath

object 始終是一個 File 或 Folder 物件。

請注意

下面的程式碼用一個 File 物件舉例說明了 ShortName 屬性的用法：

Sub ShowShortPath(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = "The short path for " & "" & UCase(f.Name)

    s = s & "" & vbCrLfs = s & "is: " & "" & f.ShortPath & ""

    MsgBox s, 0, "Short Path Info"

End Sub


Size 屬性

��� [image] ��� [image] ���

描述

對於檔案來說，傳回以位元組為單位的指定檔案大小。對於資料夾來說，傳回以位元組為單位的包含在資料夾中所有檔案和子資料夾的大小。

語法

object.Size

object 始終是一個 File 或 Folder 物件。

請注意

下面的程式碼用一個 Folder 物件舉例說明了 Size 屬性的用法：

Sub ShowFolderSize(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(filespec)

    s = UCase(f.Name) & " uses " & f.size & " bytes."

    MsgBox s, 0, "Folder Size Info"

End Sub


SubFolders 屬性

��� [image] ��� [image] ���

描述

傳回包含所有資料夾的一個 Folders 集合物件，這些資料夾包含在某個特定的資料夾中，包括設定了隱藏和系統檔屬性的那些資料夾。

語法

object.SubFolders

object 始終是一個 Folder 物件。

請注意

下面的程式碼舉例說明了 SubFolders 屬性的用法：

Sub ShowFolderList(folderspec)

    Dim fs, f, f1, s, sf

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)Set sf = f.SubFolders

    For Each f1 in sf

        s = s & f1.name s = s &  vbCrLf

    Next

    MsgBox s

End Sub


TotalSize 屬性

��� [image] ��� [image] ���

描述

以位元組為單位，傳回磁碟機或網路共用的總空間大小。

語法

object.TotalSize

object 始終是一個 Drive 物件。

請注意

下面的程式碼舉例說明了 TotalSize 屬性的用法：

Sub ShowSpaceInfo(drvpath)

  Dim fs, d, s

  Set fs = CreateObject("Scripting.FileSystemObject")

  Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

  s = "Drive " & d.DriveLetter & ":"

  s = s & vbCrLf

  s = s & "Total Size: " & FormatNumber(d.TotalSize/1024, 0) & " Kbytes"

  s = s & vbCrLfs = s & "Available: " & FormatNumber(d.AvailableSpace/1024, 0) & " Kbytes"

  MsgBox s

End Sub


Type 屬性

��� [image] ��� [image] ���

描述

傳回關於某個檔案或資料夾型態的資訊。例如，對於以.TXT 結尾的檔案來說，傳回 "Text Document"。

語法

object.Type

object 始終是一個 File 或 Folder 物件。

請注意

下面的程式碼舉例說明了傳回某個資料夾型態的 Type 屬性的用法。在這個範例中，試圖將 Recycle Bin 的路徑或其他唯一的資料夾提供給程序。

Sub ShowFileSize(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(filespec)

    s = UCase(f.Name) & " is a " & f.Type

    MsgBox s, 0, "File Size Info"

End Sub


VolumeName 屬性

��� [image] ��� [image] ���

描述

設定或傳回指定磁碟機的標籤名。讀取/寫入屬性。

語法

object.VolumeName [= newname]

VolumeName 屬性有下列幾個單元：

單元	描述
object	必要引數。始終是一個 Drive 物件的名字。
newname	選擇性引數。如果提供的話，newname 是指定 object 的新名字。
請注意

下面的程式碼舉例說明了 VolumeName 屬性的用法：

Sub ShowVolumeInfo(drvpath)

  Dim fs, d, s

  Set fs = CreateObject("Scripting.FileSystemObject")

  Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

  s = "Drive " & d.DriveLetter & ": - " & d.VolumeName

  MsgBox s

End Sub


模糊的選取內容

您未選取關鍵字或您已要求有關整合開發環境 (IDE) 的「說明」。如果您試著選取關鍵字，則請試著再選取單一關鍵字。如果試著取得有關 IDE 的資訊，則請按一下下列其中一個主題：

程式碼或模組視窗

「即時運算」視窗或窗格

「區域變數」視窗或窗格

「物件瀏覽」

「監看」視窗或窗格