在上一课中,我们研究了可以在其中写入某些数据的变量,但它们不能包含多个值。为了解决这个限制,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