2016-11-24 7 views
0

ループの2番目の反復で、VBAが "012 ...オブジェクト"という別の範囲CurrentDataTopに依存する設定TestRangeをクラッシュします。Excel VBA:オブジェクトが2番目のループに設定されていません

各ループの開始時に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

の値を含まれるセルは、2回目の反復で、コードはCurrentDataTop(すなわち、セルE6)を含む行を削除しますa 2.

存在しないセルからOffsetに移動すると、オフセットするオブジェクトがある場合にのみOffsetが実行されるため、コードがクラッシュします。

+0

ありがとうございます!私はそこにミューペットされていたように見えるが、あなたはその日を救った。 – Chuckles

0

問題は、CurrentDataTopのすべてのセルが削除されてしまうことです。

enter image description here

+0

この録音もありがとう - 非常に便利です:) – Chuckles

+0

ありがとう、私はあなたがそれを好きで嬉しいです。私はデバッグのテクニックを見せ始めました。 –

関連する問題