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

Forumthread: Laufzeitfehler 1004 bei Call Makro

Laufzeitfehler 1004 bei Call Makro
11.11.2021 10:38:49
niniha
Hallo zusammen,
ich habe vor kurzem versucht in Kalkulation A Makros einzubauen, die je nach eingegebener Information die Zeilen in den anderen Tabellen (3 & 4) ein-oder ausblendet. Außerdem funktioniert das Eintragen der Information durch Copy-Paste, da die Personen die Infos aus Kalkulation B einfach übernehmen sollten. Dabei sollen die Zellennamen beim Einsetzen nicht übernommen werden, weshalb die "automatisch gelöscht" werden sollten.
Der Code hat immer funktioniert, aber seit gestern erscheint mir beim Copy-Pasten von Informationen ins Tabellenblatt 1 einen 'Laufzeitfehler 1004 Anwendungs- oder objektdefinierter Fehler'. Da ich mich mit VBA nicht super gut auskenne, weiß ich nicht woher der Fehler kommt. Das ein- und ausblenden funktioniert, aber es kommt dennoch zu einer Fehlermeldung. Ich hoffe ihr könnte mir weiter helfen :( Danke im Voraus!

Private Sub Worksheet_Change(ByVal Target As Range)
Dim keycells As Range
Dim DefName As Name
Set keycells = Range("B64:R143")
If Not Application.Intersect(keycells, Range(Target.Address)) _
Is Nothing Then
For Each DefName In ActiveWorkbook.Names
On Error Resume Next
DefName.Delete
On Error GoTo 0
Next DefName
Call Tabelle4.Zeilen_ausblenden_EG1_5
Call Tabelle3.Zeilenausblenden_EG6_9
Application.EnableEvents = True
End If
End Sub
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 1004 bei Call Makro
11.11.2021 11:23:50
Daniel
Hi
wenn der Fehler "plötzlich" auftritt, ohne das sich am Code was geändert hat, dann sollte dir doch klar sein, dass die Fehlerursache nicht am Code liegen kann, sondern irgendwo in der Datei liegen muss.
Dh nur der Code allein hilft bei der Suche nach der Fehlerursachen nicht weiter, sondern man braucht auch die Datei dazu, um zu schauen, was sich da von heute auf morgen verändert hat, so dass der Code nicht funktioniert.
Vielleicht hat ja jemand den Blattschutz aktiviert, so dass das Makro die gewünschten Aktionen nicht mehr ausführen kann, also da kanns viele ursachen geben.
außerdem, wenn der Fehler bei "Call Makro" angezeigt wird, dann müsste man sich auch mal dieses Makro genauer anschauen, und die Codes der aufgerufenen Makros kennen wir auch nicht.
bevor du jetzt weiter machst:
geh mal im VBA-Editor in EXTRAS - OPTIONEN - ALLGEMEIN und schau mal, welche Option bei "Unterbrechen bei Fehlern" ausgewählt ist.
Ist dort "bei nicht verarbeitenden Fehlern" aktiv, ändere dies mal in "in Klassenmodul" oder "bei jedem Fehler"
das problem bei "bei nicht verarbeiteten Fehlern" ist, dass wenn du mit Call Makro ein anders Makro aufrufst und in diesem aufgerufenen Makro ein Fehler auftritt, dann bekommst du die Zeile mit "Call Makro" als fehlerhaft angezeigt, was natürlich nicht viel weiterhilft.
Mit einer der beiden anderen Optionen wird dir die fehlerhafte Zeile in diesem Makro angezeigt, also die Zeile, die auch den Fehler tatsächlich verursacht.
Damit hast du dann einen bessern Hinweis darauf, was den Fehler verursacht haben könnte.
Gruß Daniel
Anzeige
AW: Laufzeitfehler 1004 bei Call Makro
12.11.2021 08:53:45
niniha
Danke Daniel für deine Antwort! Ich habe jetzt herausgefunden, dass der Laufzeitfehler nur mit Blattschutz aufgezeigt wird und ohne Blattschutz funktioniert das weiterhin ohne Probleme. Hast du da eine Idee wie dieses Problem behoben werden kann? Jetzt kommt die Meldung: Laufzeitfehler 1004 Die Hidden-Eigenschaft des Range-Objektes kann nicht festgelegt werden. Hier ist der Code der das Problem auslöst. Liegt es dran, dass man mit Blattschutz das Ein- und Ausblenden unterbindet?

Sub Zeilen_ausblenden_EG1_5()
With Tabelle4
If .Range("T13").Value = 1 Then
.Rows("13:13").Hidden = True
Else
.Rows("13:13").Hidden = False
End If
If .Range("T14").Value = 1 Then
.Rows("14:14").Hidden = True
Else
.Rows("14:14").Hidden = False
End If
If .Range("T15").Value = 1 Then
.Rows("15:15").Hidden = True
Else
.Rows("15:15").Hidden = False
End If
If .Range("T16").Value = 1 Then
.Rows("16:16").Hidden = True
Else
.Rows("16:16").Hidden = False
End If
If .Range("T17").Value = 1 Then
.Rows("17:17").Hidden = True
Else
.Rows("17:17").Hidden = False
End If
If .Range("T18").Value = 1 Then
.Rows("18:18").Hidden = True
Else
.Rows("18:18").Hidden = False
End If
If .Range("T19").Value = 1 Then
.Rows("19:19").Hidden = True
Else
.Rows("19:19").Hidden = False
End If
If .Range("T20").Value = 1 Then
.Rows("20:20").Hidden = True
Else
.Rows("20:20").Hidden = False
End If
If .Range("T21").Value = 1 Then
.Rows("21:21").Hidden = True
Else
.Rows("21:21").Hidden = False
End If
If .Range("T22").Value = 1 Then
.Rows("22:22").Hidden = True
Else
.Rows("22:22").Hidden = False
End If
If .Range("T23").Value = 1 Then
.Rows("23:23").Hidden = True
Else
.Rows("23:23").Hidden = False
End If
If .Range("T24").Value = 1 Then
.Rows("24:24").Hidden = True
Else
.Rows("24:24").Hidden = False
End If
If .Range("T25").Value = 1 Then
.Rows("25:25").Hidden = True
Else
.Rows("25:25").Hidden = False
End If
If .Range("T26").Value = 1 Then
.Rows("26:26").Hidden = True
Else
.Rows("26:26").Hidden = False
End If
If .Range("T27").Value = 1 Then
.Rows("27:27").Hidden = True
Else
.Rows("27:27").Hidden = False
End If
If .Range("T28").Value = 1 Then
.Rows("28:28").Hidden = True
Else
.Rows("28:28").Hidden = False
End If
If .Range("T29").Value = 1 Then
.Rows("29:29").Hidden = True
Else
.Rows("29:29").Hidden = False
End If
If .Range("T30").Value = 1 Then
.Rows("30:30").Hidden = True
Else
.Rows("30:30").Hidden = False
End If
If .Range("T31").Value = 1 Then
.Rows("31:31").Hidden = True
Else
.Rows("31:31").Hidden = False
End If
End With
End Sub

Anzeige
AW: Laufzeitfehler 1004 bei Call Makro
12.11.2021 09:14:12
Daniel
Hi
wenn der Blattschutz aktiviert ist, dürfen VBA-Makros auch nur das ausführen, was der Anwender auch ausführen darf.
Entweder du stellst beim Aktivieren des Blattschutzes ein, dass der Anwender "Zeilen formatieren" darf (dafür gibts eine Option)
oder du hebst im Makro den Blattschutz auf und setzt ihn hinter wieder (dafür gibts die Befehle Sheets(...).Protect / Unprotect Passwort muss bekannt sein)
Gruß Daniel
Anzeige
AW: Laufzeitfehler 1004 bei Call Makro
12.11.2021 09:27:34
niniha
Danke Daniel für deine Antwort! Ich habe jetzt herausgefunden, dass der Laufzeitfehler nur mit Blattschutz aufgezeigt wird und ohne Blattschutz funktioniert das weiterhin ohne Probleme. Hast du da eine Idee wie dieses Problem behoben werden kann? Jetzt kommt die Meldung: Laufzeitfehler 1004 Die Hidden-Eigenschaft des Range-Objektes kann nicht festgelegt werden. Hier ist der Code der das Problem auslöst. Liegt es dran, dass man mit Blattschutz das Ein- und Ausblenden unterbindet?

Sub Zeilen_ausblenden_EG1_5()
With Tabelle4
If .Range("T13").Value = 1 Then
.Rows("13:13").Hidden = True
Else
.Rows("13:13").Hidden = False
End If
If .Range("T14").Value = 1 Then
.Rows("14:14").Hidden = True
Else
.Rows("14:14").Hidden = False
End If
If .Range("T15").Value = 1 Then
.Rows("15:15").Hidden = True
Else
.Rows("15:15").Hidden = False
End If
If .Range("T16").Value = 1 Then
.Rows("16:16").Hidden = True
Else
.Rows("16:16").Hidden = False
End If
If .Range("T17").Value = 1 Then
.Rows("17:17").Hidden = True
Else
.Rows("17:17").Hidden = False
End If
If .Range("T18").Value = 1 Then
.Rows("18:18").Hidden = True
Else
.Rows("18:18").Hidden = False
End If
If .Range("T19").Value = 1 Then
.Rows("19:19").Hidden = True
Else
.Rows("19:19").Hidden = False
End If
If .Range("T20").Value = 1 Then
.Rows("20:20").Hidden = True
Else
.Rows("20:20").Hidden = False
End If
If .Range("T21").Value = 1 Then
.Rows("21:21").Hidden = True
Else
.Rows("21:21").Hidden = False
End If
If .Range("T22").Value = 1 Then
.Rows("22:22").Hidden = True
Else
.Rows("22:22").Hidden = False
End If
If .Range("T23").Value = 1 Then
.Rows("23:23").Hidden = True
Else
.Rows("23:23").Hidden = False
End If
If .Range("T24").Value = 1 Then
.Rows("24:24").Hidden = True
Else
.Rows("24:24").Hidden = False
End If
If .Range("T25").Value = 1 Then
.Rows("25:25").Hidden = True
Else
.Rows("25:25").Hidden = False
End If
If .Range("T26").Value = 1 Then
.Rows("26:26").Hidden = True
Else
.Rows("26:26").Hidden = False
End If
If .Range("T27").Value = 1 Then
.Rows("27:27").Hidden = True
Else
.Rows("27:27").Hidden = False
End If
If .Range("T28").Value = 1 Then
.Rows("28:28").Hidden = True
Else
.Rows("28:28").Hidden = False
End If
If .Range("T29").Value = 1 Then
.Rows("29:29").Hidden = True
Else
.Rows("29:29").Hidden = False
End If
If .Range("T30").Value = 1 Then
.Rows("30:30").Hidden = True
Else
.Rows("30:30").Hidden = False
End If
If .Range("T31").Value = 1 Then
.Rows("31:31").Hidden = True
Else
.Rows("31:31").Hidden = False
End If
End With
End Sub

Anzeige
Schöne Spaghetti Code :-)
12.11.2021 12:49:57
Yal
... kann man wie folgt zusammenfassen:

