Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Methode "Range" für Objekt"_Global" fehlgeschlagen

Forumthread: Methode "Range" für Objekt"_Global" fehlgeschlagen

Methode "Range" für Objekt"_Global" fehlgeschlagen
15.08.2005 08:45:30
Stefan
Hallo,
beim Ausführen meines Makros wird der Fehler
' Methode "Range" für das Objekt "_Global" fehlgeschlagen '
ausgegeben, wenn mehr als 43 Zeilen markiert sind.
Nach x-tausenden Versuchen, bin ich mittlerweile am Ende meines Lateins.
Was mache ich falsch?
Dim i As Integer, Inhalt As String, a As String
i = 3
a = ""
Do
i = i + 1
Inhalt = Cells(i, 2)
If Inhalt = Cells(ActiveCell.Row, 2) Then GoTo prüfung1
GoTo letztezeile
prüfung1:
If a = "" Then a = a + CStr(i) & ":" & i Else: a = a & "," & i & ":" & i
letztezeile:
Loop Until Inhalt = ""
Range(a).Select
Selection.Delete shift:=xlUp
Cells(4, 2).Select
MsgBox "Zeilen " & a & "wurden gelöscht."
Mfg Stefan
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Methode "Range" für Objekt"_Global" fehlgeschl
15.08.2005 09:16:03
Matthias
Hallo Stefan
Kann sein, dass Excel nicht mehr durch Komma getrennte Zeilen akzeptiert. Lösche die Zeilen einzeln von unten nach oben:

Sub test()
Dim lz As Long
Dim i As Integer, a As String
'letzte beschriebene Zeile in Spalte B bestimmen:
lz = Cells(Rows.Count, 2).End(xlUp).Row
If Cells(Rows.Count, 2) <> "" Then lz = Rows.Count
For i = lz To 4 Step -1
If Cells(i, 2) = Cells(ActiveCell.Row, 2) Then
a = a & "," & i & ":" & i 'nur für die Msgbox
Cells(i, 1).EntireRow.Delete shift:=xlUp
End If
Next i
a = Mid(a, 2)
MsgBox "Zeilen " & a & " wurden gelöscht."
End Sub

Gruß Matthias
Anzeige
AW: Klappt nicht
15.08.2005 10:20:51
Stefan
Hallo Matthias,
danke für deine schnelle Antwort.
Ich habe deinen Code mal anstelle meines Codes kopiert.
Wenn ich jetzt einen Eintrag auswähle, z.B. Hans Mustermann, und ich alle Zeilen mit Hans Mustermann löschen möchte, entfernt Excel nicht alle Einträge.
Wenn Hans Mustermann am Ende der Liste steht, also die letzte benutzte Zeile als ActiveRow gilt, löscht Excel tatsächlich nur die letzte Zeile (obwohl ca. 60 Einträge mit Hans Mustermann vorhanden sind).
Mittlerweile versteh ich nur noch "Bahnhof".
Stefan
Anzeige
AW: Klappt nicht
15.08.2005 10:47:15
Matthias
Hallo Stefan,
achso, es kann jede Zelle in der Liste ausgewählt werden. Dann sollte man sich den Eintrag merken, sonst geht er ja beim Lösche der aktiven Zeile verloren:

Sub test()
Dim lz As Long
Dim i As Integer, a As String, n As String
'letzte beschriebene Zeile in Spalte B bestimmen.
lz = Cells(Rows.Count, 2).End(xlUp).Row
If Cells(Rows.Count, 2) <> "" Then lz = Rows.Count
n = Cells(ActiveCell.Row, 2)
For i = lz To 4 Step -1
If Cells(i, 2) = n Then
a = a & "," & i & ":" & i 'nur für die Msgbox
Cells(i, 1).EntireRow.Delete shift:=xlUp
End If
Next i
a = Mid(a, 2)
MsgBox "Zeilen " & a & " wurden gelöscht."
End Sub

Gruß Matthias
Anzeige
Jippie, es läuft....
15.08.2005 10:57:37
Stefan
Hallo Matthias,
Vielen Dank für die schnelle Hilfe.
Es klappt genauso, wie ich es mir vorstelle.
Danke
Stefan
Jippie, es läuft....
15.08.2005 10:57:44
Stefan
Hallo Matthias,
Vielen Dank für die schnelle Hilfe.
Es klappt genauso, wie ich es mir vorstelle.
Danke
Stefan
Jippie, es läuft....
15.08.2005 10:57:50
Stefan
Hallo Matthias,
Vielen Dank für die schnelle Hilfe.
Es klappt genauso, wie ich es mir vorstelle.
Danke
Stefan
Anzeige
Jippie, es läuft....
15.08.2005 10:58:22
Stefan
Hallo Matthias,
Vielen Dank für die schnelle Hilfe.
Es klappt genauso, wie ich es mir vorstelle.
Danke
Stefan
Jippie, es läuft....
15.08.2005 10:58:25
Stefan
Hallo Matthias,
Vielen Dank für die schnelle Hilfe.
Es klappt genauso, wie ich es mir vorstelle.
Danke
Stefan
;
Anzeige
Anzeige

