中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Access教程 第八章 使用VBA編程

第八章  使用VBA編程

 

 

 

本章內(nèi)容

 

VBA編程基礎(chǔ)

◆ 創(chuàng)建和設(shè)計(jì)VBA程序

VBA程序調(diào)試與運(yùn)行

 

 

一、VBA編程基礎(chǔ)知識

 

    在執(zhí)行簡單的操作時(shí),宏可以完成,如窗體的打開與關(guān)閉、工具欄的顯示和隱藏等。對于稍復(fù)雜一些的任務(wù),則可用Visual Basic for Application進(jìn)行編程完成。

 

1VBA的數(shù)據(jù)類型

 

下面對VBA中的數(shù)據(jù)類型、數(shù)據(jù)類型之間的轉(zhuǎn)換、數(shù)據(jù)類型的對比進(jìn)行介紹。

 

⑴ 數(shù)據(jù)類型

 

下表列出VBA中的基本數(shù)據(jù)類型。

 

類型名            聲明符  字節(jié)  

————————————————

Byte(單字節(jié)型)           1   

Integer(整型)     %      2  

Long(長整型)      &      4  

Single(單精度型)  !      4

Double(雙精度型)  #      8

Currency(貨幣型)  @      8

String(字符型)    $     n*1

Boolean(布爾型)          2

Date(日期型)             8

Variant(變體型)          x

Object(對象型)           4

————————————————

其中,字節(jié)、整型、長整型、單精度、雙精度、貨幣等數(shù)據(jù)類型都屬于數(shù)值數(shù)據(jù)類型,可以進(jìn)行各種數(shù)學(xué)運(yùn)算。字符型數(shù)據(jù)類型用來聲明字符串。布爾型數(shù)據(jù)類型用來表示一個(gè)邏輯值,為真時(shí)顯示True,為假時(shí)顯示Flase。日期型數(shù)據(jù)類型用來表示日期,日期常量必須用#括起來,如#2001/3/26#。變體型數(shù)據(jù)類型可以存放系統(tǒng)定義的任何數(shù)據(jù)類型,如數(shù)值、字符串、布爾及日期等,其數(shù)據(jù)類型由最近放入的值決定。

 

用戶可以使用Type語句定義任何數(shù)據(jù)類型。用戶自定義數(shù)據(jù)類型可以包括數(shù)據(jù)類型數(shù)組,或當(dāng)前定義的用戶自定義類型的一種或多種元素。

語法:

[ Private | Public ] Type 類型名

    元素名 As 數(shù)據(jù)類型

  [ 元素名 As 數(shù)據(jù)類型 ]

    ……

End Type

 

例如:定義班級中學(xué)生的基本情況數(shù)據(jù)類型如下:

 

Public Type Students

  Name As String(8)

Age  As Integer

End Type

 

聲明變量:

 

Dim Student As Students

 

引用數(shù)據(jù):

 

Student.Name=”張三

Student.Age=15

 

下面是詳細(xì)參考內(nèi)容

 

Boolean 數(shù)據(jù)類型

Boolean 變量存儲為 16 位(2 個(gè)字節(jié))的數(shù)值形式,但只能是 True 或是 False。Boolean 變量的值顯示為 True False(在使用 Print 的時(shí)候),或者 #TRUE# #FALSE#(在使用 Write # 的時(shí)候)。使用關(guān)鍵字 True False 可將 Boolean 變量賦值為這兩個(gè)狀態(tài)中的一個(gè)。

當(dāng)轉(zhuǎn)換其他的數(shù)值類型為 Boolean 值時(shí),0 會轉(zhuǎn)成 False,而其他的值則變成 True。當(dāng)轉(zhuǎn)換 Boolean 值為其他的數(shù)據(jù)類型時(shí),False 成為 0,而 True 成為 -1。

 

Byte 數(shù)據(jù)類型

Byte 變量存儲為單精度型、無符號整型、8 位(1個(gè)字節(jié))的數(shù)值形式,范圍在 0 255 之間。

Byte 數(shù)據(jù)類型在存儲二進(jìn)制數(shù)據(jù)時(shí)很有用。

 

Currency 數(shù)據(jù)類型

Currency 變量存儲為 64 位(8 個(gè)字節(jié))整型的數(shù)值形式,然后除以 10,000 給出一個(gè)定點(diǎn)數(shù),其小數(shù)點(diǎn)左邊有 15 位數(shù)字,右邊有 4 位數(shù)字。這種表示法的范圍可以從 -922,337,203,685,477.5808 922,337,203,685,477.5807。Currency 的類型聲明字符為at (@)。

Currency 數(shù)據(jù)類型在貨幣計(jì)算與定點(diǎn)計(jì)算中很有用,在這種場合精度特別重要。

 

Date 數(shù)據(jù)類型

