预期数组,编译错误

expected array,compile error

    For j = 0 To 20
        For i = 0 To 20

            ReDim atoms(0 To 20, 0 To 20)
            ReDim atomschange(0 To 20, 0 To 20)
            atomschange(j, i) = 0

            If i Mod 2 = 0 And j Mod 2 = 0 Then
                [B2].Offset(j, i).Interior.ColorIndex = 37
                atoms(j, i) = 1
            Else
                [B2].Offset(j, i).Interior.ColorIndex = 36
                atoms(j, i) = 0
            End If
        Next i
    Next j
End Sub

我做错了什么?

  1. 您正在重新初始化的循环中重新定义数组,然后将所有数据放入数组中。使用 PRESERVE 关键字确保在重新调整数组尺寸时不会转储数组 ReDim Preserve atoms(0 To 20, 0 To 20)

  2. 将数组重新调整为完全相同的大小毫无意义。它们已经是 0 To 20, 0 To 20,因为您已经设置了它。在您的 for 循环之外 重新编辑它们一次,然后将它们单独放置。

  3. 确保在代码顶部正确声明了 atomsatomschange 数组。它抱怨(可能是当你重新调整它们时)这两个变量不是数组。

你在这段代码执行之前就知道数组的大小,所以声明它们并在声明中适当地调暗它们,然后使用它们(删除循环中多余和不正确的 redim 用法:

Sub somesumroutine()
    Dim atoms(0 to 20, 0 to 20) as Integer
    Dim atomschange(0 to 20, 0 to 20) as Integer

    For j = 0 To 20
        For i = 0 To 20             
            atomschange(j, i) = 0

            If i Mod 2 = 0 And j Mod 2 = 0 Then
                [B2].Offset(j, i).Interior.ColorIndex = 37
                atoms(j, i) = 1
            Else
                [B2].Offset(j, i).Interior.ColorIndex = 36
                atoms(j, i) = 0
            End If
        Next i
    Next j
End Sub

考虑使用 atoms 数组的 UBoundLBound 来设置循环,这样您就不必一遍又一遍地使用 0 to 20。这样你就可以将你的数组调暗一次,而让其余的代码单独存在:

Sub somesumroutine()
    Dim atoms(0 to 20, 0 to 20) as Integer
    Dim atomschange(0 to 20, 0 to 20) as Integer

    For j = lBound(atoms, 1) To uBound(atoms, 1)
        For i = lBound(atoms, 2) To uBound(atoms, 2)            
            atomschange(j, i) = 0

            If i Mod 2 = 0 And j Mod 2 = 0 Then
                [B2].Offset(j, i).Interior.ColorIndex = 37
                atoms(j, i) = 1
            Else
                [B2].Offset(j, i).Interior.ColorIndex = 36
                atoms(j, i) = 0
            End If
        Next i
    Next j
End Sub