我在VBA中使用数组来循环通过定义的10x10范围,找到其中的5个填充单元格,并分配列,行,列偏移量,行偏移量和每个单元格的颜色索引,使用10x5数组。
一旦找到一个已填充的单元格,它将使用其列/行获得一个具有适当偏移量的新位置,擦除原始发现的单元格并填充新的单元格。
然而,当我尝试使用数组值的新单元格来填充它,我得到一个1004错误 -应用程序定义/对象定义的错误。
这是我使用的代码:
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
尝试使用数组的值作为新发现的单元格的地址时出现错误。代码有什么问题?
谢谢你的帮助。
你需要声明一些东西,以便c知道它需要查看。
这样的例子:
Dim rCell as Range
for each rCell in c.Cells
我不是通过我的电脑检查,但我注意到以下内容:
-
应该For Each c In Worksheets("Main Screen")
For Each c In Worksheets("Main Screen").Cells
-
i = i + 1
应该被擦除,因为它位于已经在更新迭代器
的 Cells(Molecules(i, 2), Molecules(i, 1)).Interior.ColorIndex = Molecules(i, 5)
在
For j = 1 To UBound(Molecules, 2)
循环中,它在每次迭代中产生相同的结果,因为它只依赖于i
变量:看起来它应该从循环中取出并放置在外部循环中。
For i = 1 To UBound(Molecules)
循环中。