Date 變量存儲為 IEEE 64 位(8 個(gè)字節(jié))浮點(diǎn)數(shù)值形式,其可以表示的日期范圍從 100 1 1 日到 9999 年 12 31 日,而時(shí)間可以從 0:00:00 23:59:59。任何可辨認(rèn)的文本日期都可以賦值給 Date 變量。日期文字須以數(shù)字符號 (#) 擴(kuò)起來,例如,#January 1, 1993# #1 Jan 93#。

Date 變量會根據(jù)計(jì)算機(jī)中的短日期格式來顯示。時(shí)間則根據(jù)計(jì)算機(jī)的時(shí)間格式(12 24 小時(shí)制)來顯示。

當(dāng)其他的數(shù)值類型要轉(zhuǎn)換為 Date 型時(shí),小數(shù)點(diǎn)左邊的值表示日期信息,而小數(shù)點(diǎn)右邊的值則表示時(shí)間。午夜為 0 而中午為 0.5。負(fù)整數(shù)表示 1899 12 30 日之前的日期。

 

Decimal 數(shù)據(jù)類型

Decimal 變量存儲為 96 位(12 個(gè)字節(jié))帶符號的整型形式,并除以一個(gè) 10 的冪數(shù)。這個(gè)變比因子決定了小數(shù)點(diǎn)右面的數(shù)字位數(shù),其范圍從 0 28。變比因子為 0(沒有小數(shù)位)的情形下,最大的可能值為 +/-79,228,162,514,264,337,593,543,950,335。而在有 28 個(gè)小數(shù)位的情況下,最大值為 +/-7.9228162514264337593543950335,而最小的非零值為 +/-0.0000000000000000000000000001。

注意 此時(shí),Decimal 數(shù)據(jù)類型只能在 Variant中使用,也就是說,不能聲明一變量為 Decimal 的類型。不過可用 Cdec 函數(shù),創(chuàng)建一個(gè)子類型為 Decimal Variant

 

Double 數(shù)據(jù)類型

Double(雙精度浮點(diǎn)型)變量存儲為 IEEE 64 位(8 個(gè)字節(jié))浮點(diǎn)數(shù)值的形式,它的范圍在負(fù)數(shù)的時(shí)候是從 -1.79769313486231E308 -4.94065645841247E-324,而正數(shù)的時(shí)候是從 4.94065645841247E-324 1.79769313486232E308Double 的類型聲明字符是數(shù)字符號 (#)。

 

Integer 數(shù)據(jù)類型

Integer 變量存儲為 16位(2 個(gè)字節(jié))的數(shù)值形式,其范圍為 -32,768 32,767 之間。Integer 的類型聲明字符是百分比符號 (%)。

也可以用 Integer 變量來表示枚舉值。枚舉值可包含一個(gè)有限集合,該集合包含的元素都是唯一的整數(shù),每一個(gè)整數(shù)都在它使用時(shí)的上下文當(dāng)中有其特殊意義。枚舉值為在已知數(shù)量的選項(xiàng)中做出選擇提供了一種方便的方法,例如,black = 0,white = 1 等等。較好的編程作法是使用 Const 語句將每個(gè)枚舉值定義成常數(shù)。

 

Long 數(shù)據(jù)類型

Long(長整型)變量存儲為 32 位(4 個(gè)字節(jié))有符號的數(shù)值形式,其范圍從 -2,147,483,648 2,147,483,647Long 的類型聲明字符為和號 (&)。

 

Object 數(shù)據(jù)類型

Object 變量存儲為 32 位(4 個(gè)字節(jié))的地址形式,其為對象的引用。利用 Set 語句,聲明為 Object 的變量可以賦值為任何對象的引用。

注意 雖然以 Object 類型聲明的變量足以適應(yīng)包含對各種對象的引用,但是綁定到變量引用的對象總是在晚期(運(yùn)行時(shí))綁定。要強(qiáng)迫在早期(編譯時(shí)間)綁定的話,須將對象的引用賦值給用特定類名稱聲明的變量。

 

Single 數(shù)據(jù)類型

Single(單精度浮點(diǎn)型)變量存儲為 IEEE 32 位(4 個(gè)字節(jié))浮點(diǎn)數(shù)值的形式,它的范圍在負(fù)數(shù)的時(shí)候是從 -3.402823E38 -1.401298E-45,而在正數(shù)的時(shí)候是從 1.401298E-45 3.402823E38Single 的類型聲明字符為感嘆號 (!)。

 

String 數(shù)據(jù)類型

字符串有兩種:變長與定長的字符串。

變長字符串最多可包含大約 20 ( 2^31)個(gè)字符。

定長字符串可包含 1 到大約 64K ( 2^16 ) 個(gè)字符。

注意 Public 定長字符串不能在類模塊中使用。

String 之字符碼的范圍是 0 255。字符集的前 128 個(gè)字符(0 127)對應(yīng)于標(biāo)準(zhǔn)的 U.S. 鍵盤上的字符與符號。這前 128 個(gè)字符與 ASCII 字符集中所定義的相同。后 128 個(gè)字符(128 255)則代表特殊字符,例如國際字符,重音符號,貨幣符號及分?jǐn)?shù)。String 的類型聲明字符為美元號 ($)。

 

◆ 用戶定義數(shù)據(jù)類型

可以是任何用 Type 語句定義的數(shù)據(jù)類型。用戶自定義類型可包含一個(gè)或多個(gè)某種數(shù)據(jù)類型的數(shù)據(jù)元素、數(shù)組或一個(gè)先前定義的用戶自定義類型。例如:

Type MyType

    MyName As String        '定義字符串變量存儲一個(gè)名字。

    MyBirthDate As Date     '定義日期變量存儲一個(gè)生日。

    MySex As Integer        '定義整型變量存儲性別

End Type                    '0 為女,1 為男)

 

Variant 數(shù)據(jù)類型

Variant 數(shù)據(jù)類型是所有沒被顯式聲明(用如 Dim、PrivatePublic Static等語句)為其他類型變量的數(shù)據(jù)類型。Variant 數(shù)據(jù)類型并沒有類型聲明字符。

Variant 是一種特殊的數(shù)據(jù)類型,除了定長 String 數(shù)據(jù)及用戶定義類型外,可以包含任何種類的數(shù)據(jù)。Variant 也可以包含 Empty、Error、Nothing Null等特殊值??梢杂?span lang="EN-US"> VarType 函數(shù)或 TypeName 函數(shù)來決定如何處理 Variant 中的數(shù)據(jù)。

