Access基礎教程--第八章 使用VBA編程

 
本章內容
 
VBA編程基礎
◆ 創建和設計VBA程序
VBA程序調試與運行
 
 
一、VBA編程基礎知識
 
    在執行簡單的操作時,宏可以完成,如窗體的打開與關閉、工具欄的顯示和隱藏等。對於稍複雜一些的任務,則可用Visual Basic for Application進行編程完成。
 
1VBA的數據類型
 
下面對VBA中的數據類型、數據類型之間的轉換、數據類型的對比進行介紹。
 
⑴ 數據類型
 
下表列出VBA中的基本數據類型。
 
類型名            聲明符 字節  
————————————————
Byte(單字節型)           1   
Integer(整型)     %      2  
Long(長整型)      &      4  
Single(單精度型)  !      4
Double(雙精度型)  #      8
Currency(貨幣型)  @      8
String(字符型)    $     n*1
Boolean(布爾型)          2
Date(日期型)             8
Variant(變體型)          x
Object(對象型)           4
————————————————
其中,字節、整型、長整型、單精度、雙精度、貨幣等數據類型都屬於數值數據類型,可以進行各種數學運算。字符型數據類型用來聲明字符串。布爾型數據類型用來表示一個邏輯值,爲真時顯示True,爲假時顯示Flase。日期型數據類型用來表示日期,日期常量必須用#括起來,如#2001/3/26#。變體型數據類型可以存放系統定義的任何數據類型,如數值、字符串、布爾及日期等,其數據類型由最近放入的值決定。
 
用戶可以使用Type語句定義任何數據類型。用戶自定義數據類型可以包括數據類型數組,或當前定義的用戶自定義類型的一種或多種元素。
語法:
[ Private | Public ] Type 類型名
    元素名 As 數據類型
  [ 元素名 As 數據類型 ]
    ……
End Type
 
例如:定義班級中學生的基本情況數據類型如下:
 
Public Type Students
  Name As String(8)
Age  As Integer
End Type
 
聲明變量:
 
Dim Student As Students
 
引用數據:
 
Student.Name=”張三
Student.Age=15
 
下面是詳細參考內容
 
Boolean 數據類型
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 數據類型
Byte 變量存儲爲單精度型、無符號整型、8 位(1個字節)的數值形式,範圍在 0 至 255 之間。
Byte 數據類型在存儲二進制數據時很有用。
 
Currency 數據類型
Currency 變量存儲爲 64 位(8 個字節)整型的數值形式,然後除以 10,000 給出一個定點數,其小數點左邊有 15 位數字,右邊有 4 位數字。這種表示法的範圍可以從 -922,337,203,685,477.5808 到 922,337,203,685,477.5807。Currency 的類型聲明字符爲at號 (@)。
Currency 數據類型在貨幣計算與定點計算中很有用,在這種場合精度特別重要。
 
