1. 程式人生 > >Excel中VBA程式設計學習筆記(二)

Excel中VBA程式設計學習筆記(二)

7、VBA中的資料型別

據型別(名稱)

大小(位元組)

描述

Boolean

2

邏輯值True或False

Byte

1

0到255的整數

Integer

2

–32,768到32,767的整數

Long

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.79769313486231E308

Currency

8

(放大的整數(譯者:整數除以10000得到的數值,參見VBA幫助))使用在定點計算中:

–922,337,203,685,477.5808到922,337,203,685,477.5807

Decimal

14

+/–79,228,162,514,264,337,593,543,950,335沒有小數點;

+/–7.9228162514264337593543950335小數點後有28位數字;

最小的非0數字是

+/–0.0000000000000000000000000001

Date

8

從100年1月1日到9999年12月31日的日期

String(變長字串)

10位元組+字串長度

變長字串最多可包含大約 20 億 ( 2^31)個字元。

String(定長字串)

字串長度

定長字串最多可包含大約65,400 個字元。

Object

4

物件變數用來引用Excel中的任何物件

Variant(帶數字)

16

最高範圍到Double型別的任何數值

Variant(帶字母)

22位元組+字串長度

和變長字串的範圍一樣

使用者定義型別

(使用Type)

成員所需的數值

每個成員的範圍和它的資料型別的範圍一致

常用資料型別的簡寫

integer

%

long

&

single

!

double

#

string

$

currency

@

 

自定義資料型別

使用Type關鍵字自定義資料型別

Type student

name As String

age As Integer

address As String

End Type

Private Sub A()

    Dim student1 As student

    student1.name = "小紅"

    student1.age = 22

    student1.address = "湖北武漢"

    MsgBox ("姓名:" & student1.name & ";年齡:" & student1.age & ";住址:" & student1.address)

End Sub

8、VBA中內建常量的使用

Private Sub B()

    With Sheet3.Range("A1")

    .Font.Color = vbRed

    .Font.Size = 12

    .Font.Bold = True

    .Font.Italic = False

End With

Cells(1, 1).Font.ColorIndex = 3 '字的顏色號為3 紅色

Cells(1, 1).Interior.ColorIndex = 3 ' 背景的顏色為3 紅色

Cells(2, 1).Font.Color = RGB(0, 255, 0) '字的顏色綠色

Cells(2, 1).Interior.Color = RGB(0, 0, 255) '背景的顏色藍色

End Sub

常用顏色常量

常量

描述

vbBlack

黑色

vbRed

紅色

vbGreen

綠色

vbYellow

黃色

vbBlue

藍色

vbWhite

白色

9、陣列

dim arr(1 to 10) as integer         ‘宣告10個元素的一維陣列,下表索引從1開始

dim arr(5)          ‘宣告5個元素的一維陣列,型別為Variant

dim  arr(3) as string          ‘宣告3個元素的陣列,資料型別為string

使用示例:

【例1】

Private Sub B()

   Const N As Integer = 10

   Dim i As Integer

   Dim arr(1 To 10) As String

   For i = 1 To N

    arr(i) = -2 * i

   Next

   For i = 1 To N

    Debug.Print (arr(i))

   Next

End Sub

 

【例2】

Sub test()

    Rem 定義一維陣列

    arr1 = [{"武漢","廣州","長沙"}]

    arr2 = Application.Transpose([{1;2;3;4}])

    arr3 = Array(1, 2, 3, 4) '下標從0開始

   

    Rem 定義二維陣列

    arr4 = [{1;2;3;4}]  '4*1維陣列

    arr5 = [{"張三",98;"李四",79;"王武",80}]    '3*2維陣列

    arr6 = Array(Array("張三", "李四", "王武"), Array(98, 79, 80)) '下標從0開始

End Sub

              

【例3】改變陣列大小

Sub cc()

Dim Arr

'測試一維

  ReDim Arr(1 To 3)

  Arr(1) = "測試"

  ReDim Preserve Arr(1 To 4)

  Arr(4) = "繼續測試"

  Debug.Print Arr(1) & "-" & Arr(4)

'測試二維

  ReDim Arr(1 To 2, 1 To 5)   '重置陣列空間,並清除原有內容

  Arr(1, 1) = "測試"    '設定內容

  Arr(1, 5) = "測試1"

  ReDim Preserve Arr(1 To 2, 1 To 3)    '更改空間大小,並保留已輸入的內容

  '由於空間被改小,所以 arr(1,5) 的內容將不存在

 

  Arr(2, 3) = "測試2"

  ReDim Preserve Arr(1 To 2, 1 To 6)    '再次更改空間大小,由於是增加空間,原有的內容都會被保留下來

  Arr(2, 6) = "測試3"

 

'測試修改非最未維空間

  ReDim Preserve Arr(1 To 5, 1 To 6)   '修改第一維空間大小,提示下標越界