數(shù)值數(shù)據(jù)可以是任何整型或?qū)嵭蛿?shù),負(fù)數(shù)時(shí)范圍從-1.797693134862315E308 -4.94066E-324,正數(shù)時(shí)則從 4.94066E-324 1.797693134862315E308。通常,數(shù)值 Variant 數(shù)據(jù)保持為其 Variant 中原來的數(shù)據(jù)類型。例如,如果把一個(gè) Integer賦值給 Variant,則接下來的運(yùn)算會把此 Variant 當(dāng)成 Integer 來處理。然而,如果算術(shù)運(yùn)數(shù)針對含 Byte、IntegerLong Single 之一的Variant 執(zhí)行,并當(dāng)結(jié)果超過原來數(shù)據(jù)類型的正常范圍時(shí),則在 Variant 中的結(jié)果會提升到較大的數(shù)據(jù)類型。如 Byte 則提升到 Integer,Integer 則提升到 Long,而 LongSingle 則提升為 Double。當(dāng) Variant 變量中有 CurrencyDecimal Double 值超過它們各自的范圍時(shí),會發(fā)生錯(cuò)誤。

可以用 Variant 數(shù)據(jù)類型來替換任何數(shù)據(jù)類型,這樣會更有適應(yīng)性。如果 Variant 變量的內(nèi)容是數(shù)字,它可以用字符串來表示數(shù)字或是用它實(shí)際的值來表示,這將由上下文來決定,例如:

Dim MyVar As Variant

MyVar = 98052

在前面的例子中,MyVar 內(nèi)有一實(shí)際值為 98052 的數(shù)值。像期望的那樣,算術(shù)運(yùn)算子可以對 Variant 變量運(yùn)算,其中包含數(shù)值或能被解釋為數(shù)值的字符串?dāng)?shù)據(jù)。如果用 + 運(yùn)算子來將 MyVar 與其他含有數(shù)字的 Variant 或數(shù)值類型的變量相加,結(jié)果便是一算術(shù)和。

Empty 值用來標(biāo)記尚未初始化(給定初始值)的 Variant 變量。內(nèi)含 Empty Variant 在數(shù)值的上下文中表示 0,如果是用在字符串的上下文中則表示零長度的字符串 ("")。

不應(yīng)將 Empty Null 弄混。Null 是表示 Variant 變量確實(shí)含有一個(gè)無效數(shù)據(jù)。

Variant 中,Error 是用來指示在過程中出現(xiàn)錯(cuò)誤時(shí)的特殊值。然而,不像對其他種類的錯(cuò)誤那樣,程序并不產(chǎn)生普通的應(yīng)用程序級的錯(cuò)誤處理。這可以讓程序員,或應(yīng)用程序本身,根據(jù)此錯(cuò)誤值采取另外的行動??梢杂?span lang="EN-US"> CVErr 函數(shù)將實(shí)數(shù)轉(zhuǎn)換為錯(cuò)誤值來產(chǎn)生 Error 值。

 

⑵ 數(shù)據(jù)類型之間的轉(zhuǎn)換

 

在進(jìn)行VBA編程過程中,用戶可以將一種數(shù)據(jù)類型的數(shù)據(jù)轉(zhuǎn)換成另一種特定類型的數(shù)據(jù)。如:

A=Cstr(2000),則將數(shù)值轉(zhuǎn)換為字符型數(shù)據(jù)。下面列出這些轉(zhuǎn)換函數(shù):

 

函數(shù)名     目標(biāo)類型

——————————

Cbyte       Byte

Cint        Integer

Clng        Long

Csng        Single

Cdbl        Double

Ccur        Currency

Cdate       Date

Cvar        Varriant

——————————

 

⑶ 數(shù)據(jù)類型的對比

 

Access中,有4種不同的編輯環(huán)境需要用戶指定數(shù)據(jù)類型——表設(shè)計(jì)視圖、查詢參數(shù)、VBA代碼、SQL查詢視圖。下表列出數(shù)據(jù)類型與VBA數(shù)據(jù)類型對比。

 

字段數(shù)據(jù)類型                    VBA數(shù)據(jù)類型

——————————————————————

Yes/No                              Boolean

Number(Byte)                        Byte

AutoNumber(Long Integer)            Long

Currency                            Currency

Date/Time                           Date

Number(Double)                      Double

OLE Object                          String

