分享

Excel中VBA编程学习笔记(二)

 hdzgx 2019-11-24

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个字符,即限制了可以在消息框中显示内容的长度。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多