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 - 使用二维数组的值填充单元格时出错的主要内容,如果未能解决你的问题,请参考以下文章

vba 赋值给二维数组?

vba基础4 数组

excel vba 数组中第1位字符为0,赋给单元格时如何将0保留?

从工作表将二维数组传递给 VBA/UDF 函数

如何使用 prepareForSegue 从二维数组传递值

如何基于二维数组填充 WPF 网格