我是excel的VBA新手,我编写了将单元格从单元格复制到数组的代码。当我运行时出现运行时错误。我不知道什么是错的。
Sub DistSystem()
Dim count As Integer
Dim i As Integer
Dim array_rank() As Variant
Dim array_city() As Variant
Dim array_assign() As Variant
count = Sheets("111").Range("Y2").Value
For i = 0 To count
array_city(i) = Range("A" & i).Value
array_rank(i) = Range("E" & i).Value
array_assign(i) = Range("F" & i).Value
Next
For i = 1 To 10
MsgBox array_rank(i, 1)
Next
End Sub
答案 0 :(得分:3)
我怀疑你会在多个地方出现战斗错误。
此部分代码有两个重要问题
array_city(i) = Range("A" & i).Value
array_rank(i) = Range("E" & i).Value
array_assign(i) = Range("F" & i).Value
首先,您尝试将值分配给没有任何维度的数组。你删除了数组,但你让它们无量纲。在尝试为数组赋值
之前,需要定义尺寸像
这样的东西Redim array_city(1 to count)
接下来,当Range("A" & i)
的值为零时,您尝试从i
获取值。 Cell "A0"
不存在,也会引发错误。
因此,要编写代码,您需要进行一些更改:
Sub DistSystem()
Dim count As Integer
Dim i As Integer
Dim array_rank() As Variant
Dim array_city() As Variant
Dim array_assign() As Variant
count = Sheets("111").Range("Y2").Value
Redim array_rank(1 to count)
Redim array_city(1 to count)
Redim array_assign(1 to count)
For i = LBound(array_rank) To UBound(array_rank)
array_city(i) = Range("A" & i).Value
array_rank(i) = Range("E" & i).Value
array_assign(i) = Range("F" & i).Value
Next
For i = 1 To 10
MsgBox array_rank(i)
Next
End Sub
但是,您将如何将值读入数组变得更加复杂。您可以直接将整个范围读入数组
Sub DistSystem()
Dim count As Integer
Dim i As Integer
Dim array_rank As Variant 'Notice the arrays are not longer declared with ()
Dim array_city As Variant ' -> this is necessary
Dim array_assign As Variant
count = Sheets("111").Range("Y2").Value
array_city = Range("A1:A" & count).Value
array_rank = Range("E1:E" & count).Value
array_assign = Range("F1:F" & count).Value
For i = 1 To 10
MsgBox array_rank(i, 1)
Next
End Sub
生成的数组为2维,Row
值为第一维,列为第2维。由于所有范围都是一列,您可以通过调用array_rank(Row,1)
或array_city(Row,1)
或array_assign(Row,1)
来访问任何值。