Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Laufzeitfehler 1004 die Methode Range..

Laufzeitfehler 1004 die Methode Range..
11.04.2020 12:28:54
Peter
Hallo zusammen,
ich brauche Hilfe bei einem Laufzeitfehler '1004':
Die Methode '' des Objekts '_Global' ist fehlgeschlagen>
Ich habe selber keine großartigen Kenntnisse im VBA. Die Makros, die ich anwende habe ich größtenteils in diesem Forum recherchiert und an meine Anforderungen angepasst.
Ich komme selber nicht weiter. Und vor allen Dingen was mich an der ganzen Geschichte stört ist, dass dieser Fehler anscheinend Verweise auf so genannten Global erstellt, die evtl andere Makros stören könnten. So jedenfalls meine Befürchtung.
Dieser Fehler wird auf folgender Microsoft-Seite thematisiert:
https://support.microsoft.com/de-de/help/178510/excel-automation-fails-second-time-code-runs
ich komme mit Erklärung aber nicht weiter. Vielleicht kann mir jemand helfen und meine Fragen beantworten.
Laufzeitfehler '1004':
Die Methode '' des Objekts '_Global' ist fehlgeschlagen>
Das wäre mein Code bei dem der Fehler aufgetreten ist und zwar beim zweiten Ausführen des Makro:
Sub Werte_einfügen_bei_gesetztem_Filter()
Dim c As Range
Dim myRange As Range
'ich markiere einen bestimmten bereich und diese Zeile markiert in meiner Markierung sichtbare  _
Zellen. das klappt
ActiveSheet.Range(Selection.Address).SpecialCells(xlCellTypeVisible).Select
'diese Zeile soll neu markierte sichtbare Zellen in eine neue Range übergeben. das beschleunigt  _
das Makro um Längen, aber nur einmal eben, beim zweiten Durchlauf kommt der o.g. Fehler
Set myRange = Range(Selection.Address)
For Each c In myRange
c.Copy
c.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False 'Zwischenspeicher löschen
Application.ScreenUpdating = False 'damit bleibt das Ruckeln weg und es spart Zeit
Next c
MsgBox "fertig"
End Sub
********
Auf der Suche nach Lösung habe ich auf folgenden Code gestoßen und rein aus Neugierde ausgetestet. Und dieser MiniCode liefert ab dem zweiten Durchlauf den selben Fehler. Und ich weiß jetzt überhaupt nicht, ob die Ursache der Verweis aus dem oberen Code ist, so zu sagen eine Kettenreaktion ist oder nicht. Also große Verunsicherung.
Sub letzte_Zelle_in_SpalteA()
MsgBox Range(Range("A1").End(xlDown).Range("A65536").End(xlUp)).Address ' liefert den 1004  _
Fehler !!!!
End Sub

