2016-11-24 34 views
0

在循环的第二次迭代中,VBA崩溃设置TestRange,这取决于另一个范围CurrentDataTop,表示“object required ...”。Excel VBA:对象未设置在第二个循环中

我在每个循环的开始处设置了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 

回答

1

E6细胞在原始工作簿可能包含的1

的值。因此,在第二次迭代,代码将删除包含CurrentDataTop(即细胞E6)的行,因为细胞不包含a 2.

当您从不存在的单元格转到Offset时,代码将崩溃,因为Offset只能在存在要偏移的对象时执行。

+0

谢谢!看起来我在那里是一个木偶,但是你保存了一天。 – Chuckles

0

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

enter image description here

+0

也感谢这个录音 - 非常有用:) – Chuckles

+0

谢谢,我很高兴你喜欢它。我开始尝试展示调试技术。 – 2016-11-25 10:47:41