VBA - 使用二维数组的值填充单元格时出错
Posted
技术标签:
【中文标题】VBA - 使用二维数组的值填充单元格时出错【英文标题】:VBA - Error when using values of a 2D array to fill cells 【发布时间】:2016-08-20 18:19:43 【问题描述】:我在 VBA 中使用一个数组来遍历定义的 10x10 范围,找到其中的 5 个填充单元格中的每一个,并为每个单元格分配一个列、行、列偏移量、行偏移量和颜色索引,使用 10x5 数组。
一旦找到填充的单元格,它就会使用其列/行和适当的偏移量获得一个新位置,擦除原来找到的单元格并填充新的单元格。
但是,当我尝试使用新单元格的数组值来填充它时,我收到 1004 错误 - 应用程序定义/对象定义错误。 p>
这是我正在使用的代码:
Sub FindCells()
Dim i As integer, j As Integer
Dim c As Range
Dim NewX As Integer, NewY As Integer
'this is the array I'm using
Dim Molecules() As Variant
ReDim Molecules(1 To 5, 1 To 5) '1 to 5 - number of filled cells
'1 to 5 - positions, offsets and color index
For i = 1 To UBound(Molecules)
For j = 1 To UBound(Molecules, 2)
For Each c In Worksheets("Main Screen")
If c.Interior.ColorIndex <> xlNone Then
Randomize
dX = Int((H - L + 1) * Rnd() + L) 'speed vector x
dY = Int((H - L + 1) * Rnd() + L) 'speed vector y
Molecules(i, 1) = c.Column
Molecules(i, 2) = c.Row
Molecules(i, 3) = dX
Molecules(i, 4) = dY
Molecules(i, 5) = c.Interior.ColorIndex
'new position of the cells
NewX = Molecules(i, 1) + Molecules(i, 3)
NewY = Molecules(i, 2) + Molecules(i, 4)
End If
Next c
'the array gets the new position values
Molecules(i, 1) = NewX
Molecules(i, 2) = NewY
'now color the new found cells
Cells(Molecules(i, 2), Molecules(i, 1)).Interior.ColorIndex = Molecules(i, 5)
Next j
i = i + 1
Next i
End Sub
尝试使用数组的值作为新找到的单元格的地址时出错。代码有什么问题?
感谢您的帮助。
【问题讨论】:
这开始感觉像是一项家庭作业***.com/questions/38819421/… 【参考方案1】:你需要声明一些东西,以便 c 知道它需要查看。
例如:
Dim rCell as Range
for each rCell in c.Cells
【讨论】:
【参考方案2】:我没有通过我的电脑查看它,但我注意到以下内容:
For Each c In Worksheets("Main Screen")
应该是
For Each c In Worksheets("Main Screen").Cells
i = i + 1
应该被删除,因为它在已经更新迭代器的 For i = 1 To UBound(Molecules)
循环中
Cells(Molecules(i, 2), Molecules(i, 1)).Interior.ColorIndex = Molecules(i, 5)
在For j = 1 To UBound(Molecules, 2)
循环内,它在每次迭代时产生相同的结果,因为它仅依赖于i
变量:看起来它应该从该循环中取出并放在外部循环中。
【讨论】:
@Toffes:你度过难关了吗?以上是关于VBA - 使用二维数组的值填充单元格时出错的主要内容,如果未能解决你的问题,请参考以下文章