2017-02-23 4 views
0

Ich habe 3 Subs, die ausgeführt werden, wenn ein bestimmtes Arbeitsblatt in einer Arbeitsmappe aktiviert ist. Es ist jedoch nicht und ich erhalte den folgenden Fehler:Excel VBA - Methode 'Bereich' von Objekt '_Worksheet' fehlgeschlagen

Run-time error '-2147417848 (80010108)': Method 'Range' of object'_Worksheet' failed

Der Code, der Fehler ist:

Sub MoveData() 
    Dim r As Long, lr2 As Long, lr As Long 
    lr2 = Worksheets("Status").UsedRange.Rows.Count 
    lr3 = Worksheets("Completed").UsedRange.Rows.Count 
     If lr3 = 1 Then lr3 = 0 
     For r = lr2 To 2 Step -1 
      If Worksheets("Status").Range("A" & r).Value <> "" And Worksheets("Status").Range("X" & r).Value = "Y" And Worksheets("Completed").Range("A2").Value = "" Then 
       Worksheets("Status").Cells(r, 1).Copy Destination:=Worksheets("Completed").Range("A" & lr3) 
       Worksheets("Status").Cells(r, 2).Copy Destination:=Worksheets("Completed").Range("B" & lr3) 
       Worksheets("Status").Cells(r, 3).Copy Destination:=Worksheets("Completed").Range("C" & lr3) 
       Worksheets("Status").Cells(r, 4).Copy Destination:=Worksheets("Completed").Range("D" & lr3) 
       Worksheets("Status").Cells(r, 5).Copy Destination:=Worksheets("Completed").Range("E" & lr3) 
       Worksheets("Status").Cells(r, 6).Copy Destination:=Worksheets("Completed").Range("F" & lr3) 
       Worksheets("Status").Cells(r, 7).Copy Destination:=Worksheets("Completed").Range("G" & lr3) 
       Worksheets("Status").Cells(r, 8).Copy Destination:=Worksheets("Completed").Range("H" & lr3) 
       Worksheets("Status").Cells(r, 9).Copy Destination:=Worksheets("Completed").Range("I" & lr3) 
       Worksheets("Status").Cells(r, 10).Copy Destination:=Worksheets("Completed").Range("J" & lr3) 
       Worksheets("Status").Cells(r, 11).Copy Destination:=Worksheets("Completed").Range("K" & lr3) 
       Worksheets("Status").Cells(r, 12).Copy Destination:=Worksheets("Completed").Range("L" & lr3) 
       Worksheets("Status").Cells(r, 13).Copy Destination:=Worksheets("Completed").Range("M" & lr3) 
       Worksheets("Status").Cells(r, 14).Copy Destination:=Worksheets("Completed").Range("N" & lr3) 
       Worksheets("Status").Cells(r, 15).Copy Destination:=Worksheets("Completed").Range("O" & lr3) 
       Worksheets("Status").Cells(r, 16).Copy Destination:=Worksheets("Completed").Range("P" & lr3) 
       Worksheets("Status").Cells(r, 17).Copy Destination:=Worksheets("Completed").Range("Q" & lr3) 
       Worksheets("Status").Cells(r, 18).Copy Destination:=Worksheets("Completed").Range("R" & lr3) 
       Worksheets("Status").Rows(r).Delete Shift:=xlUp 
       Else: 
      End If 
     Next r 
     For r = lr2 To 2 Step -1 
      If Worksheets("Status").Range("A" & r).Value <> "" And Worksheets("Status").Range("T" & r).Value = "Y" And Worksheets("Completed").Range("A2").Value <> "" Then 
       Worksheets("Status").Cells(r, 1).Copy Destination:=Worksheets("Completed").Range("A" & lr3 + 1) 
       Worksheets("Status").Cells(r, 2).Copy Destination:=Worksheets("Completed").Range("B" & lr3 + 1) 
       Worksheets("Status").Cells(r, 3).Copy Destination:=Worksheets("Completed").Range("C" & lr3 + 1) 
       Worksheets("Status").Cells(r, 4).Copy Destination:=Worksheets("Completed").Range("D" & lr3 + 1) 
       Worksheets("Status").Cells(r, 5).Copy Destination:=Worksheets("Completed").Range("E" & lr3 + 1) 
       Worksheets("Status").Cells(r, 6).Copy Destination:=Worksheets("Completed").Range("F" & lr3 + 1) 
       Worksheets("Status").Cells(r, 7).Copy Destination:=Worksheets("Completed").Range("G" & lr3 + 1) 
       Worksheets("Status").Cells(r, 8).Copy Destination:=Worksheets("Completed").Range("H" & lr3 + 1) 
       Worksheets("Status").Cells(r, 9).Copy Destination:=Worksheets("Completed").Range("I" & lr3 + 1) 
       Worksheets("Status").Cells(r, 10).Copy Destination:=Worksheets("Completed").Range("J" & lr3 + 1) 
       Worksheets("Status").Cells(r, 11).Copy Destination:=Worksheets("Completed").Range("K" & lr3 + 1) 
       Worksheets("Status").Cells(r, 12).Copy Destination:=Worksheets("Completed").Range("L" & lr3 + 1) 
       Worksheets("Status").Cells(r, 13).Copy Destination:=Worksheets("Completed").Range("M" & lr3 + 1) 
       Worksheets("Status").Cells(r, 14).Copy Destination:=Worksheets("Completed").Range("N" & lr3 + 1) 
       Worksheets("Status").Cells(r, 15).Copy Destination:=Worksheets("Completed").Range("O" & lr3 + 1) 
       Worksheets("Status").Cells(r, 16).Copy Destination:=Worksheets("Completed").Range("P" & lr3 + 1) 
       Worksheets("Status").Cells(r, 17).Copy Destination:=Worksheets("Completed").Range("Q" & lr3 + 1) 
       Worksheets("Status").Cells(r, 18).Copy Destination:=Worksheets("Completed").Range("R" & lr3 + 1) 
       Worksheets("Status").Rows(r).Delete Shift:=xlUp 
       lr3 = lr3 + 1 
      Else: 
      End If 
     Next r 