'測試增加陣列維數

  ReDim Preserve Arr(1 To 2, 1 To 6, 1 To 3)  '增加陣列維數,提示下標越界

 

  '使用了 Preserve 關鍵字,就只能重定義陣列最末維的大小,且不能改變維數的數目

  '例如,如果陣列就是一維的,則可以重定義該維的大小,因為它是最末維,也是僅有的一維。 _

  不過,如果陣列是二維或更多維時,則只有改變其最末維才能同時仍保留陣列中的內容。

End Sub

在宣告陣列時,不使用 () 和 使用 () 的區別:

Sub CCC()

Dim Arr, Brr(), Crr(), Drr()

  ReDim Preserve Arr(1 To 5)  '由於變數 Arr 在宣告時沒有設定為陣列型別,這裡將提示 型別不匹配

 

  ReDim Preserve Brr(1 To 5)  'Brr 為陣列型別,這裡通過

 

  Crr = Sheets(1).Range("A1:B1")    '提示 型別不匹配錯誤

  Crr = Sheets("Sheet1").Range("A1:B1")    '提示 型別不匹配錯誤

 

  Crr = Sheet1.Range("A1:B1")   '通過

  Drr = Range("A1:B1")          '通過

End Sub

10、運算子與表示式

運算子

含義

mod

取餘數運算

^

指數運算子

>=

大於或等於

<=

小於或等於

<>

不等於

like

按樣式比較字串

is

用來比較兩個物件的引用常量

and

邏輯與

or

邏輯或

not

邏輯非

xor

邏輯異或

eqv

邏輯等,兩表示式相等時值為真

imp

邏輯隱含

區域運算子產生包括在兩個引用之間的所有單元格的引用,例(B1:B5)

,(逗號)

聯合運算子將多個引用合併為一個引用,例(sum(B2:B5,D2:D5))

 (空格)

交叉運算子產生對兩個引用共有位置的單元格的引用,例(B1:D7 C3:C9)

說明:

(1)邏輯運算子優先順序次序(從高到低):

not->and->or->xor->eqv->imp

處於相同優先順序則從左向右運算.

(2)字串的連線可以使用”+”或者”&”.

11、使用MsgBox函式進行輸出

MsgBox用法:

MsgBox(prompt[,buttons] [,title] [,helpfile,context])

引數說明:

(1)prompt為要顯示的內容,此引數必須要,其它引數都可以省去。Chr(13)表示回車符,Chr(10)表示換行符,Chr(13)&Chr(10)表示回車符與換行符的組合。

(2)buttons表示對話方塊顯示的按鈕和圖示.

按鈕取值如下

常量

說明

0

vbOkOnly

“確定按鈕”

1

vbOkCancel

“確定”和”取消”按鈕

2

vbAbortRetryIgnore

“終止”、”重試”和”忽略”按鈕

3

vbYesNoCancel

“是”、”否”和”取消按鈕”

4

vbYesNo

“是”和”否”按鈕

5

vbRetryCancel

“重試”和”取消”按鈕

圖示取值如下

常量

說明

16

vbCritical

停止圖示

32

vbQuestion

問號圖示

48

vbExcalmation

感嘆號圖示

64

vbInformation

資訊圖示

對話方塊設定預設按鈕

常量

說明

0

vbDefaultButton1

指定第一個按鈕為預設按鈕

256

vbDefaultButton2

指定第二個按鈕為預設按鈕

512

vbDefaultButton3

指定第三個按鈕為預設按鈕

(3)title為對話方塊的標題.

(4)helpfile為字串表示式,與context配個使用,context為數值表示式.

MsgBox返回值如下:

返回值

常量

說明

1

vbOk

“確定”按鈕

2

vbCancel

“取消”按鈕

3

vbAbort

“終止”按鈕

4

vbRetry

“重試”按鈕

5

vbIgnore

“忽視”按鈕

6

vbYes

“是”按鈕

7

vbNo

“否”按鈕

 

【例1】

Private Sub b()

   Dim a, b, res As Integer

   a = 2 ^ 3

   b = 25 Mod 7

   res = MsgBox("第一個計算機結果為:" & a & vbCrLf & "第二個計算結果為:" & b, 1 + 64 + 0, "計算結果")

   If res = 1 Then

     MsgBox ("你點選了確定")

   Else

     MsgBox ("你點選了取消")

   End If

End Sub

注:

(1)在上面第一次使用MsgBox中,1+64+0表示使用“確定”和“取消”按鈕,圖示為“資訊圖示”,設定第一個按鈕為預設按鈕。

(2)可以使用vbCrlf常量表示換行符.

同時,還可以使用常量vbTab來插入一個製表符分隔列,達到使訊息框中各列對齊的效果。下例用一個訊息框顯示當前工作表中A1至F11單元格區域中的內容,結果如圖4所示。
 

【例2】

Sub test()

    Dim msg As String

    Dim r As Long, c As Long

    msg = ""

    For r = 1 To 11

        For c = 1 To 6

            msg = msg & Cells(r, c) & vbTab

        Next c

        msg = msg & vbCrLf

    Next r

    MsgBox msg, vbInformation

End Sub

  圖4
注:MsgBox函式最多隻能接受1023個字元,即限制了可以在訊息框中顯示內容的長度。