Ich hoffe es findet sich einer, der mir bei der Angelegenheit helfen kann.
Mfg
Peter
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 1004 die Methode Range..
11.04.2020 13:00:25
Werner
Hallo,
wiso nicht einfach mit einem "Einzeiler"?
Range(Selection.Address).SpecialCells(xlCellTypeVisible).Value = _
Range(Selection.Address).SpecialCells(xlCellTypeVisible).Value
End Sub
Gruß Werner
AW: Laufzeitfehler 1004 die Methode Range..
11.04.2020 13:15:08
Daniel
Teste mal, aber das funktioniert meines Wissens nach nur mit lückenlosen Zellbereichen, die hier aber nicht unbedingt gegeben sind.
Frohe Ostern Daniel
Anzeige
AW: Laufzeitfehler 1004 die Methode Range..
11.04.2020 18:49:10
Peter
Hallo Werner,
danke für schnelle Antwort. leider tut es nicht was es soll.
dein Code übernimmt den Wert der ersten Zelle in der Markierung und fügt ihn in alle anderen Zellen der Markierung ein. so war das nicht gedacht.
Mir geht es in erster Linie darum den Fehler in meinem Code zu beseitigen. Wenn er funktionieren würde dann wäre er perfekt, weil die Ausführung sehr schnell ist, wenn es eben funktionieren würde.
Ich glaube das Problem ist dass ich zwei mal hintereinander Range(Selection.Address) benutze, warum geht das nicht?
mfg
Peter
Anzeige
AW: Laufzeitfehler 1004 die Methode Range..
11.04.2020 19:20:28
Werner
Hallo,
dann versuchs mal so:
Public Sub aaa()
Dim raZelle As Range
For Each raZelle In Range(Selection.Address).SpecialCells(xlCellTypeVisible)
raZelle.Value = raZelle.Value
Next raZelle
End Sub
Gruß Werner
AW: Laufzeitfehler 1004 die Methode Range..
11.04.2020 22:00:01
Peter
Hallo Werner,
ja, der Code funktioniert gut. ist auch relativ schnell und keine Fehlermeldungen. Danke !!
ich will ja nicht langweilen, aber hast du eine Ahnung was an meinem Code falsch ist und wie ich ihn mit dem Ansatz Range(Selection.Address) benutzen könnte? ich verwende ihn sonst auch noch bei ein paar anderen Makros und da waren keine Probleme aufgetreten. hier mit den gesetzten Filter und "sichtbaren" Zellen ist was schief gegangen..
mfg
Peter
Anzeige
AW: Laufzeitfehler 1004 die Methode Range..
11.04.2020 13:09:52
Daniel
Hi
Du bist da noch viel zu kompliziert unterwegs.
Die Selection ist ja schon eine Range, die man direkt ansprechen kann, dh
Statt Range(Selection.Address) reicht Selection
Auch würde ich die Variablenzuweisung direkt machen:
set myrange = Selection.specialcells(xlcelltypevisible)
Beachte, dass das .SpecialCells einen Fehlerabbruch erzeugt, wenn es keine Zelle finden kann.
Dh. dein Code läuft dann auf einen Fehler, wenn du Zellen selektiert und diese dann ausblendet.
Gruß Daniel
Anzeige
AW: Laufzeitfehler 1004 die Methode Range..
11.04.2020 19:17:12
Peter
Hallo Daniel,
danke für deine Antwort!
dein Vorschlag mit nur Selection also: ActiveSheet.Selection.SpecialCells(xlCellTypeVisible).Select funktioniert nicht da kommt gleich ein Fehler nach der Zeile.
so wie es in meinem Code steht "ActiveSheet.Range(Selection.Address).SpecialCells(xlCellTypeVisible).Select" tut VBA was es soll bei gesetztem Filter und Markierung in einer anderen Spalte markiert er jede Zelle einzeln. und dann übergibt er quasi diese Selection von einzelnen "sichtbaren" Zellen mittels Range(Selection.Address) an neue Range in meinem Fall myRange. Und die erste Ausführung vom Makro läuft superschnell. und der Grund ist glaube ich jedenfalls diese Selection.Address Variante.
dein zweiter Vorschlag mit "Set myRange = Selection.SpecialCells(xlCellTypeVisible)" funktioniert, Makro läuft, braucht aber viel viel länger.
ich verstehe eben nicht was an meinem Code so einen Crash verursacht und wie ich den soweit bekomme, dass er einwandfrei funktioniert und keine Probleme verursacht. schnell ist er ja beim ersten mal ).
Wenn du Lust hast kannst du es ja selber ausprobieren. Beim gesetzten Filter in der Spalte A die Zellen in der Spalte C (Multiplikation Zellen aus Spalte A und B) zu markieren und das Makro durchlaufen zu lassen. Aber ich denke bei dir wird der gleiche Fehler kommen. ich hoffe meine Erklärung ist verständlich, sonst könnten ich ein Exceldokument als Beispiel hochladen, sag nur Bescheid.
Frohe Ostern!
mfg
Peter
Anzeige
Ne Beispieldatei mit dem Fehler ist immer hilfreic
11.04.2020 20:54:09
Daniel
Und hast du schon mal das Selection ohne das ActiveSheet davor probiert?
AW: Ne Beispieldatei mit dem Fehler ist immer hilfreic
11.04.2020 21:56:14
Peter
Selection.SpecialCells(xlCellTypeVisible).Select
- das habe ich jetzt ausprobiert, und der Rest vom Code so belassen wie er war also mit "Set myRange = Range(Selection.Address)" es läuft bis Zelle 43 durch, dann kommt meine msgbox "fertig" und beim Rest der markierten Zellen passiert gar nichts, obwohl die nach der specialCells .. Select markiert waren.
wenn ich ab der Zelle 43 noch mal alle markiere und Makro noch mal starte dann kommt gleich der altbekannte Fehler 1004 mit Range und Global ....
Ich habe mittlerweile die Zeile noch so ergänzt und habe Makro laufen lassen "Set myRange = Range(Selection.Address(external:=True))" der Fehler kommt jetzt nicht mehr, aber das Makro läuft 37 Zellen durch und dann bringt meine msgbox "fertig" und das war's. keine Meldung von VBA dass das Makro nicht bei allen markierten Zellen angewandt wurde, gar nicht. Makro geht normal zu Ende.
Wenn das nicht seltsam ist...
Jedenfalls danke für deine Mühe!
mfg
Peter
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Laufzeitfehler 1004 in Excel VBA beheben


Schritt-für-Schritt-Anleitung