AutoNumber/GVI(同步復(fù)制ID        不支持 

Memro                               string

Number(Single)                      Single

Number(Integer)                     Integer

Text                                String

Hyper Link                          String

不支持                              Variant

——————————————————————

 

2.常量

 

定義常量來代替那些固定不變量的數(shù)字或字符串,可以提高代碼的可讀性和可維護(hù)性。VBA中有一部分常量是系統(tǒng)預(yù)先定義的,可以直接使用。用戶也可以使用自己定義的常量,但在使用之前必須聲明,以便分配內(nèi)存空間。語法如下:

[Public/Private] Const 常量名 [As 數(shù)據(jù)類型] = 表達(dá)式

例如:

Const Pi=3.14159265358979323

Public Const A1 As Integer=6

Const BornDay=#03/23/80#

Private Const A2=”Abcdef258”

 

常量有3個(gè)范圍級別:過程級別(在過程中聲明的)、私有模塊級別(Private)、公共模塊級別(Public)。

Access支持3種類型的常量:

 

◆ 符號常量:需要聲明的常數(shù)都是符號常量。

◆ 固有常量:是Access或引用對象庫的一部分。

◆ 系統(tǒng)定義常量:True、False、Null

 

其中,符號常量可以按上述方法聲明;系統(tǒng)定義常量只有上述三個(gè)。而固有常量則比較復(fù)雜一些,它是系統(tǒng)自動定義的,它由應(yīng)用程序列與控件提供。它采用兩種方法來限定常數(shù):通過前綴(如VBA對象庫的常數(shù)都以Vb開頭,如Vb Tile Horizontal)或通過庫應(yīng)用([Libyan]|[mdul name] Constant)。

用戶可以使用對象瀏覽器來查看所有對象庫中的固有常量列表。具體操作如下:

◆ 單擊數(shù)據(jù)庫窗口【對象】欄下的【模塊】按鈕,再單擊工具欄中的【代碼】按鈕,進(jìn)入模塊代碼窗口。

◆ 單擊代碼窗口工具欄中的【對象瀏覽器】窗口。

◆ 要查看可以使用的常量,在【對象瀏覽器】窗口中的【工程/庫】下拉列表框中選擇【所有庫】選項(xiàng)。此時(shí),在窗口的【類】列表框中將顯示所有引用對象庫中的類。

◆ 在【搜索文字】下拉列表框中輸入“Constant”,然后單擊【對象瀏覽器】工具欄上的【搜索】按鈕,則會在【搜索結(jié)果】列表框中顯示所有固有常量類型。所有的這些固有常量都可以在宏或VBA中使用,用戶可以在任何時(shí)候,在任何允許使用符號常量或用戶自定義常量的地方使用固有常量。

 

Access中主要有以下幾種類型的固有常量:操作常量、DAO常量、事件過程常量、關(guān)鍵字常量、Run Command 方法常量、安全常量、VBA常量和Var Type函數(shù)常量。

 

下面是VBA定義的一些常數(shù),使程序設(shè)計(jì)變得更為簡單。下列常數(shù)可在程序代碼中的任何地方代替實(shí)際值:

Calendar 常數(shù)

常數(shù)      描述

vbCalGreg   0   指出使用的是陽歷。

vbCalHijri  1   指出使用的是伊斯蘭歷法。

 

CallType 常數(shù)

常數(shù)    描述 

vbMethod 1 指出已經(jīng)調(diào)用了一個(gè)方法。 

vbGet 2 指出一個(gè)Property Get 過程。

vbLet 4 指出一個(gè) Property Let 過程。 

vbSet 8 指出一個(gè) Property Set 過程。

 

Color 常數(shù)

常數(shù) 值描述

vbBlack 0x0 黑色

vbRed 0xFF 紅色

vbGreen 0xFF00 綠色

vbYellow 0xFFFF 黃色

vbBlue 0xFF0000 藍(lán)色

vbMagenta 0xFF00FF 紫紅色

vbCyan 0xFFFF00 青色

vbWhite 0xFFFFFF 白色

 

Compiler 常數(shù)

Visual Basic for Applications 定義了一些不能與 #If...Then...#Else 指令一起使用的常數(shù)。這些常數(shù)除了其范圍是全局的;也就是說,除了可在工程中到處應(yīng)用,在功能上與 #If...Then...#Else 指令定義的常數(shù)相同。

16 位開發(fā)平臺上,編譯常數(shù)定義如下:

 

常數(shù) 值描述

Win16 True 指出開發(fā)環(huán)境是 16 位。

Win32 False 指出開發(fā)環(huán)境不是 32 位。

 

32 位開發(fā)平臺上,編譯常數(shù)定義如下:

 

常數(shù) 值描述

Vba6  True  指出開發(fā)環(huán)境是 Visual Basic for Applications, version 6.0

Vba6  False  指出開發(fā)環(huán)境不是Visual Basic for Applications, version 6.0。

Win16 False 指出開發(fā)環(huán)境不是 16 位。

Win32 True 指出開發(fā)環(huán)境是 32 位。

Mac False 指出開發(fā)環(huán)境不是 Macintosh

Win16 False 指出開發(fā)環(huán)境不是 16位的。

Win32 False 指出開發(fā)環(huán)境不是 32位的。

Mac True 指出開發(fā)環(huán)境是 Macintosh。

注意 這些常數(shù)是由 Visual Basic 提供的,所以不能在任何層次中用相同名稱定義自己的常數(shù)。

 

Date 常數(shù)

常數(shù) 值描述

vbUseSystem 0 使用 NLS API 設(shè)置。

vbSunday 1 星期日(缺?。?span lang="EN-US">

vbMonday 2 星期一

vbTuesday 3 星期二

vbWednesday 4 星期三

vbThursday 5 星期四

vbFriday 6 星期五

vbSaturday 7 星期六

 

Dir、GetAttr SetAttr 常數(shù)

常數(shù) 值描述

vbNormal 0 正常的(Dir SetAttr 的缺省值)

vbReadOnly 1 只讀的

vbHidden 2 隱藏的

vbSystem 4 系統(tǒng)文件

vbVolume 8 卷標(biāo)

vbDirectory 16 目錄或文件夾

vbArchive 32 文件自上一次備份后已經(jīng)改變

vbAlias 64 Macintosh上,標(biāo)識符是一個(gè)別名。

 

IMEStatus 常數(shù)

常數(shù) 值描述

vbIMEModeNoControl 0 沒有安裝 IME(缺省)

vbIMEModeOn 1 打開 IME

vbIMEModeOff 2 關(guān)閉 IME

vbIMEModeDisable 3 無效的 IME

vbIMEModeHiragana 4 完整寬度 Hiragana 模式

vbIMEModeKatakana 5 完整寬度 Katakana 模式

vbIMEModeKatakanaHalf 6 半寬度 Katakana 模式

vbIMEModeAlphaFull 7 完整寬度 Alphanumeric 模式

vbIMEModeAlpha 8 半寬度 Alphanumeric 模式

 

Instr、StrComp 常數(shù)

常數(shù) 值描述

VbUseCompareOption  -1 使用Option Compare語句的設(shè)置進(jìn)行比較。  

VbBinaryCompare 0 進(jìn)行二進(jìn)制的比較。

VbTextCompare 1 進(jìn)行文字的比較。

vbDatabaseCompare 2 用于 Microsoft Access(僅限于Windows),進(jìn)行以數(shù)據(jù)庫所含信息為基礎(chǔ)的比較。

 

Keycode 常數(shù)

常數(shù) 值描述

vbKeyLButton 0x1 鼠標(biāo)左鍵

vbKeyRButton 0x2 鼠標(biāo)右鍵

vbKeyCancel 0x3 CANCEL

vbKeyMButton 0x4 鼠標(biāo)中鍵

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 碼相同:

 

常數(shù) 值描述

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 鍵與數(shù)字 0 9 ASCII 碼相同:

 

常數(shù) 值描述

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

 

下列常數(shù)代表數(shù)字鍵盤上的鍵:

 

常數(shù) 值描述

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 (/)

 

下列常數(shù)代表功能鍵:

 

常數(shù) 值描述

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 常數(shù)

常數(shù) 等于描述

vbCrLf Chr(13) + Chr(10) 回車符與換行符結(jié)合

vbCr Chr(13) 回車符

vbLf Chr(10) 換行符

vbNewLine Chr(13) + Chr(10) or, on the Macintosh, Chr(13) 平臺指定的新行字符;適用于當(dāng)前平臺

vbNullChar Chr(0) 值為 0 的字符

vbNullString 值為 0 的字符串 用來調(diào)用外部過程;與長度為零的字符串 ("") 不同

vbObjectError -2147221504 用戶定義的錯(cuò)誤號應(yīng)當(dāng)大于該值,例如:

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 常數(shù)

常數(shù) 值描述

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 關(guān)鍵消息

vbQuestion 32 警告詢問

vbExclamation 48 警告消息

vbInformation 64 通知消息

vbDefaultButton1 0 第一個(gè)按鈕是缺省的(缺省值)

vbDefaultButton2 256 第二個(gè)按鈕是缺省的

vbDefaultButton3 512 第三個(gè)按鈕是缺省的

vbDefaultButton4 768 第四個(gè)按鈕是缺省的

vbApplicationModal 0 應(yīng)用程序形態(tài)的消息框(缺省值)

vbSystemModal 4096 系統(tǒng)強(qiáng)制返回的消息框

vbMsgBoxHelpButton 16384 添加Help按鈕到消息框

VbMsgBoxSetForeground 65536 指定消息框窗口作為前景窗口

vbMsgBoxRight 524288 文本是右對齊的

vbMsgBoxRtlReading 1048576 指定在希伯來語和阿拉伯語系統(tǒng)中,文本應(yīng)當(dāng)顯示為從右到左讀

MsgBox 返回值

常數(shù) 值描述

vbOK 1 按下 OK 按鈕

vbCancel 2 按下 Cancel 按鈕

vbAbort 3 按下 Abort 按鈕

vbRetry 4 按下 Retry 按鈕

vbIgnore 5 按下 Ignore 按鈕

vbYes 6 按下 Yes 按鈕

vbNo 7 按下 No 按鈕

 

QueryClose 常數(shù)

常數(shù) 值描述

vbFormControlMenu 0 用戶從窗體上的Control 菜單選擇Close 命令。

vbFormCode 1 Unload 語句被從代碼中調(diào)用。

vbAppWindows 2 當(dāng)前 Microsoft Windows 操作環(huán)境會話結(jié)束。

vbAppTaskManager 3 Windows Task Manager 正在關(guān)閉應(yīng)用程序。

 

Shell 常數(shù)

常數(shù)    描述 

vbHide 0 窗口是隱藏的,并且焦點(diǎn)被傳遞給隱藏窗口。

vbNormalFocus 1 窗口擁有焦點(diǎn),并且恢復(fù)到原來的大小與位置。

vbMinimizedFocus 2 窗口縮小為圖符并擁有焦點(diǎn)。

vbMaximizedFocus 3 窗口最大化并擁有焦點(diǎn)。

vbNormalNoFocus 4 窗口被恢復(fù)到最近一次的大小與位置。當(dāng)前活動窗口仍為活動窗口。

vbMinimizedNoFocus 6 窗口縮小為圖符。當(dāng)前活動窗口仍為活動窗口。

 

StrConv 常數(shù)

Constant 值 描述

vbUpperCase 1 將字符串轉(zhuǎn)換成大寫字符。

vbLowerCase 2 將字符串轉(zhuǎn)換成小寫字符。

vbProperCase 3 將字符串中每個(gè)詞的第一個(gè)字母轉(zhuǎn)換成大寫。

vbWide 4 將字符串中的窄(單字節(jié))字符轉(zhuǎn)換成寬(雙字節(jié))字符。適用于遠(yuǎn)東地區(qū)。

vbNarrow 8 將字符串中的寬(雙字節(jié))字符轉(zhuǎn)換成窄(單字節(jié))字符。適用于遠(yuǎn)東地區(qū)。

vbKatakana 16 將字符串中的 Hiragana 字符轉(zhuǎn)換成 Katakana 字符;只適用于日文地區(qū)。

vbHiragana 32 將字符串中的 Katakana 字符轉(zhuǎn)換成 Hiragana 字符;只適用于日文地區(qū)。

vbUnicode 64 利用缺省的系統(tǒng)代碼頁將字符串轉(zhuǎn)換成 Unicode (Macintosh 中不可用。)。

vbFromUnicode 128 將字符串由 Unicode 轉(zhuǎn)換成缺省的系統(tǒng)代碼頁 (Macintosh 中不可用。)

 

◆系統(tǒng)顏色常數(shù)

常數(shù) 值描述

vbScrollBars 0x80000000 滾動條顏色

vbDesktop 0x80000001 桌面顏色

vbActiveTitleBar 0x80000002 活動窗口的標(biāo)題欄顏色

vbInactiveTitleBar 0x80000003 非活動窗口的標(biāo)題欄顏色

vbMenuBar 0x80000004 菜單背景色

vbWindowBackground 0x80000005 窗口背景色

vbWindowFrame 0x80000006 窗口框架顏色

vbMenuText 0x80000007 菜單文本顏色

vbWindowText 0x80000008 窗口文本顏色

vbTitleBarText 0x80000009 標(biāo)題、調(diào)整框和滾動箭頭的文本顏色

vbActiveBorder 0x8000000A 活動窗口邊框顏色

vbInactiveBorder 0x8000000B 非活動窗口邊框顏色

vbApplicationWorkspace 0x8000000C 多文檔界面 (MDI) 應(yīng)用程序的背景色

vbHighlight 0x8000000D 控件中選中項(xiàng)目的背景色

vbHighlightText 0x8000000E 控件中選中項(xiàng)目的文本顏色

vbButtonFace 0x8000000F 命令按鈕表面陰影顏色

vbButtonShadow 0x80000010 命令按鈕邊緣陰影顏色

vbGrayText 0x80000011 灰色(無效)文本

vbButtonText 0x80000012 下壓按鈕文本顏色

vbInactiveCaptionText 0x80000013 非活動標(biāo)題文本顏色

vb3DHighlight 0x80000014 3-D 顯示元素的突出顯示顏色

vb3DDKShadow 0x80000015 3-D 顯示元素的最深陰影顏色

vb3DLight 0x80000016 vb3Dhighlight 之外最亮的 3-D 顏色 

vbInfoText 0x80000017 工具提示文本顏色

vbInfoBackground 0x80000018 工具提示背景色

 

VarType 常數(shù)

常數(shù) 值描述

vbEmpty 0 未初始化(缺省值)

vbNull 1 不含任何有效數(shù)據(jù)

vbInteger 2 Integer

vbLong 3 長整數(shù)

vbSingle 4 單精度浮點(diǎn)數(shù)

vbDouble 5 雙精度浮點(diǎn)數(shù)

vbCurrency 6 Currency

vbDate 7 Date

vbString 8 String

vbObject 9 對象

vbError 10 錯(cuò)誤

vbBoolean 11 Boolean 

vbVariant 12 Variant(只用于變體的數(shù)組類型)

vbDataObject 13 數(shù)據(jù)訪問對象

vbDecimal 14 Decimal

vbByte 17 Byte

vbUserDefinedType 36 包含用戶定義類型的變量

vbArray 8192 數(shù)組

 

 

 

3.變量

 

程序中的變量為臨時(shí)在座單元,可存放文字、數(shù)值、日期和對象屬性。每個(gè)變量都有一個(gè)名字,程序通過變量名對變量進(jìn)行存取操作。

 

VBA的變量命名規(guī)則

 

變量名必須以英文字母開頭。

變量名長度不可以超過255個(gè)字符。

除英文字母、數(shù)字、下劃線外,其他字符盡量避免使用。

變量名不能與VBA本身的函數(shù)過程、語句以及方法同名。

變量名在同一作用域內(nèi)不能相同。

 

VBA變量不區(qū)分大小寫。為了便于識別數(shù)據(jù)類型,在給變量或常量命名時(shí),常常采用給變量名或常量名加前綴的方法。在VBA中,有一些約定俗成的常量和變量的命名前綴。如下表:

數(shù)據(jù)類型       前綴

——————————

Byte            Byt

Integer         Int

Long            Lng

Single          Sng

Double          Dbl

Currency        Cur

String          Str

Boolean         Bln

Date            Date

Variant         Vnt

Object          Obj

用戶自定義      Udt

——————————

 

⑵ 變量聲明

 

VBA變量聲明有兩種方法:

◆ 隱性聲明。如果沒有指定變量的類型而使用變量,則此變量默認(rèn)為Variant類型。這種聲明方式不但增加了程序運(yùn)行的負(fù)擔(dān),而且極容易出現(xiàn)數(shù)據(jù)運(yùn)算問題,造成程序出錯(cuò)。
◆ 顯性聲明。語法: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,yVariant類型。

 

⑶ 變量的應(yīng)用范圍

 

變量有三個(gè)范圍級別

◆ 過程級別。在過程內(nèi),只有在聲明此變量的過程中才可使用的變量稱為局部變量。用戶可以使用Dim Static關(guān)鍵字來定義。如:

Dim x As Single

Static y As single

Dim 定義的局部變量只有在它所在的過程運(yùn)行時(shí)才會有值,而Static定義的局部變量在整個(gè)程序運(yùn)行期間均有值,所以它可以作為中間變量保存結(jié)果。

◆ 私有模塊級別

在程序中,公共模塊中的變量對于所有模塊的所有過程均可用,而私有模塊中的變量只對所屬模塊過程可用。

用戶可以在窗體、報(bào)表和標(biāo)準(zhǔn)模塊頂部的聲明部分用DimPrivate定義模塊級的變量。由Dim語句在聲明部分所聲明的變量,其范圍默認(rèn)為私有的。

◆ 公共模塊級別

如果將一個(gè)變量聲明為公共模塊級變量,那么他就可以為工程所有過程調(diào)用。它通過Public來聲明。

 

⑷ 變量的生存期

 

在給變量聲明了應(yīng)用范圍后,變量就有了一個(gè)生存周期,即變量保留數(shù)值的時(shí)間。具體地說,就是變量第一次(聲明時(shí))出現(xiàn)到消失時(shí)的持續(xù)時(shí)間。

Dim語句聲明的過程級別變量將把數(shù)值保留到退出此過程為止。如果該過程調(diào)用了其他過程,則在這些過程運(yùn)行的同時(shí),屬于調(diào)用者過程的變量將保留它的值。

如果用戶希望保存某個(gè)過程局部變量的值,可以用Static聲明。如果過程級別的變量是用Static關(guān)鍵字來聲明的,則只要有代碼正在運(yùn)行,此變量就會保留它的值;而當(dāng)所有代碼都完成運(yùn)行后,變量將不再起作用,所以它的生成周期和模塊級別變量是一樣的。

模塊級別的變量與靜態(tài)變量是不同的,在標(biāo)準(zhǔn)模塊或類模塊中變量會保留它的值直到停止款運(yùn)行代碼。在對象類模塊中,只要仍有一個(gè)屬于此對象類的實(shí)例存在,變量就會一直保留它的值。模塊級別的變量會一直占用內(nèi)存資源,直到重新設(shè)置它們的值,所以應(yīng)只有必要時(shí)才使用它們。

如果在SubFunction語句前面加上Static,則此過程中所有級別的變量值在調(diào)用期間將保留。

 

4.?dāng)?shù)組

   

