VBA:下标超出范围错误

我对VBA仍然很陌生,不断收到下标超出范围的错误。 我正在尝试编写从一个excel选项卡(“ip”)读取数据并将其中一些数据写入另一个选项卡(“rtf”)的代码。 当ip选项卡具有重复的variablesipIPCMP值,那么我想添加一个新的行在我的第二个选项卡rtf中的活动行。 该错误发生在条件语句的其他部分。 谢谢。

更新:更改else elseif,并更改与语句。 还有下标超出范围。

For i = 1 To n connectIPCMP = iPCMP(i) For j = 1 To m ipIPCMP = Sheets("ip").Cells(j + 1, 2) If ipIPCMP = connectIPCMP And k = 1 Then supplierList = Sheets("ip").Cells(j, 3) Sheets("rft").Cells(3 + j, 4) = list k = k + 1 ElseIf ipointIPCMP = connectIPCMP And k > 1 Then With Worksheets("rtf") .Range(.Cells(3 + i, 1), .Cells(3 + i, 8)).Activate .ActiveCell.Offset(1).EntireRow.Insert End With Sheets("rft").Cells(3 + j, 4) = supplierList k = k + 1 End If Next 

下一个

  1. 改变Else: ElseIfThen将其添加到行的末尾。
  2. 正确引用范围。

     With Worksheets("rtf") .Range(.Cells(3 + i, 1), .Cells(3 + i, 8)).Activate ActiveCell.Offset(1).EntireRow.Insert End with 

注意.Cells而不是Cells 。 看到这个

更好的方法

  For i = 1 To n connectIPCMP = iPCMP(i) With Worksheets("rtf") '<~~CHECK THIS WORKSHEET NAME!!!!! For j = 1 To m ipIPCMP = Worksheets("ip").Cells(j + 1, 2) If ipIPCMP = connectIPCMP And k = 1 Then supplierList = Sheets("ip").Cells(j, 3) .Cells(3 + j, 4) = List k = k + 1 ElseIf ipointIPCMP = connectIPCMP And k > 1 Then .Cells(3 + i, 1).Offset(1).EntireRow.Insert '<~~only need a single cell if you are going to insert an entire row .Cells(3 + j, 4) = supplierList k = k + 1 End If Next j End With Next i 

你提供的代码示例只能讲述故事的一半,但是如果不看完整的故事,以上是我所能提供的最好的。


¹ 请参阅如何避免使用在Excel VBAmacros中select更多的方法来摆脱依靠select和激活来实现您的目标。