Arrays 与范围相等的VBA数组

Arrays 与范围相等的VBA数组,arrays,vba,excel,Arrays,Vba,Excel,只是一个关于VBA的简单问题。我有这段代码 Dim colEmployees As New Collection Dim recEmployee As New clsEmployee Dim LastRow As Integer, myCount As Integer Dim EmpArray As Variant LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row EmpArray = ActiveShee

只是一个关于VBA的简单问题。我有这段代码

Dim colEmployees As New Collection
Dim recEmployee As New clsEmployee
Dim LastRow As Integer, myCount As Integer
Dim EmpArray As Variant

LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
EmpArray = ActiveSheet.Range(Cells(1, 1), Cells(LastRow, 4))
这个在电子表格上

现在我已经读了很多书来了解数组是如何工作的,我看到了如下示例

Dim myArray As Variant
Dim myArray (1 to 10, 1 to 20)
myArray = Array(“Name”, “Address”, “Phone”, “Email”)
我完全理解它们,但当你有一个这样相等的数组

EmpArray = ActiveSheet.Range(Cells(1, 1), Cells(LastRow, 4))
如何将数据实际保存在一维数组(如EmpArray)中?行不需要一个维度,列不需要一个维度吗?我的意思是数组将如何实际存储数据,顺序是Tracy、Bill、16511509等等,。。。。或者特蕾西,1651,25,45岁?一般来说,在数组中存储范围,尤其是一维数组,对我来说真的很奇怪。我的三本VBA书没有深入探讨这个问题

如果它是一个二维数组,那么代码怎么可能继续如下所示:

Sub EmpPayCollection()
Dim colEmployees As New Collection
Dim recEmployee As New clsEmployee
Dim LastRow As Integer, myCount As Integer
Dim EmpArray As Variant

LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
EmpArray = ActiveSheet.Range(Cells(1, 1), Cells(LastRow, 4))

For myCount = 1 To **UBound(EmpArray)**
Set recEmployee = New clsEmployee
With recEmployee
.EmpName = EmpArray(myCount, 1)
.EmpID = EmpArray(myCount, 2)
.EmpRate = EmpArray(myCount, 3)
.EmpWeeklyHrs = EmpArray(myCount, 4)
colEmployees.Add recEmployee, .EmpID
End With
Next myCount
MsgBox “Number of Employees: “ & colEmployees.Count & Chr(10) & _
“Employee(2) Name: “ & colEmployees(2).EmpName
MsgBox “Tracy’s Weekly Pay: $” & colEmployees(“1651”).EmpWeeklyPay
Set recEmployee = Nothing
End Sub

为什么它使用UBound而没有明确说明所选的尺寸?我知道这是可选的。。。但是你能把这个因素也考虑到你的答案中吗?

它不是将数据存储为一维数组,而是将其存储为基于1的二维数组。包含多个单元格的区域的value属性返回二维数组值在此处是隐式的,因为它是区域的默认属性。因此,在您的示例中,数组如下所示:

Tracy   1651    25  45
Bill    1509    25  50
第一个维度指定行,第二个维度指定列,类似于单元对象


这回答了你的问题吗?

先生,你说的……基于1的二维……是什么意思?我的意思是,它是一个二维数组,数组的下限从1开始,而不是0,先生,很抱歉这么长时间我差点就搞定了,我只是做了一个小调整,重新编辑了一点帖子,这样我就可以完整地解决我的问题。如果省略可选的维度参数,Ubound默认为第一个维度。它的功能与myCount=1到UBoundEmpArray的功能相同,因此代码在第一个维度(即行)中循环