Infobox / Tutorial

Methode "Range" für Objekt "_Global" Fehler beheben


Schritt-für-Schritt-Anleitung

Um den Fehler "die Methode Range für das Objekt _Global ist fehlgeschlagen" in Excel VBA zu beheben, solltest du die folgenden Schritte befolgen:

  1. Code überprüfen: Stelle sicher, dass die Range-Referenz korrekt ist. Wenn du mehrere Zeilen gleichzeitig löschen möchtest, kann es zu Problemen kommen, wenn nicht alle Zeilen korrekt referenziert sind.

  2. Einzelne Zeilen löschen: Versuche, die Zeilen einzeln zu löschen, anstatt sie in einem Rutsch zu selektieren. Hier ist ein Beispiel:

    Sub ZeilenLöschen()
       Dim lz As Long
       Dim i As Long, a As String
       lz = Cells(Rows.Count, 2).End(xlUp).Row
    
       For i = lz To 4 Step -1
           If Cells(i, 2) = "Suchbegriff" Then
               Cells(i, 1).EntireRow.Delete
           End If
       Next i
    End Sub
  3. Aktive Zelle merken: Merke dir den Inhalt der aktiven Zelle, bevor du mit dem Löschen beginnst, damit du die Zeilen korrekt identifizieren kannst.


Häufige Fehler und Lösungen

1. Fehler: Methode "Range" für das Objekt "_Global" fehlgeschlagen

  • Ursache: Oft passiert dies, weil Excel nicht mehr durch Komma getrennte Bereiche akzeptiert.
  • Lösung: Verwende die Schleife, um die Zeilen einzeln zu löschen, wie im vorherigen Abschnitt beschrieben.

2. Fehler: Laufzeitfehler 1004

  • Ursache: Dies tritt auf, wenn der Bereich, auf den du zugreifen möchtest, ungültig ist.
  • Lösung: Überprüfe, ob der Bereich existiert und korrekt angegeben ist.

Alternative Methoden

Falls das Löschen von Zeilen auf die oben beschriebene Weise nicht funktioniert, kannst du die folgende Methode verwenden:

Sub ZeilenLöschenAlternativ()
    Dim lz As Long
    Dim n As String
    lz = Cells(Rows.Count, 2).End(xlUp).Row
    n = Cells(ActiveCell.Row, 2)

    For i = lz To 4 Step -1
        If Cells(i, 2) = n Then
            Cells(i, 1).EntireRow.Delete
        End If
    Next i
End Sub

Diese Methode stellt sicher, dass der Inhalt der aktiven Zelle gespeichert wird, sodass alle entsprechenden Zeilen gelöscht werden, unabhängig von ihrer Position.


Praktische Beispiele

Hier sind zwei praktische Beispiele, wie du die Methode "Range" in VBA verwenden kannst, um Zeilen zu löschen:

  1. Beispiel 1: Alle Zeilen mit einem bestimmten Namen löschen:

    Sub LöscheNamen()
       Dim lz As Long
       Dim i As Long
       lz = Cells(Rows.Count, 2).End(xlUp).Row
    
       For i = lz To 4 Step -1
           If Cells(i, 2) = "Hans Mustermann" Then
               Cells(i, 1).EntireRow.Delete
           End If
       Next i
    End Sub
  2. Beispiel 2: Dynamisches Löschen basierend auf aktiver Zelle:

    Sub LöscheDynamisch()
       Dim lz As Long
       Dim n As String
       lz = Cells(Rows.Count, 2).End(xlUp).Row
       n = Cells(ActiveCell.Row, 2)
    
       For i = lz To 4 Step -1
           If Cells(i, 2) = n Then
               Cells(i, 1).EntireRow.Delete
           End If
       Next i
    End Sub

Tipps für Profis

  • Verwende Application.ScreenUpdating = False vor dem Löschen von Zeilen, um die Leistung zu verbessern und das Flackern zu minimieren.
  • Ein gutes Exception-Handling kann helfen, Laufzeitfehler zu vermeiden. Nutze On Error Resume Next vorsichtig, um Probleme zu umgehen.
  • Teste deinen Code immer in einer Kopie der Datei, um Datenverlust zu vermeiden.

FAQ: Häufige Fragen

1. Was bedeutet der Fehler "die Methode range für das objekt _global ist fehlgeschlagen"?

  • Dies bedeutet, dass Excel die angegebene Range nicht finden oder nicht darauf zugreifen kann, oft aufgrund von ungültigen Referenzen.

2. Wie kann ich sicherstellen, dass ich alle entsprechenden Zeilen lösche?

  • Stelle sicher, dass du die aktiven Zellen und deren Werte korrekt speicherst, bevor du mit dem Löschen beginnst. Verwende Schleifen, um alle relevanten Zeilen nacheinander zu überprüfen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige