使用VBA填充来自Excel表列的值的一维数组

下面的代码是为了将Excel表中的列读入数组,然后可以用来确定每个“项目”是否属于环境“组”,如果是,将项目编号和美元值添加到另一个数组。 我有我的代码的一些问题,并一直在search互联网和StackOverflow,但已经能够find处理Excel表使用VBA很less的信息。 我正在使用Excel 2010。

Sub UpdateProjectsAndCharges() 'Define arrays to be used Dim projectArray() As Variant Dim uniqueProjectArray(100) As Variant Dim dollarValue() As Variant Dim envProjectArray(100) As Variant Dim envDollarValue(100) As Double Dim cumulativeCosts(100) As Double 'Define all tables in this sheet as list objects Dim UnitsValues As ListObject Dim ChargingTracking As ListObject 'Define counters to be used Dim counter As Integer Dim counter2 As Integer 'Set variables for each table in sheet Set UnitsValues = Sheets("Cluster Data").ListObjects("UnitsValues") Set ChargingTracking = Sheets("Cluster Data").ListObjects("ChargingTracking") 'Find last row in table With Sheets("Cluster Data") lastRow = Cells(Rows.Count, 1).End(xlUp).Row End With 'Define variables to be used in loops Dim userGroup As Variant Dim project As Variant Dim Value As Variant 'Set arrays to respective columns from UnitsValues table userGroups = Range("UnitsValues[Group]") projectArray = Range("UnitsValues[Project]") dollarValue = Range("UnitsValues[Dollar Value]") 'Redefine length of arrays to number of rows in table ReDim Preserve projectArray(lastRow) ReDim Preserve dollarValue(lastRow) 'Set counter values counter = 1 counter2 = 1 For Each userGroup In userGroups project = projectArray(counter) Value = dollarValue(counter) If userGroup = "Environment" Then envProjectArray(counter2) = project envDollarValue(counter2) = Value counter2 = counter2 + 1 MsgBox ((envProjectArray(counter2) & " " & envDollarValue(counter2))) End If counter = counter + 1 Next userGroup 

我正在接收这些行的“下标超出范围”错误:

 project = projectArray(counter) Value = dollarValue(counter) 

我查了一下错误,并认为这些行可能会解决这个问题:

 ReDim Preserve projectArray(lastRow) ReDim Preserve dollarValue(lastRow) 

现在,我正在接受上述相同的错误,并已经没有想法如何解决错误。 我怀疑这是因为我把一个范围分配到一个数组中,但我不确定。

更改:

 project = projectArray(counter) Value = dollarValue(counter) 

 project = projectArray(counter, 1) Value = dollarValue(counter, 1) 

从工作表中读取的数组总是多维的,即使你只有1列。

在这种情况下,您每次都指定该列为1。