Excel - 遍历 table 越界错误

Excel - Loop through table out of bounds error

我的代码是通过 table 运行 并存储 D 列的单元格颜色,同时还将 C 列中的值存储为另一个变量。这些变量用于在另一个“主”选项卡上查找形状,并将该颜色更新为存储在 CellColor 中的颜色。当我添加代码的循环部分时,出现越界错误 (-2147024809 (80070057))。

Sub Update()
Dim CellColor As Long
Dim ShapeColor As Variant
Dim rng As Range, Cell As Range
Dim i As Integer

Worksheets("Sheet1").Select
Set rng = Range("C2:C100")
For i = 2 To rng.Rows.Count
CellColor = rng.Cells(RowIndex:=i, ColumnIndex:="D").DisplayFormat.Interior.Color
ShapeColor = rng.Cells(RowIndex:=i, ColumnIndex:="C").Value
Worksheets("main").Shapes(ShapeColor).Fill.ForeColor.RGB = CellColor
i = i + 1
Next
Worksheets("main").Select
End Sub

也许在这里使用 For Each 循环和 Offset:

Set rng = Worksheets("Sheet1").Range("C2:C100")

Dim cell As Range
For Each cell In rng
    ShapeColor = cell.Value
    CellColor =  cell.Offset(,1).DisplayFormat.Interior.Color
    Worksheets("main").Shapes(ShapeColor).Fill.ForeColor.RGB = CellColor
Next

对您的问题的简要说明:

rng.Cells(RowIndex:=i, ColumnIndex:="C")
rng.Cells(RowIndex:=i, ColumnIndex:="D")

不是您认为的单元格,因为它们是偏移的,但是 从 C 列开始。他们实际上指的是 EF.

举个例子:? Range("C2").Cells(1, "C").Address returns $E,不是$C.

其他要点:

  • 删除 i = i + 1Nexti.
  • 的增量
  • 避免使用 SelectSet rng = Worksheets("Sheet1").Range("C2:C100").