Date 數據類型
Date 變量存儲爲 IEEE 64 位(8 個字節)浮點數值形式,其可以表示的日期範圍從 100 年 1 月 1 日到 9999 年 12 31 日,而時間可以從 0:00:00 到 23:59:59。任何可辨認的文本日期都可以賦值給 Date 變量。日期文字須以數字符號 (#) 擴起來,例如,#January 1, 1993# 或 #1 Jan 93#。
Date 變量會根據計算機中的短日期格式來顯示。時間則根據計算機的時間格式(12 或 24 小時制)來顯示。
當其他的數值類型要轉換爲 Date 型時,小數點左邊的值表示日期信息,而小數點右邊的值則表示時間。午夜爲 0 而中午爲 0.5。負整數表示 1899 年 12 月 30 日之前的日期。
 
Decimal 數據類型
Decimal 變量存儲爲 96 位(12 個字節)帶符號的整型形式,併除以一個 10 的冪數。這個變比因子決定了小數點右面的數字位數,其範圍從 0 到 28。變比因子爲 0(沒有小數位)的情形下,最大的可能值爲 +/-79,228,162,514,264,337,593,543,950,335。而在有 28 個小數位的情況下,最大值爲 +/-7.9228162514264337593543950335,而最小的非零值爲 +/-0.0000000000000000000000000001。
注意 此時,Decimal 數據類型只能在 Variant中使用,也就是說,不能聲明一變量爲 Decimal 的類型。不過可用 Cdec 函數,創建一個子類型爲 Decimal 的 Variant。
 
Double 數據類型
Double(雙精度浮點型)變量存儲爲 IEEE 64 位(8 個字節)浮點數值的形式,它的範圍在負數的時候是從 -1.79769313486231E308 到 -4.94065645841247E-324,而正數的時候是從 4.94065645841247E-324 到 1.79769313486232E308。Double 的類型聲明字符是數字符號 (#)。
 
Integer 數據類型
Integer 變量存儲爲 16位(2 個字節)的數值形式,其範圍爲 -32,768 到 32,767 之間。Integer 的類型聲明字符是百分比符號 (%)。
也可以用 Integer 變量來表示枚舉值。枚舉值可包含一個有限集合,該集合包含的元素都是唯一的整數,每一個整數都在它使用時的上下文當中有其特殊意義。枚舉值爲在已知數量的選項中做出選擇提供了一種方便的方法,例如,black = 0,white = 1 等等。較好的編程作法是使用 Const 語句將每個枚舉值定義成常數。
 
Long 數據類型
Long(長整型)變量存儲爲 32 位(4 個字節)有符號的數值形式,其範圍從 -2,147,483,648 到 2,147,483,647。Long 的類型聲明字符爲和號 (&)。
 
Object 數據類型
Object 變量存儲爲 32 位(4 個字節)的地址形式,其爲對象的引用。利用 Set 語句,聲明爲 Object 的變量可以賦值爲任何對象的引用。
注意 雖然以 Object 類型聲明的變量足以適應包含對各種對象的引用,但是綁定到變量引用的對象總是在晚期(運行時)綁定。要強迫在早期(編譯時間)綁定的話,須將對象的引用賦值給用特定類名稱聲明的變量。
 
Single 數據類型
Single(單精度浮點型)變量存儲爲 IEEE 32 位(4 個字節)浮點數值的形式,它的範圍在負數的時候是從 -3.402823E38 到 -1.401298E-45,而在正數的時候是從 1.401298E-45 到 3.402823E38。Single 的類型聲明字符爲感嘆號 (!)。
 
String 數據類型
字符串有兩種:變長與定長的字符串。
變長字符串最多可包含大約 20 億 ( 2^31)個字符。
定長字符串可包含 1 到大約 64K ( 2^16 ) 個字符。
注意 Public 定長字符串不能在類模塊中使用。
String 之字符碼的範圍是 0 到 255。字符集的前 128 個字符(0 到 127)對應於標準的 U.S. 鍵盤上的字符與符號。這前 128 個字符與 ASCII 字符集中所定義的相同。後 128 個字符(128 到 255)則代表特殊字符,例如國際字符,重音符號,貨幣符號及分數。String 的類型聲明字符爲美元號 ($)。
 
◆ 用戶定義數據類型
可以是任何用 Type 語句定義的數據類型。用戶自定義類型可包含一個或多個某種數據類型的數據元素、數組或一個先前定義的用戶自定義類型。例如:
Type MyType
    MyName As String        '定義字符串變量存儲一個名字。
    MyBirthDate As Date     '定義日期變量存儲一個生日。
    MySex As Integer        '定義整型變量存儲性別
End Type                    '(0 爲女,1 爲男)
 
Variant 數據類型
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 值。
 
⑵ 數據類型之間的轉換
 
在進行VBA編程過程中,用戶可以將一種數據類型的數據轉換成另一種特定類型的數據。如:
A=Cstr(2000),則將數值轉換爲字符型數據。下面列出這些轉換函數:
 
函數名     目標類型
——————————
Cbyte       Byte
Cint        Integer
Clng        Long
Csng        Single
Cdbl        Double
Ccur        Currency
Cdate       Date
Cvar        Varriant
——————————
 
⑶ 數據類型的對比
 
Access中,有4種不同的編輯環境需要用戶指定數據類型——表設計視圖、查詢參數、VBA代碼、SQL查詢視圖。下表列出數據類型與VBA數據類型對比。
 
字段數據類型                    VBA數據類型
——————————————————————
Yes/No                              Boolean
Number(Byte)                        Byte
AutoNumber(Long Integer)            Long
Currency                            Currency
Date/Time                           Date
Number(Double)                      Double
OLE Object                          String
AutoNumber/GVI(同步複製ID)        不支持 
Memro                               string
Number(Single)                      Single
Number(Integer)                     Integer
Text                                String
Hyper Link                          String
不支持                              Variant
——————————————————————
 
2.常量
 
定義常量來代替那些固定不變量的數字或字符串,可以提高代碼的可讀性和可維護性。VBA中有一部分常量是系統預先定義的,可以直接使用。用戶也可以使用自己定義的常量,但在使用之前必須聲明,以便分配內存空間。語法如下:
[Public/Private] Const 常量名 [As 數據類型] = 表達式
例如:
Const Pi=3.14159265358979323
Public Const A1 As Integer=6
Const BornDay=#03/23/80#
Private Const A2=”Abcdef258”
 
常量有3個範圍級別:過程級別(在過程中聲明的)、私有模塊級別(Private)、公共模塊級別(Public)。
Access支持3種類型的常量:
 
◆ 符號常量:需要聲明的常數都是符號常量。
◆ 固有常量:是Access或引用對象庫的一部分。
◆ 系統定義常量:True、False、Null。
 
其中,符號常量可以按上述方法聲明;系統定義常量只有上述三個。而固有常量則比較複雜一些,它是系統自動定義的,它由應用程序列與控件提供。它採用兩種方法來限定常數:通過前綴(如VBA對象庫的常數都以Vb開頭,如Vb Tile Horizontal)或通過庫應用([Libyan]|[mdul name] Constant)。
用戶可以使用對象瀏覽器來查看所有對象庫中的固有常量列表。具體操作如下:
◆ 單擊數據庫窗口【對象】欄下的【模塊】按鈕,再單擊工具欄中的【代碼】按鈕,進入模塊代碼窗口。
◆ 單擊代碼窗口工具欄中的【對象瀏覽器】窗口。
◆ 要查看可以使用的常量,在【對象瀏覽器】窗口中的【工程/庫】下拉列表框中選擇【所有庫】選項。此時,在窗口的【類】列表框中將顯示所有引用對象庫中的類。
◆ 在【搜索文字】下拉列表框中輸入“Constant”,然後單擊【對象瀏覽器】工具欄上的【搜索】按鈕,則會在【搜索結果】列表框中顯示所有固有常量類型。所有的這些固有常量都可以在宏或VBA中使用,用戶可以在任何時候,在任何允許使用符號常量或用戶自定義常量的地方使用固有常量。
 
Access中主要有以下幾種類型的固有常量:操作常量、DAO常量、事件過程常量、關鍵字常量、Run Command 方法常量、安全常量、VBA常量和Var Type函數常量。
 
下面是VBA定義的一些常數,使程序設計變得更爲簡單。下列常數可在程序代碼中的任何地方代替實際值:
Calendar 常數
常數    值 描述
vbCalGreg   0   指出使用的是陽曆。
vbCalHijri  1   指出使用的是伊斯蘭曆法。
 
CallType 常數
常數 值 描述 
vbMethod 1 指出已經調用了一個方法。 
vbGet 2 指出一個Property Get 過程。
vbLet 4 指出一個 Property Let 過程。 
vbSet 8 指出一個 Property Set 過程。
 
Color 常數
常數 值描述
vbBlack 0x0 黑色
vbRed 0xFF 紅色
vbGreen 0xFF00 綠色
vbYellow 0xFFFF 黃色
vbBlue 0xFF0000 藍色
vbMagenta 0xFF00FF 紫紅色
vbCyan 0xFFFF00 青色
vbWhite 0xFFFFFF 白色
 
Compiler 常數
Visual Basic for Applications 定義了一些不能與 #If...Then...#Else 指令一起使用的常數。這些常數除了其範圍是全局的;也就是說,除了可在工程中到處應用,在功能上與 #If...Then...#Else 指令定義的常數相同。
16 位開發平臺上,編譯常數定義如下:
 
常數 值描述
Win16 True 指出開發環境是 16 位。
Win32 False 指出開發環境不是 32 位。
 
32 位開發平臺上,編譯常數定義如下:
 
常數 值描述
Vba6  True  指出開發環境是 Visual Basic for Applications, version 6.0。
Vba6  False  指出開發環境不是Visual Basic for Applications, version 6.0。
Win16 False 指出開發環境不是 16 位。
Win32 True 指出開發環境是 32 位。
Mac False 指出開發環境不是 Macintosh。
Win16 False 指出開發環境不是 16位的。
Win32 False 指出開發環境不是 32位的。
Mac True 指出開發環境是 Macintosh。
注意 這些常數是由 Visual Basic 提供的,所以不能在任何層次中用相同名稱定義自己的常數。
 
Date 常數
常數 值描述
vbUseSystem 0 使用 NLS API 設置。
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 文件自上一次備份後已經改變
vbAlias 64 在 Macintosh上,標識符是一個別名。
 
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 模式
 
Instr、StrComp 常數
常數 值描述
VbUseCompareOption  -1 使用Option Compare語句的設置進行比較。  
VbBinaryCompare 0 進行二進制的比較。
VbTextCompare 1 進行文字的比較。
vbDatabaseCompare 2 用於 Microsoft Access(僅限於Windows),進行以數據庫所含信息爲基礎的比較。
 
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 LEFT ARROW 鍵
vbKeyUp 0x26 UP ARROW 鍵
vbKeyRight 0x27 RIGHT ARROW 鍵
vbKeyDown 0x28 DOWN ARROW 鍵
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 鍵與 A – Z 字母的 ASCII 碼相同:
 
常數 值描述
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 鍵與數字 0 – 9 的 ASCII 碼相同:
 
常數 值描述
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 MULTIPLICATION SIGN (*) 鍵
vbKeyAdd 0x6B PLUS SIGN (+) 鍵
vbKeySeparator 0x6C ENTER 鍵
vbKeySubtract 0x6D MINUS SIGN (–) 鍵
vbKeyDecimal 0x6E DECIMAL POINT (.) 鍵
vbKeyDivide 0x6F DIVISION SIGN (/) 鍵
 
下列常數代表功能鍵:
 
常數 值描述
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 鍵
 
Miscellaneous 常數
常數 等於描述
vbCrLf Chr(13) + Chr(10) 回車符與換行符結合
vbCr Chr(13) 回車符
vbLf Chr(10) 換行符
vbNewLine Chr(13) + Chr(10) or, on the Macintosh, Chr(13) 平臺指定的新行字符;適用於當前平臺
vbNullChar Chr(0) 值爲 0 的字符
vbNullString 值爲 0 的字符串 用來調用外部過程;與長度爲零的字符串 ("") 不同
vbObjectError -2147221504 用戶定義的錯誤號應當大於該值,例如:
Err.Raise Number = vbObjectError + 1000
vbTab Chr(9) Tab 字。
vbBack Chr(8) 退格字符
vbFormFeed Chr(12) 在 Microsoft Windows or on the Macintosh 中沒有作用
vbVerticalTab Chr(11) 在 Microsoft or on the Macintosh Windows 中沒有作用
 
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 按鈕
 
QueryClose 常數
常數 值描述
vbFormControlMenu 0 用戶從窗體上的Control 菜單選擇Close 命令。
vbFormCode 1 Unload 語句被從代碼中調用。
vbAppWindows 2 當前 Microsoft Windows 操作環境會話結束。
vbAppTaskManager 3 Windows Task Manager 正在關閉應用程序。
 
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 (在Macintosh 中不可用。)。
vbFromUnicode 128 將字符串由 Unicode 轉換成缺省的系統代碼頁 (在Macintosh 中不可用。)。
 
◆系統顏色常數
常數 值描述
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 工具提示背景色
 
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(只用於變體的數組類型)
vbDataObject 13 數據訪問對象
vbDecimal 14 Decimal
vbByte 17 Byte
vbUserDefinedType 36 包含用戶定義類型的變量
vbArray 8192 數組
 
 
 
3.變量
 
程序中的變量爲臨時在座單元,可存放文字、數值、日期和對象屬性。每個變量都有一個名字,程序通過變量名對變量進行存取操作。
 
VBA的變量命名規則
 
變量名必須以英文字母開頭。
變量名長度不可以超過255個字符。
除英文字母、數字、下劃線外,其他字符儘量避免使用。
變量名不能與VBA本身的函數過程、語句以及方法同名。
變量名在同一作用域內不能相同。
 
VBA變量不區分大小寫。爲了便於識別數據類型,在給變量或常量命名時,常常採用給變量名或常量名加前綴的方法。在VBA中,有一些約定俗成的常量和變量的命名前綴。如下表:
數據類型       前綴
——————————
Byte            Byt
Integer         Int
Long            Lng
Single          Sng
Double          Dbl
Currency        Cur
String          Str
Boolean         Bln
Date            Date
Variant         Vnt
Object          Obj
用戶自定義      Udt
——————————
 
⑵ 變量聲明
 
VBA變量聲明有兩種方法:
◆ 隱性聲明。如果沒有指定變量的類型而使用變量,則此變量默認爲Variant類型。這種聲明方式不但增加了程序運行的負擔,而且極容易出現數據運算問題,造成程序出錯。
◆ 顯性聲明。語法:Dim 變量名 [As 類型]    如:
Dim X
Dim W As Integer
Dim A As String, B As Currency, C As Integer
注意:如果這樣聲明:Dim x,y,z As Integer,則x,y爲Variant類型。
 
⑶ 變量的應用範圍
 
變量有三個範圍級別
◆ 過程級別。在過程內,只有在聲明此變量的過程中才可使用的變量稱爲局部變量。用戶可以使用Dim 或 Static關鍵字來定義。如:
Dim x As Single
Static y As single
Dim 定義的局部變量只有在它所在的過程運行時纔會有值,而Static定義的局部變量在整個程序運行期間均有值,所以它可以作爲中間變量保存結果。
◆ 私有模塊級別
在程序中,公共模塊中的變量對於所有模塊的所有過程均可用,而私有模塊中的變量只對所屬模塊過程可用。
用戶可以在窗體、報表和標準模塊頂部的聲明部分用Dim或Private定義模塊級的變量。由Dim語句在聲明部分所聲明的變量,其範圍默認爲私有的。
◆ 公共模塊級別
如果將一個變量聲明爲公共模塊級變量,那麼他就可以爲工程所有過程調用。它通過Public來聲明。
 
⑷ 變量的生存期
 
在給變量聲明瞭應用範圍後,變量就有了一個生存週期,即變量保留數值的時間。具體地說,就是變量第一次(聲明時)出現到消失時的持續時間。
Dim語句聲明的過程級別變量將把數值保留到退出此過程爲止。如果該過程調用了其他過程,則在這些過程運行的同時,屬於調用者過程的變量將保留它的值。
如果用戶希望保存某個過程局部變量的值,可以用Static聲明。如果過程級別的變量是用Static關鍵字來聲明的,則只要有代碼正在運行,此變量就會保留它的值;而當所有代碼都完成運行後,變量將不再起作用,所以它的生成周期和模塊級別變量是一樣的。
模塊級別的變量與靜態變量是不同的,在標準模塊或類模塊中變量會保留它的值直到停止款運行代碼。在對象類模塊中,只要仍有一個屬於此對象類的實例存在,變量就會一直保留它的值。模塊級別的變量會一直佔用內存資源,直到重新設置它們的值,所以應只有必要時才使用它們。
如果在Sub或Function語句前面加上Static,則此過程中所有級別的變量值在調用期間將保留。
 
4.數組
   
⑴ 聲明數組
格式:Public/Private/Static/Dim 數組名([下標] To 上界) [As 數據類型]
例如:Public Workers(8) As Integer
Dim Workers(8) As Integer
      Static Workers(8) As Integer
上述例子中,下標默認爲0,上界爲8,共9個元素。也可以人爲指定下標,如:
Dim Workers(1 To 8) As Integer
通常可以通過一個For循環處理數組:
 
Static Numbers(1 To 15) As Integer
Dim I As Integer
For I=1 To 15
  Numbers(I)=30
Next I
 
⑵ 二維數組和多維數組
可以如下定義二維數組和多維數組:格式:
Dim 數組名([下標] To 上界,[[下標] To 上標,……]) [As 數據類型]
例如:
Static Aa(19,19) As Integer
Static Aa(1 To 20,1 To 20) As Integer
下面將值20賦給上述數組:
Dim I As Integer,J As Integer
Static Aa(19,19) As Integer
For I=0 To 19
  For J=0 To 19
    Aa(I,J)=20
  Next J
Next I
多維數組的語法結構同二維數組大致一樣,僅在聲明時多了幾項。
 
⑶ 動態數組
如果在程序運行之前不能肯定數組的大小,可以使用動態數組,建立動態數組的步驟如下:
聲明空維表:Dim Array()
然後用ReDim語句配置數組個數。ReDim語句聲明只能用在過程中,它是可執行語句,可以改變數組中元素的個數,但不能改變數組的維數。每次用ReDim配置數組時,原有數組的值全部清零。請看如下例子:
Dim Aa() As Integer
Dim I As Integer,J As Integer
ReDim I Aa(7,5)
For I=0 To 7
  For J=0 To 5
    Aa(I,J)=I*J
  Next J
Next I
ReDim I Aa(9,2)
For I=0 To 9
      For J=0 To 2
    Aa(I,J)=2*(I*J)
  Next J
Next I 
 
 
5.運算符
 
⑴ 算術運算符
+   減-   乘*   除/   整除/   乘方^   求餘Mod
 
⑵ 連接運算符
連接運算就是將兩個表達式連接在一起。+和&都能完成這個工作,但應儘量使用&以。如:
A1=#7/1/97#
A2=”香港迴歸祖國
A3=A1&A2
則變量A3的值爲“97-7-1香港迴歸祖國”
 
⑶ 比較運算符
大於>   小於<   大於等於>=  小於等於<=  等於=   不等於<>
 
⑷ 邏輯運算符
Not   與And   或Or    異或Xor     邏輯相等(同或)Eqv     隱含(逐位比較)Imp
下面是真值表
 
A
B
Not A
A Or B
A And B
A Xor B
A Eqv B
A Imp B
0
0
1
0
0
0
1
1
0
1
1
1
0
1
0
1
1
0
0
1
0
1
0
0
1
1
0
1
1
0
1
1
 
⑸ 運算符的優先級
運算符的優先級順序爲:算術運算、連接運算、比較運算、邏輯運算。
 
 
6.條件語句
 
VBA支持以下3種條件判斷語句:
 
If…Then
 
If<條件> Then <程序代碼>
例如:If I<5 Then Print“$”
又如:If (I<5 And I>0) Then Print “$”
 
If…Then…Else
 
If<條件1> Then
  <程序代碼1>
[Else If<條件2> Then
<程序代碼2>]
  …
[Else
<程序代碼N+1>]
End If
 
例如:
 
If Money>10000 Then
  Tax=Money*0.2
Else If Money>1000 Then
  Tax=Money*0.15
Else
  Tax=Money*0.1
End If
 
Select Case
 
當條件表達式僅有一個測試變量時,使用Select Case結構更有效。其語法如下:
Select Case<測試條件>
  Case <結果值1>
    <程序代碼1>
  [Case <結果值2>
    <程序代碼2>]
    …
  [Case Else
    <程序代碼N>]
End Select 
 
例如:
 
Select Case X
  Case 1
    Print “One”
  Case 2
    Print “Two”
  Case 3
    Print “Three”
  Case 4
    Print “Best”
  Case Else
    Print “Bad”
End Select
 
7.循環語句
 
Do…Loop
   
通過Do來執行循環,有如下四種格式。其中While是條件爲真時循環,Until是條件爲假時循環。
 
格式一:
 
Do While<條件表達式>
<循環代碼>
Loop
 
例如:
 
Sub Command1.Click()
  Dim I As Intger
    I=1
  Do While I<=20
    Print I
  I=I+1
  Loop
End End
 
格式二:
 
Do
<循環代碼>
Loop While<條件表達式>
 
Sub Command1.Click()
  Dim I As Intger
    I=1
  Do
    Print I
  I=I+1
  Loop While I<=20
End End
 
格式三:
 
Do Until<條件表達式>
<循環代碼>
Loop
 
例如:
 
Sub Command1.Click()
  Dim I As Intger
    I=1
  Do Until I<=20
    Print I
  I=I+1
  Loop
End End
 
格式四:
 
Do
<循環代碼>
Loop Until<條件表達式>
 
Sub Command1.Click()
  Dim I As Intger
    I=1
  Do
    Print I
  I=I+1
  Loop Until I<=20
End End
 
 
For…Next
 
格式:
 
For 變量=初值 To 終值學者[Step 步長]
  <循環體>
Next [變量]
 
例子:
 
For I=1 To 10 Step 1
  Print 2^I
Next I
 
While…Wend
格式:
 
While<條件表達式>
  <循環體>
Wend
 
例子:
 
N=1
While N<=5
  Beep
Wend
 
⑷ 循環的退出
 
可以通過Exit退出循環。例如:
 
Private Sub Command1_Click()
Dim I, J As Integer
J = Form!Text2.Value
For I = 1 To 100
    If I = J Then
      Exit For
    End If
Next I
MsgBox "你輸入的值是: " & I
End Sub
 
 
 
8.模塊與過程
 
⑴ 模塊
 
模塊作爲Access的對象之一,主要用來存放用戶編寫的VBA代碼,如同窗體是存放控件對象的容器一樣,模塊是代碼的容器。
 
整個模塊窗口分爲兩個部分:通用區和過程區。通常模塊由以下一些部分組成:
 
◆ 聲明部分 用戶可以在這部分定義常量、變量、用戶自定義類型和外部過程,在模塊中,聲明部分與過程部分是分割開來的。用戶在聲明部分中設定的常量和變量是全局性的,聲明部分 中的內容可以被模塊中的所有過程調用。
 
◆ 事件過程 事件過程是一種自動執行的過程,用來對由用戶或程序代碼啓動的事件或系統觸發的事件做出響應。事件過程包括函數過程和子過程。
 
從與其他對象的關係來看,模塊又可分爲兩種基本類型:
 
◆ 類模塊 類模塊是指包含新對象定義的模塊。
 
◆ 標準模塊 標準模塊是指存放整個數據庫都可用的子程序和函數的模塊。標準模塊包括通用過程和常用過程,通用過程不與任何對象相關聯,常用過程可以在數據庫的任何地方運行。
 
⑵ 過程
 
一個過程就是一個VBA代碼單元,它包含一系列的語句和方法,以便執行或計算數值。
過程有兩種:一種是子過程,另一種是函數過程。
子過程用來執行一個操作或一系列操作,但是它不返回值。函數過程將返回一個值,並可傳遞參數。
 
 
 

二、創建VBA程序
 
1VBA的編程環境
 
通過單擊數據庫窗口【對象】欄下的【模塊】按鈕,選擇需要編寫或修改的模塊,即彈出一個編寫VBA程序的窗口,如下圖:
 
2.編寫VBA語句
 
VBA語句是一個完整的結構單元,它代表一種操作、聲明或定義。一條語句通常佔一行,用戶也可以使用冒號在一行中包含多條語句。如果一條語句過長,用戶可以使用行繼續符(下劃線)結束,在下一行的接着寫。
VBA中語句分爲三種:
◆ 聲明語句:在聲明語句中,用戶可以給變量、常數或程序取名稱,並且指定數據類型。
◆ 賦值語句:用於指定變量或變量的值,指定變量爲某一表達式。
◆ 執行語句:在VBA語句中,一條執行語句可以執行初始化操作,也可以執行一個方法或函數,並且可以循環或從代碼塊中分支執行。
 
3.創建事件過程
 
下面是一個綜合性的例子:
 
 
代碼如下:
 
Option Compare Database
 
Private Sub Command10_Click()
X = InputBox("Please enter X")
Select Case X
  Case "1"
    MsgBox "One"
  Case "2"
    MsgBox "Two"
  Case "3"
    MsgBox "Three"
  Case "4"
    MsgBox "Best"
End Select
End Sub
 
Private Sub Command11_Click()
Dim I As Integer, J As Integer
I = 21
J = 21
Form_MyForm1!Label5.Caption = ""
Do While I <= 20
  Form_MyForm1!Label5.Caption = Form_MyForm1!Label5.Caption & I & ","
  I = I + 1
Loop
Form_MyForm1!Label16.Caption = ""
Do
  Form_MyForm1!Label16.Caption = Form_MyForm1!Label16.Caption & J & ","
  J = J + 1
Loop While J <= 20
End Sub
 
Private Sub Command12_Click()
Dim I As Integer, J As Integer
I = 1
J = 1
Form_MyForm1!Label5.Caption = ""
Do Until I > 20
  Form_MyForm1!Label5.Caption = Form_MyForm1!Label5.Caption & I & ","
  I = I + 1
Loop
Form_MyForm1!Label16.Caption = ""
Do
  Form_MyForm1!Label16.Caption = Form_MyForm1!Label16.Caption & J & ","
  J = J + 1
Loop Until J > 20
End Sub
 
Private Sub Command13_Click()
Dim I As Integer, J As Integer
J = InputBox("請輸入要查找的值")
For I = 1 To 100
  If I = J Then
  Exit For
  End If
Next I
If I <= 100 Then
  MsgBox ("找到!")
Else
  MsgBox ("未找到!")
End If
End Sub
 
Private Sub Command2_Click()
Static Numbers(1 To 15) As Integer
Dim I As Integer
Form_MyForm1!Label5.FontSize = 16
Form_MyForm1!Label5.BackColor = 8404992
Form_MyForm1!Label5.Caption = ""
For I = 1 To 15
  Numbers(I) = I
  Form_MyForm1!Label5.Caption = Form_MyForm1!Label5.Caption & Numbers(I) & " "
  Form_MyForm1!Text0.Value = Numbers(I)
Next I
 
End Sub
 
Private Sub Command6_Click()
Dim I As Integer, J As Integer
Static Aa(19, 19) As Integer
Form_MyForm1!Label5.BackColor = 4194432
Form_MyForm1!Label5.FontSize = 9
Form_MyForm1!Label5.Caption = ""
For I = 0 To 19
  For J = 0 To 19
    Aa(I, J) = 20
    Form_MyForm1!Label5.Caption = Form_MyForm1!Label5.Caption & Aa(I, J) & " "
  Next J
Next I
End Sub
 
Private Sub Command7_Click()
Dim Aa() As Integer
Dim I As Integer, J As Integer
ReDim Aa(7, 5)
Form_MyForm1!Label5.Caption = ""
For I = 0 To 7
  For J = 0 To 5
    Aa(I, J) = I * J
    Form_MyForm1!Label5.Caption = Form_MyForm1!Label5.Caption & Aa(I, J) & " "
  Next J
    Form_MyForm1!Label5.Caption = Form_MyForm1!Label5.Caption & " ,"
Next I
 
ReDim Aa(9, 2)
Form_MyForm1!Label16.Caption = ""
For I = 0 To 9
  For J = 0 To 2
    Aa(I, J) = 2 * I * J
    Form_MyForm1!Label16.Caption = Form_MyForm1!Label16.Caption & Aa(I, J) & " "
  Next J
    Form_MyForm1!Label16.Caption = Form_MyForm1!Label16.Caption & " ,"
Next I
End Sub
 
Private Sub Command8_Click()
Dim a, b, c
a = InputBox("Please enter a")
b = InputBox("Please enter b")
c = a Xor b
Form_MyForm1!Text0.Value = c
End Sub
 
Private Sub Command9_Click()
Dim Money As Currency
Money = InputBox("Please enter Money")
If Money > 10000 Then
  Tax = Money * 0.2
ElseIf Money > 1000 Then
  Tax = Money * 0.15
Else
  Tax = Money * 0.1
End If
cont = MsgBox("應繳稅金爲" & Tax & "確定按是,不確定按否查看幫助", 4 + 48)
If cont = 6 Then
Else
  MsgBox ("不理解也得理解!!!")
End If
End Sub
 
4.創建過程
 
事件過程是VBA編程的核心,但有時還需要利用VBA中的兩類通用過程:Function過程和Sub過程,對事件過程加以改進,以提高代碼的可讀性和可維護性。
 
Function過程
 
如果用戶需要在窗體或報表中重複使用某一表達式,可以使用一個函數過程代替這個表達式。
例如:
 
Function Summ(x, y) As Integer
Summ = x + y
End Function
 
Private Sub Command2_Click()
  Dim a As Integer, b As Integer, c As Integer
  a = InputBox("請輸入a")
  b = InputBox("請輸入b")
  c = Summ(a, b)
  MsgBox ("c=a+b=" & a & "+" & b & "=" & c)
Form_MyForm2!Label5.Caption = "c=a+b=" & a & "+" & b & "=" & c
End Sub
 
 
Sub過程
 
Sub過程的定義與Function過程的定義類似,它們的重要區別在於,Sub過程沒有返回值,不能用於表達式中。
Function Summ(x, y) As Integer
Summ = x + y
End Function
 
Sub subSumm()
  Dim a As Integer, b As Integer, c As Integer
  a = InputBox("請輸入a")
  b = InputBox("請輸入b")
  c = Summ(a, b)
  MsgBox ("c=a+b=" & a & "+" & b & "=" & c)
Form_MyForm2!Label16.Caption = "c=a+b=" & a & "+" & b & "=" & c
End Sub
 
Private Sub Command2_Click()
  Call subSumm
End Sub
 
 
 
三、VBA程序對數據庫的操作
 
 
1Microsoft Jet和ODBCDirect工作區模型
 
Microsoft Jet工作區
 
VB可以簡單地打開一個現存的數據庫,或是自己建立一個新的數據庫。數據庫類型可以是Microsoft Jet數據庫(.mdb)、ISAM(索引查找訪問模式,如Paradox數據庫),也可以是通過 Microsoft Jet數據庫引擎連接的ODBC數據庫。
 
可以利用對象變量或DDL特性來改變數據庫結構。例如下面的代碼把一個新的字段對象加入到現存的數據庫表中:
Dim dbs As Database,tdf As TableDef,fld As Field
Set dbs = OpenDatabase(“BiBlio.mdb”)
Set tdf = dbs.TableDefs(“Authors”)
Set fld = tdf.CreateField(“Address”,dbText,20)
Tdf.Fields.Append Fld
 
VB具有進行數據處理、事務處理、數據備份、安全處理等工作的強大功能。
 
ODBCDirect工作區模型
 
ODBCDirect工作區模型主要通過連接數據庫、查詢設計、
 
2.使用DAO操作數據
 
打開數據庫:
 
Private Sub Command7_Click()
  Dim dbExam As Database
  Set dbExam = OpenDatabase("d:/st.mdb", True, True)
  MsgBox ("The dataBase [" & dbExam.Name & "] is now open")
End Sub
 
 
字段值增一
 
Private Sub Command8_Click()
  Dim dbExam As Database
  Dim strSql As String
  strSql = "UPDATE st1 SET Age=Age+1"
  Set dbExam = OpenDatabase("d:/Access教程/st.mdb")
  dbExam.Execute strSql
  MsgBox ("St數據庫中的St1表的Age字段已增一更新")
  dbExam.Close
End Sub
 
根據提示更新數據
 
Private Sub Command9_Click()
  Dim dbExam As Database
  Dim strSql As String
  Dim i As Integer
  i = InputBox("Please enter i")
  strSql = "UPDATE st1 SET Age=Age+" & i
  Set dbExam = OpenDatabase("d:/Access教程/st.mdb")
  dbExam.Execute strSql
  MsgBox ("St數據庫中的St1表的Age字段已更新" & i)
  dbExam.Close
End Sub
 
添加記錄之一
 
Private Sub Command10_Click()
  Dim dbExam As Database
  Dim intCommand As Integer
  Set dbExam = OpenDatabase("st.mdb")
  Set rstExam = dbExam.OpenRecordset("st1", dbOpenDynaset)
  With rstExam
  .AddNew
    !Name = "八八先生"
    !Age = 88
    !Tel = "8888888"
    intCommand = MsgBox("正在添加新記錄,繼續嗎?", vbYesNo)
    If intCommand = vbYes Then
      .Update
      MsgBox ("st1表已增加一條記錄")
    Else
      .CancelUpdate
      MsgBox ("已放棄增加記錄")
    End If
  End With
  dbExam.Close
End Sub
 
添加記錄之二
 
Private Sub Command11_Click()
  Dim dbExam As Database
  Dim intCommand As Integer
  Dim Na As String
  Dim Ag As Integer
  Dim Te As String
  Set dbExam = OpenDatabase("st.mdb")
  Set rstExam = dbExam.OpenRecordset("st1", dbOpenDynaset)
  Na = Text17.Value
  Ag = Text2.Value
  Te = Text4.Value
  With rstExam
  .AddNew
    !Name = Na
    !Age = Ag
    !Tel = Te
    intCommand = MsgBox("正在添加新記錄,繼續嗎?", vbYesNo)
    If intCommand = vbYes Then
      .Update
      MsgBox ("st1表已增加一條記錄")
    Else
      .CancelUpdate
      MsgBox ("已放棄增加記錄")
    End If
  End With
  dbExam.Close
End Sub
 
提取字段值
 
Private Sub Command12_Click()
  Dim dbExam As Database
  Dim intCommand As Integer
  Dim Na As String
  Dim Ag As Integer
  Dim Te As String
  Set dbExam = OpenDatabase("st.mdb")
  Set rstExam = dbExam.OpenRecordset("st1", dbOpenDynaset)
  Form_MyForm2!Label16.Caption = ""
  With rstExam
  .MoveFirst
    While rstExam.EOF <> True
      Na = !Name
      Ag = !Age
      Te = !Tel
      Form_MyForm2!Label16.Caption = Form_MyForm1!Label16.Caption & Na & "," & Ag & "," & Te & "/"
      .MoveNext
    Wend
  End With
  dbExam.Close
End Sub
 
刪除記錄
 
Private Sub Command13_Click()
  Dim dbExam As Database
  Dim intCommand As Integer
  Set dbExam = OpenDatabase("st.mdb")
  Set rstExam = dbExam.OpenRecordset("st1", dbOpenDynaset)
  With rstExam
  .MoveLast
    intCommand = MsgBox("正在刪除最後一條記錄,繼續嗎?", vbYesNo)
    If intCommand = vbYes Then
      .Delete
      MsgBox ("st1表已刪除一條記錄")
    Else
      MsgBox ("已放棄刪除記錄")
    End If
  End With
  dbExam.Close
End Sub
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章