⑴ 聲明數(shù)組

格式:Public/Private/Static/Dim 數(shù)組名([下標(biāo)] To 上界) [As 數(shù)據(jù)類型]

例如:Public Workers(8) As Integer

Dim Workers(8) As Integer

      Static Workers(8) As Integer

上述例子中,下標(biāo)默認(rèn)為0,上界為8,共9個(gè)元素。也可以人為指定下標(biāo),如:

Dim Workers(1 To 8) As Integer

通??梢酝ㄟ^一個(gè)For循環(huán)處理數(shù)組:

 

Static Numbers(1 To 15) As Integer

Dim I As Integer

For I=1 To 15

  Numbers(I)=30

Next I

 

二維數(shù)組和多維數(shù)組

可以如下定義二維數(shù)組和多維數(shù)組:格式:

Dim 數(shù)組名([下標(biāo)] To 上界,[[下標(biāo)] To 上標(biāo),……] [As 數(shù)據(jù)類型]

例如:

Static Aa(19,19) As Integer

Static Aa(1 To 20,1 To 20) As Integer

下面將值20賦給上述數(shù)組:

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

多維數(shù)組的語法結(jié)構(gòu)同二維數(shù)組大致一樣,僅在聲明時(shí)多了幾項(xiàng)。

 

動態(tài)數(shù)組

如果在程序運(yùn)行之前不能肯定數(shù)組的大小,可以使用動態(tài)數(shù)組,建立動態(tài)數(shù)組的步驟如下:

聲明空維表:Dim Array()

然后用ReDim語句配置數(shù)組個(gè)數(shù)。ReDim語句聲明只能用在過程中,它是可執(zhí)行語句,可以改變數(shù)組中元素的個(gè)數(shù),但不能改變數(shù)組的維數(shù)。每次用ReDim配置數(shù)組時(shí),原有數(shù)組的值全部清零。請看如下例子:

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.運(yùn)算符

 

⑴ 算術(shù)運(yùn)算符

+   -   *   /   整除\   乘方^   求余Mod

 

⑵ 連接運(yùn)算符

連接運(yùn)算就是將兩個(gè)表達(dá)式連接在一起。+&都能完成這個(gè)工作,但應(yīng)盡量使用&以。如:

A1=#7/1/97#

A2=”香港回歸祖國

A3=A1&A2

則變量A3的值為“97-7-1香港回歸祖國

 

⑶ 比較運(yùn)算符

大于>   小于<   大于等于>=  小于等于<=  等于=   不等于<>

 

⑷ 邏輯運(yùn)算符

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

 

⑸ 運(yùn)算符的優(yōu)先級

運(yùn)算符的優(yōu)先級順序?yàn)椋核阈g(shù)運(yùn)算、連接運(yùn)算、比較運(yùn)算、邏輯運(yùn)算。

 

 

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

 