Um den Laufzeitfehler 1004 in Excel VBA zu beheben, kannst du folgende Schritte befolgen:

  1. Prüfe den Code auf korrekte Syntax: Achte darauf, dass alle Objekte und Methoden korrekt angesprochen werden. Oft entstehen Fehler durch Tippfehler oder falsche Objektbenennungen.

  2. Verwende Selection anstelle von Range(Selection.Address): Wenn du bereits eine Zelle oder einen Bereich ausgewählt hast, kannst du direkt darauf zugreifen. Zum Beispiel:

    Set myRange = Selection.SpecialCells(xlCellTypeVisible)
  3. Error Handling einbauen: Um unerwartete Fehler abzufangen, kannst du Error Handling verwenden:

    On Error Resume Next
    ' Dein Code hier
    On Error GoTo 0
  4. Testen des Codes: Führe den Code mehrmals aus, um sicherzustellen, dass der Fehler nicht wieder auftritt. Achte darauf, dass die Bedingungen für die Ausführung immer erfüllt sind.


Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen:

    • Ursache: Dieser Fehler tritt häufig auf, wenn der Code versucht, auf einen Bereich zuzugreifen, der nicht existiert oder nicht sichtbar ist.
    • Lösung: Stelle sicher, dass der ausgewählte Bereich sichtbar ist und existiert. Verwende SpecialCells(xlCellTypeVisible) nur, wenn wirklich sichtbare Zellen vorhanden sind.
  • Laufzeitfehler 1004: Die Methode 'Value' für das Objekt 'Range' ist fehlgeschlagen:

    • Ursache: Diese Fehlermeldung kann auftreten, wenn du versuchst, auf einen leeren oder ungültigen Bereich zuzugreifen.
    • Lösung: Überprüfe, ob der Bereich gültige Werte enthält, bevor du darauf zugreifst.

Alternative Methoden

  1. Einzeiler verwenden: Statt mehrerer Zeilen kannst du den Vorgang in einem Einzeiler durchführen. Dies kann die Ausführungsgeschwindigkeit erhöhen:

    Range(Selection.Address).SpecialCells(xlCellTypeVisible).Value = Range(Selection.Address).SpecialCells(xlCellTypeVisible).Value
  2. Öffentliche Subroutine verwenden: Manchmal ist es hilfreich, eine öffentliche Subroutine zu erstellen, die du von anderen Makros aus aufrufen kannst. Dies sorgt für eine bessere Übersichtlichkeit und Wiederverwendbarkeit:

    Public Sub WerteEinfügen()
       Dim raZelle As Range
       For Each raZelle In Selection.SpecialCells(xlCellTypeVisible)
           raZelle.Value = raZelle.Value
       Next raZelle
    End Sub

Praktische Beispiele

  • Beispiel 1: Ein einfaches Makro, das sichtbare Zellen in einem gefilterten Bereich bearbeitet:

    Sub Werte_einfügen_bei_gesetztem_Filter()
       Dim c As Range
       Dim myRange As Range
       Set myRange = Selection.SpecialCells(xlCellTypeVisible)
       For Each c In myRange
           c.Copy
           c.PasteSpecial Paste:=xlPasteValues
       Next c
       Application.CutCopyMode = False
       MsgBox "Fertig"
    End Sub
  • Beispiel 2: Ein Makro, das die letzte Zelle in einer Spalte ermittelt, ohne den Laufzeitfehler 1004:

    Sub letzte_Zelle_in_SpalteA()
       MsgBox Range("A1").End(xlDown).Address
    End Sub

Tipps für Profis

  • Vermeide die Verwendung von Select und Activate: Direkte Zuweisungen sind schneller und vermeiden viele häufige Fehler wie laufzeitfehler 1004 vba.
  • Nutze Debugging-Tools: Verwende die Debugging-Funktionen in VBA, um den Code Schritt für Schritt zu durchlaufen und Fehlerquellen zu identifizieren.
  • Code modularisieren: Teile deinen Code in kleinere Funktionen oder Subroutinen auf. Dies macht das Fehlersuchen leichter und verbessert die Lesbarkeit.

FAQ: Häufige Fragen

1. Was ist der Laufzeitfehler 1004? Der Laufzeitfehler 1004 tritt in Excel VBA auf, wenn eine Methode oder ein Objekt nicht korrekt angesprochen wird. Dies kann durch falsche Referenzen oder ungültige Werte verursacht werden.

2. Wie kann ich Laufzeitfehler in VBA vermeiden? Stelle sicher, dass du immer gültige Bereiche und Objekte verwendest. Implementiere Error Handling und teste deinen Code gründlich.

3. Warum funktioniert mein Makro nur beim ersten Durchlauf? Ein häufiges Problem ist, dass bestimmte Objekte oder Bereiche beim zweiten Durchlauf nicht mehr existieren oder unsichtbar sind. Überprüfe den Status deiner Zellen und stelle sicher, dass sie sichtbar sind, bevor du darauf zugreifst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige