预期数组,编译错误
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
我做错了什么?
您正在重新初始化的循环中重新定义数组,然后将所有数据放入数组中。使用 PRESERVE
关键字确保在重新调整数组尺寸时不会转储数组 ReDim Preserve atoms(0 To 20, 0 To 20)
将数组重新调整为完全相同的大小毫无意义。它们已经是 0 To 20, 0 To 20
,因为您已经设置了它。在您的 for 循环之外 重新编辑它们一次,然后将它们单独放置。
确保在代码顶部正确声明了 atoms
和 atomschange
数组。它抱怨(可能是当你重新调整它们时)这两个变量不是数组。
你在这段代码执行之前就知道数组的大小,所以声明它们并在声明中适当地调暗它们,然后使用它们(删除循环中多余和不正确的 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
数组的 UBound
和 LBound
来设置循环,这样您就不必一遍又一遍地使用 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
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
我做错了什么?
您正在重新初始化的循环中重新定义数组,然后将所有数据放入数组中。使用
PRESERVE
关键字确保在重新调整数组尺寸时不会转储数组ReDim Preserve atoms(0 To 20, 0 To 20)
将数组重新调整为完全相同的大小毫无意义。它们已经是
0 To 20, 0 To 20
,因为您已经设置了它。在您的 for 循环之外 重新编辑它们一次,然后将它们单独放置。确保在代码顶部正确声明了
atoms
和atomschange
数组。它抱怨(可能是当你重新调整它们时)这两个变量不是数组。
你在这段代码执行之前就知道数组的大小,所以声明它们并在声明中适当地调暗它们,然后使用它们(删除循环中多余和不正确的 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
数组的 UBound
和 LBound
来设置循环,这样您就不必一遍又一遍地使用 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