當(dāng)條件表達(dá)式僅有一個(gè)測試變量時(shí),使用Select Case結(jié)構(gòu)更有效。其語法如下:

Select Case<測試條件>

  Case <結(jié)果值1>

    <程序代碼1>

  [Case <結(jié)果值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.循環(huán)語句

 

Do…Loop

   

通過Do來執(zhí)行循環(huán),有如下四種格式。其中While是條件為真時(shí)循環(huán),Until是條件為假時(shí)循環(huán)。

 

格式一:

 

Do While<條件表達(dá)式>

<循環(huán)代碼>

Loop

 

例如:

 

Sub Command1.Click()

  Dim I As Intger

    I=1

  Do While I<=20

    Print I

  I=I+1

  Loop

End End

 

格式二:

 

Do

<循環(huán)代碼>

Loop While<條件表達(dá)式>

 

Sub Command1.Click()

  Dim I As Intger

    I=1

  Do

    Print I

  I=I+1

  Loop While I<=20

End End

 

格式三:

 

Do Until<條件表達(dá)式>

<循環(huán)代碼>

Loop

 

例如:

 

Sub Command1.Click()

  Dim I As Intger

    I=1

  Do Until I<=20

    Print I

  I=I+1

  Loop

End End

 

格式四:

 

Do

<循環(huán)代碼>

Loop Until<條件表達(dá)式>

 

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 終值學(xué)者[Step 步長]

  <循環(huán)體>

Next [變量]

 

例子:

 

For I=1 To 10 Step 1

  Print 2^I

Next I

 

While…Wend

格式:

 

While<條件表達(dá)式>

  <循環(huán)體>

Wend

 

例子:

 

N=1

While N<=5

  Beep

Wend

 

⑷ 循環(huán)的退出

 

可以通過Exit退出循環(huán)。例如:

 

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代碼,如同窗體是存放控件對象的容器一樣,模塊是代碼的容器。

 

整個(gè)模塊窗口分為兩個(gè)部分:通用區(qū)和過程區(qū)。通常模塊由以下一些部分組成:

 

聲明部分  用戶可以在這部分定義常量、變量、用戶自定義類型和外部過程,在模塊中,聲明部分與過程部分是分割開來的。用戶在聲明部分中設(shè)定的常量和變量是全局性的,聲明部分 中的內(nèi)容可以被模塊中的所有過程調(diào)用。

 

事件過程  事件過程是一種自動執(zhí)行的過程,用來對由用戶或程序代碼啟動的事件或系統(tǒng)觸發(fā)的事件做出響應(yīng)。事件過程包括函數(shù)過程和子過程。

 

從與其他對象的關(guān)系來看,模塊又可分為兩種基本類型:

 

類模塊  類模塊是指包含新對象定義的模塊。

 

標(biāo)準(zhǔn)模塊  標(biāo)準(zhǔn)模塊是指存放整個(gè)數(shù)據(jù)庫都可用的子程序和函數(shù)的模塊。標(biāo)準(zhǔn)模塊包括通用過程和常用過程,通用過程不與任何對象相關(guān)聯(lián),常用過程可以在數(shù)據(jù)庫的任何地方運(yùn)行。

 

過程

 

一個(gè)過程就是一個(gè)VBA代碼單元,它包含一系列的語句和方法,以便執(zhí)行或計(jì)算數(shù)值。

過程有兩種:一種是子過程,另一種是函數(shù)過程。

子過程用來執(zhí)行一個(gè)操作或一系列操作,但是它不返回值。函數(shù)過程將返回一個(gè)值,并可傳遞參數(shù)。

 

 

 


二、創(chuàng)建VBA程序

 

1VBA的編程環(huán)境

 

通過單擊數(shù)據(jù)庫窗口【對象】欄下的【模塊】按鈕,選擇需要編寫或修改的模塊,即彈出一個(gè)編寫VBA程序的窗口,如下圖:

 

2.編寫VBA語句

 

VBA語句是一個(gè)完整的結(jié)構(gòu)單元,它代表一種操作、聲明或定義。一條語句通常占一行,用戶也可以使用冒號在一行中包含多條語句。如果一條語句過長,用戶可以使用行繼續(xù)符(下劃線)結(jié)束,在下一行的接著寫。

VBA中語句分為三種:

◆ 聲明語句:在聲明語句中,用戶可以給變量、常數(shù)或程序取名稱,并且指定數(shù)據(jù)類型。

◆ 賦值語句:用于指定變量或變量的值,指定變量為某一表達(dá)式。

◆ 執(zhí)行語句:在VBA語句中,一條執(zhí)行語句可以執(zhí)行初始化操作,也可以執(zhí)行一個(gè)方法或函數(shù),并且可以循環(huán)或從代碼塊中分支執(zhí)行。

 

3.創(chuàng)建事件過程

 

下面是一個(gè)綜合性的例子:

 

 

代碼如下:

 

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("應(yīng)繳稅金為" & Tax & "確定按是,不確定按否查看幫助", 4 + 48)

If cont = 6 Then

Else

  MsgBox ("不理解也得理解?。?!")

End If

End Sub

 

4.創(chuàng)建過程

 

事件過程是VBA編程的核心,但有時(shí)還需要利用VBA中的兩類通用過程:Function過程和Sub過程,對事件過程加以改進(jìn),以提高代碼的可讀性和可維護(hù)性。

 

Function過程

 

如果用戶需要在窗體或報(bào)表中重復(fù)使用某一表達(dá)式,可以使用一個(gè)函數(shù)過程代替這個(gè)表達(dá)式。

例如:

 

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過程的定義類似,它們的重要區(qū)別在于,Sub過程沒有返回值,不能用于表達(dá)式中。

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程序?qū)?shù)據(jù)庫的操作

 

 