End Sub 

Die markierte Zeile von Debug ist:

If Worksheets("Status").Range("A" & r).Value <> "" And Worksheets("Status").Range("X" & r).Value = "Y" And Worksheets("Completed").Range("A2").Value = "" Then 

Würden Sie in der Lage sein, erklären, warum der Fehler auftritt und was ich tun kann, um den Fehler zu beheben?

+1

Dieser * ganze * Code ist wahrscheinlich kein Fehler, nur eine bestimmte Zeile oder zwei, also welche Zeile wird hervorgehoben, wenn sie fehlerhaft ist? –

+1

'Wenn lr3 = 1 Dann lr3 = 0' lr3 kann nicht Null sein - das wird nicht zu irgendeiner gültigen Zeile aufgelöst. Auch inkrementieren Sie nie lr3? –

+0

@cyboashu Danke für den Link. Ich werde es mir ansehen. –

Antwort

0

ich den Fehler behoben, indem Bereich von, wenn:

Old vba

If Worksheets("Status").Range("A" & r).Value <> "" And Worksheets("Status").Range("X" & r).Value = "Y" And Worksheets("Completed").Range("A2").Value = "" Then 

New vba

If Worksheets("Status").Cells(r, 1).Value <> "" And Worksheets("Status").Cells(r, 24).Value = "Y" And Worksheets("Completed").Cells(2, 1).Value = "" Then 
+2

Es ist schwer für mich zu sehen, warum diese zwei Linien nicht funktionell identisch sind ... –

+0

Ich habe Mühe, einen Link zu finden, aber was ich verstanden habe ist, dass Bereich nicht funktioniert, weil das Arbeitsblatt nicht aktiv war? –

0

Wie viele Zeilen in Arbeitsblatt sind („Status“)

Von diesem Fehler würde ich mir vorstellen, es entweder Null oder Eins ist. Hat 2 oder mehr mit der Schleife sein

For r = lr2 To 2 Step -1 
+0

Es gibt 4 Zeilen in dem Arbeitsblatt, mit dem ich gerade teste. Einmal vollständig bevölkert, wird es wahrscheinlich niemals weniger als 100 darin geben. –

+1

'UsedRange.Rows.Count' wird nicht 0 zurückgeben, aber selbst wenn dies der Fall wäre (oder wenn es 1 zurückliefert), würde die' For r = lr2 To 2 Step -1' Schleife niemals eingegeben werden, und daher würde Code niemals Erreichen Sie die Linie, bei der der Fehler auftritt. – YowE3K

+0

Guter Punkt YowE3K, das habe ich verpasst. –

Verwandte Themen