Sub Zeilen_ausblenden_EG1_5()
Dim i As Integer
With Tabelle4
For i = 13 To 31
.Rows(i).Hidden = (.Cells(i, "T").Value = 1)
Next
End With
End Sub
_ Wiederholung von 13 bis 31
_ die Prüfung Tx = 1 gibt einen boolean zurück (True/False), den man direkt als Wert für Hidden übergeben kann.
VG
Yal
Anzeige
Gibt es im Paste-Bereich verbundene Zellen?
11.11.2021 20:25:31
Yal
Hallo Niniha,
wenn etwas in einem Zielbereich reinkopiert werden soll, dass nicht zu den original passt, insbesondere wenn im Zielbereich verbundene Zellen vorhadnen sind, dann zickt VBA.
VG
Yal
AW: Gibt es im Paste-Bereich verbundene Zellen?
12.11.2021 08:17:09
niniha
Die beiden Kalkulation sind identisch, also jede Zelle die reinkopiert wird ist gleich mit der Zelle, die kopiert wurde. :(
Anzeige
das antwortet die Frage nicht.
12.11.2021 08:41:55
Yal
Hallo Niniha,
wenn ich die Zellen A1:A2 verbinde und die Zellen B1:B2 verbinde, dann sind Quelle und Ziel identisch.
Es kommt trotzdem eine Fehler 1004, wenn ich versuche A2 in B2 zu kopieren.
VG
Yal
;

Forumthreads zu verwandten Themen

Anzeige
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

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Fehlerprotokoll aktivieren: Gehe zu Extras > Optionen und stelle sicher, dass die Option „bei jedem Fehler“ oder „in Klassenmodul“ ausgewählt ist. Dadurch erhältst du genauere Fehlermeldungen, wenn ein Fehler auftritt.

  3. Code prüfen: Überprüfe deinen Code auf den spezifischen Ort, an dem der Laufzeitfehler 1004 auftritt. Oft ist es hilfreich, den Code schrittweise durchzugehen, um die genaue Stelle zu finden.

  4. Blattschutz deaktivieren: Wenn dein Makro Zeilen ein- oder ausblenden soll, stelle sicher, dass der Blattschutz deaktiviert ist oder dass du im Code den Blattschutz temporär aufhebst.

    Sheets("Tabelle4").Unprotect "deinPasswort"
    ' Dein Code hier
    Sheets("Tabelle4").Protect "deinPasswort"
  5. Fehlerbehebung bei „Hidden-Eigenschaft“: Der Fehler „Die Hidden-Eigenschaft des Range-Objektes kann nicht festgelegt werden“ tritt häufig auf, wenn Blattschutz aktiviert ist. Überprüfe die Berechtigungen beim Blattschutz.


Häufige Fehler und Lösungen

  • Laufzeitfehler 1004 anwendungs- oder objektdefinierter Fehler: Dieser Fehler tritt häufig auf, wenn der Code auf ein nicht existierendes Objekt zugreift oder wenn das Ziel des Codes nicht bearbeitet werden kann (z.B. durch Blattschutz).

    • Lösung: Deaktiviere den Blattschutz oder stelle sicher, dass das Objekt existiert.
  • Fehler 1004 beim Call Makro: Wenn der Fehler bei einem Aufruf eines anderen Makros auftritt, kann es sein, dass der Fehler nicht im aufrufenden, sondern im aufgerufenen Makro liegt.

    • Lösung: Überprüfe den Code des aufgerufenen Makros.

Alternative Methoden

  • Verwendung von On Error Resume Next: Dieser Befehl kann helfen, die Ausführung des Makros fortzusetzen, wenn ein Fehler auftritt.

    On Error Resume Next
    ' Dein Code hier
    On Error GoTo 0
  • Debugging-Tools nutzen: Nutze die Debugging-Tools im VBA-Editor, um den Code Schritt für Schritt auszuführen und den Fehler zu lokalisieren.


Praktische Beispiele

Hier ist ein Beispiel, wie du den Blattschutz beim Ausblenden von Zeilen berücksichtigst:

Sub Zeilen_ausblenden()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Tabelle4")

    ws.Unprotect "deinPasswort"

    If ws.Range("T13").Value = 1 Then
        ws.Rows("13:13").Hidden = True
    Else
        ws.Rows("13:13").Hidden = False
    End If

    ws.Protect "deinPasswort"
End Sub

Wenn du den Blattschutz nicht aufheben möchtest, stelle sicher, dass die entsprechenden Berechtigungen beim Schutz gesetzt sind.


Tipps für Profis

  • Achte darauf, dass deine Makros immer mit Option Explicit beginnen. Dadurch zwingst du dich, alle Variablen zu deklarieren, was Fehler reduziert.
  • Halte den Code so simpel wie möglich. Vermeide überflüssige Schleifen und Bedingungen, um die Lesbarkeit und Wartbarkeit zu erhöhen.
  • Teste deinen Code regelmäßig und dokumentiere Änderungen, um die Fehlersuche zu erleichtern.

FAQ: Häufige Fragen

1. Was bedeutet Laufzeitfehler 1004? Der Laufzeitfehler 1004 ist ein allgemeiner Fehler in Excel VBA, der auftritt, wenn die Ausführung eines Makros auf ein Problem stößt, oft im Zusammenhang mit einem Objekt oder einer Eigenschaft.

2. Wie kann ich den Blattschutz umgehen? Du kannst den Blattschutz in deinem Makro temporär aufheben, indem du Unprotect und Protect verwendest, um Änderungen vorzunehmen.

3. Warum tritt der Fehler nur manchmal auf? Der Fehler kann durch Änderungen in der Arbeitsmappe, wie etwa das Aktivieren des Blattschutzes oder das Löschen von Zellen, die dein Makro benötigt, verursacht werden.

4. Wie kann ich die Hidden-Eigenschaft setzen? Um die Hidden-Eigenschaft zu setzen, stelle sicher, dass der Blattschutz deaktiviert ist oder dass die entsprechenden Berechtigungen beim Blattschutz aktiviert sind.

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