Excel VBA:对象未在第二个循环中设置

在循环的第二个迭代中,VBA崩溃设置TestRange ,它依赖于另一个范围CurrentDataTop ,表示“object required …”。

我在每个循环的开始处设置CurrentDataTop ,并且第一次迭代遍历OK。

 Option Explicit Sub AMystery() Dim OutBook As Workbook, MasterWorkbook As Workbook Dim CurrentDataTop As Range, CurrentData As Range, TestRange As Range Dim Index As Double, i As Double, iTop As Double, iBottom As Double, iColumn As Double Set MasterWorkbook = ActiveWorkbook 'MainLoopStart For Index = 1 To 3 MasterWorkbook.Sheets.Copy ActiveWorkbook.SaveAs Filename:=MasterWorkbook.Path & "\NewName_" & Index & ".xlsx", FileFormat:=51 Set OutBook = Workbooks("NewName_" & Index & ".xlsx") OutBook.Activate ' Set new range starts, within the duplicate book Set CurrentDataTop = OutBook.Worksheets("Sheet3").Range("E6") 'Delete some data not required CurrentDataTop.Worksheet.Activate iTop = CurrentDataTop.Row iColumn = CurrentDataTop.Column iBottom = Cells(Rows.Count, CurrentDataTop.Column).End(xlUp).Row For i = iBottom To iTop Step -1 If Cells(i, iColumn).Value <> Index Then Rows(i).Delete End If Next i 'IT CRASHES HERE ON THE SECOND LOOP, SAYING "OBJECT REQUIRED" Set TestRange = CurrentDataTop.Offset(0, 10) TestRange.Value = "Some text" 'Save & close new book OutBook.Save OutBook.Close 'MainLoopEnd Next Index End Sub 

原始工作簿中的单元格E6可能包含值1。

因此,在第二次迭代中,您的代码将删除包含CurrentDataTop (即单元格E6)的行,因为单元格不包含2。

当你从一个不存在的单元格Offset ,代码将会崩溃,因为Offset只能在有偏移的对象时执行。

问题是你删除了CurrentDataTop的所有单元格。

在这里输入图像说明