TOP

VBA-第 6.2 课。数据类型 (Variables)

YouLibreCalc for Excel logo

在上一课中,我们研究了可以在其中写入某些数据的变量,但它们不能包含多个值。为了解决这个限制,VBA 中有可以存储多个值的数组。


以下是不同数组的一些示例:

Sub variables()
    '声明变量的示例
    Dim var1 As String
    
    '声明一维数组的示例
    Dim array1(4) As String
    
    '声明二维数组的示例
    Dim array2(4, 3) As String
    
    '声明 3 维数组的示例
    Dim array3(4, 3, 2) As String
End Sub

一维数组

Dim array1(4) As String

一维数组可以被认为是由一列组成的表。数组array1(4)是一个一维数组,可以容纳5条记录。为什么是5?因为数组中的记录数从零开始(0、1、2、3、4)。

现在让我们考虑一个二维数组:

Dim array2(4, 3) As String

它看起来已经像一个 5 行 4 列的表格:

'为彩色单元格赋值
array2(0, 0) = “红细胞值”
array2(4, 1) = “绿色细胞的价值”
array2(2, 3) = “蓝色单元格中的值”

常数

与变量一样,常量可以用来存储值,但不同的是值不能改变。我们可以添加一个常量以避免重复值,例如 13.14:

Sub const_example()
    Cells(1, 1) = Cells(1, 2) * 13.14
    Cells(2, 1) = Cells(2, 2) * 13.14
    Cells(3, 1) = Cells(3, 2) * 13.14
    Cells(4, 1) = Cells(4, 2) * 13.14
    Cells(5, 1) = Cells(5, 2) * 13.14
End Sub

这使得代码更容易理解和编辑。它还允许您非常简单地更改常量的值:

Sub const_example()
   '声明常量+赋值
    Const ANNUAL_RATE As Double = 13.14
   
    Cells(1, 1) = Cells(1, 2) * ANNUAL_RATE
    Cells(2, 1) = Cells(2, 2) * ANNUAL_RATE
    Cells(3, 1) = Cells(3, 2) * ANNUAL_RATE
    Cells(4, 1) = Cells(4, 2) * ANNUAL_RATE
    Cells(5, 1) = Cells(5, 2) * ANNUAL_RATE
End Sub

变量的范围

如果变量在过程开始处声明 (Sub),则它只能在该过程中使用。执行过程后,变量的值将不再可用。

Sub procedure1()
   Dim var1 As Integer
   '=> 该变量仅在本程序中有效
End Sub

Sub procedure2()
   '=> var1 不能在这里使用
End Sub

为了在任何模块过程中使用变量,我们只需要在模块的最开始声明它。如果您声明这样的变量,则该变量将一直可用,直到工作簿关闭为止。

Dim var1 As Integer

Sub procedure1()
   '=> var1 可以在这里使用
End Sub

Sub procedure2()
   '=> var1也可以在这里使用
End Sub

如果您想在本书的所有模块中使用相同的变量,则只需将前面示例中的 Dim 替换为 Global 即可:

Global var1 As Integer

要在执行变量出现的过程后使用变量,请将 Dim 替换为 Static:

Sub procedure1()
    Static var1 As Integer
End Sub

要使用过程中所有变量的值,请在 Sub 之前添加 Static:

Static Sub procedure1()
    Dim var1 As Integer
End Sub

创建您自己的变量类型

以下是如何创建自己的类型的快速示例:

 '创建变量类型
 Type customers
    last_name As String
    first_name As String
 End Type
   
 Sub variables()
    '变量的声明
    Dim cust1 As customers
   
    '为 cust1 赋值
    cust1.last_name = "Smith"
    cust1.first_name = "John"
   
    '使用示例
    MsgBox cust1.last_name & " " & cust1.first_name
 End Sub