1Microsoft JetODBCDirect工作區(qū)模型

 

Microsoft Jet工作區(qū)

 

VB可以簡單地打開一個(gè)現(xiàn)存的數(shù)據(jù)庫,或是自己建立一個(gè)新的數(shù)據(jù)庫。數(shù)據(jù)庫類型可以是Microsoft Jet數(shù)據(jù)庫(.mdb)、ISAM(索引查找訪問模式,如Paradox數(shù)據(jù)庫),也可以是通過 Microsoft Jet數(shù)據(jù)庫引擎連接的ODBC數(shù)據(jù)庫。

 

可以利用對象變量或DDL特性來改變數(shù)據(jù)庫結(jié)構(gòu)。例如下面的代碼把一個(gè)新的字段對象加入到現(xiàn)存的數(shù)據(jù)庫表中:

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具有進(jìn)行數(shù)據(jù)處理、事務(wù)處理、數(shù)據(jù)備份、安全處理等工作的強(qiáng)大功能。

 

ODBCDirect工作區(qū)模型

 

ODBCDirect工作區(qū)模型主要通過連接數(shù)據(jù)庫、查詢設(shè)計(jì)、

 

2.使用DAO操作數(shù)據(jù)

 

打開數(shù)據(jù)庫:

 

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數(shù)據(jù)庫中的St1表的Age字段已增一更新")

  dbExam.Close

End Sub

 

根據(jù)提示更新數(shù)據(jù)

 

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數(shù)據(jù)庫中的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("正在添加新記錄,繼續(xù)嗎?", 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("正在添加新記錄,繼續(xù)嗎?", 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("正在刪除最后一條記錄,繼續(xù)嗎?", vbYesNo)

    If intCommand = vbYes Then

      .Delete

      MsgBox ("st1表已刪除一條記錄")

    Else

      MsgBox ("已放棄刪除記錄")

    End If

  End With

  dbExam.Close

End Sub

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VBA代碼集錦-常量與變量的定義及使用
跟煙花入門VBA之12:常量
VBA系列講座(4):理解變量
定義VB數(shù)據(jù)類型常識
VB6編程基礎(chǔ)知識總結(jié)
計(jì)算機(jī)技術(shù)基礎(chǔ)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服