Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Einfärben von Mehreren Zellen - Anwendungsfehler

Einfärben von Mehreren Zellen - Anwendungsfehler
16.11.2015 15:31:16
Mehreren
Hey,
ich habe folgendes Problem:
Wenn ich mein Makro direkt über Run aus dem VBA-Editor ausführe dann klappt der Code meistens, wenn ich aber den Code mit dem damit verknüpften Button aus dem Excel-Sheet starte, dann kommt folgeder Fehler:
Laufzeitfehler 1004:
Anwendungs- oder objektdefinierter Fehler
Danach lässt sich der Code aber auch nicht mehr aus dem Editor heraus starten.
Debuggen liefert mir diese Zeile:
Worksheets("Komplett").Range(Cells(LastRow2, 1), Cells(LastRow2, 35)).Interior.ColorIndex = 43
Vielen Dank schon mal!
lolap

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Falsche Referenzierung
16.11.2015 15:35:52
EtoPHG
Hallo,
Immer wieder falsche Referenzierung der Objekte!
With Worksheets("Komplett")
.Range(.Cells(LastRow2, 1), .Cells(LastRow2, 35)).Interior.ColorIndex = 43
End With
Gruess Hansueli

AW: Der Fehlerklassiker der meisten Anfänger
16.11.2015 15:42:23
Daniel
Hi
du machst den hier den Fehler, den irgendwie alle VBA-Anfänger machen:
beachte folgenden Zusammenhang:
1. ein Zellbezug in VBA (Cells, Range, Columns, Rows) ohne Tabellenblattangabe bezieht sich immer auf:
- Makro liegt in einem allgemeinen Modul (Modul1): das aktive Tabellenblatt
- Makro liegt in einem Tabellenblattmodul (Tabelle1): das Tabellenblatt des Moduls
2. wenn du eine Range über zwei Zellen defninierst (Range(Cells(), Cells()) dann muss die Range auf dem selben Tabellenblatt liegen wie die Zellen, die sie definieren, sonst gibt es einen Fehler
dh du musst das worksheet nicht nur vor der Range angeben, sondern auch vor den beiden Cells:
Worksheets("Komplett").Range(Worksheets("Komplett").Cells(LastRow2, 1), Worksheets("Komplett").Cells(LastRow2, 35)).Interior.ColorIndex = 43
da das den Code etwas aufbläht, empfehle ich andere Methoden um den Zellbereich zu beschreiben, beispielsweise RESIZE statt RANGE:
Worksheets("Komplett").Cells(LastRow2, 1).Resize(1, 35).Interior.ColorIndex = 43
Gruß Daniel

Anzeige
AW: Der Fehlerklassiker der meisten Anfänger
16.11.2015 16:01:10
lolap
Gut Vielen Dank, das löst mein Problem!
Jetzt ist aber noch ein weiteres aufgetaucht:
Ich schreibe durch den Klick auf den angesprochenen Button mit einem Makro in 11 Zeilen x 35 Spalten Daten, dazu wird die erste Freie Zelle in Spalte A gesucht und dann ab da werden die Daten reingeschrieben. Wenn ich das wieder aus dem Editor starte fängt er schön bei A2 an (A1 ist die Überschrift der Tabelle), wenn ich es aber per Button starte fängt er bei A14 an (obwohl A2-A13 leer ist), auch aus dem Editor lässt er dann A2-A13 leer und schreibt unter dem Datensatz dann den nächsten. So ermittele ich die erste freie Zeile zu beginn des Codes:
Sub Fall_erzeugen()
'Erste Freie Zeile finden:
Dim LastRow As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
Worksheets("Komplett").Cells(LastRow, 2).Value = Worksheets("Maske").Cells(3, 2).Value
(...)
End Sub
Danke noch mal!
lolap

Anzeige
AW: Der Fehlerklassiker der meisten Anfänger
16.11.2015 16:13:15
Werner
Hallo,
Sub Fall_erzeugen()
'Erste Freie Zeile finden:
Dim LastRow As Long
With Worksheets("Komplett")
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(LastRow, 2).Value = Worksheets("Maske").Cells(3, 2).Value
(...)
End With
End Sub
Du ermittelst zwar die erste freie Zelle in Spalte A, Überträger die Daten aber in Spalte B.
Gruß Werner

Anzeige
AW: Der Fehlerklassiker der meisten Anfänger
16.11.2015 16:34:32
lolap
Hey, danke für die schnelle Antwort,
ja ich weiß, dass ist Absicht, davor kommt noch was in Spalte A, das Problem ist ja auch, dass er in ZEILE 14 schreibt und nicht in Zeile 1, ich schreibe dann in 35 Spalten was, aber er schreibt immer in die 14. Zeile und nicht in die erste freie...
lolap

Anzeige
AW: Der Fehlerklassiker der meisten Anfänger
16.11.2015 16:39:42
lolap
Hab das Problem gefunden,
habe hier:
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
nicht den Worksheet angegeben, da der Button auf einem anderen als das Worksheet "Komplett" ist.
Danke!
lolap

AW: Der Fehlerklassiker der meisten Anfänger
16.11.2015 16:50:42
Werner
Hallo,
deshalb hatte ich ja auch vor der Codezeilen zum Ermitteln der ersten freien Zeile ein
With Sheets("Komplett")
drin.
Gruß Werner
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Einfärben und Datenübertragung in Excel: Fehlerbehebung und Tipps


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Modul erstellen: Klicke mit der rechten Maustaste auf VBAProject, wähle Einfügen und dann Modul.
  3. Code eingeben: Füge den folgenden Code ein, um mehrere Zellen einzufärben:
    Sub Einfärben()
       With Worksheets("Komplett")
           .Range(.Cells(LastRow2, 1), .Cells(LastRow2, 35)).Interior.ColorIndex = 43
       End With
    End Sub
  4. Makro über Button verknüpfen: Füge einen Button zu deinem Arbeitsblatt hinzu und verlinke ihn mit dem Makro Einfärben.
  5. Makro ausführen: Klicke auf den Button, um das Makro auszuführen und die Zellen einzufärben.

Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Dieser Fehler tritt häufig auf, wenn die Referenzierung nicht korrekt ist. Stelle sicher, dass der Worksheet-Name korrekt geschrieben ist und die Zellen im richtigen Kontext referenziert werden.

  • Falsche Referenzierung: Um sicherzustellen, dass die Zellen im richtigen Arbeitsblatt angesprochen werden, verwende den With-Block:

    With Worksheets("Komplett")
      .Range(.Cells(LastRow2, 1), .Cells(LastRow2, 35)).Interior.ColorIndex = 43
    End With
  • Erste freie Zeile nicht gefunden: Wenn dein Makro beim Klicken auf den Button nicht die richtige erste freie Zeile ermittelt, stelle sicher, dass du das entsprechende Arbeitsblatt angibst:

    LastRow = Worksheets("Komplett").Cells(Rows.Count, 1).End(xlUp).Row + 1

Alternative Methoden

  • Anstelle von Range kannst du die Resize-Methode verwenden, um den Zellbereich kompakt zu definieren:

    Worksheets("Komplett").Cells(LastRow2, 1).Resize(1, 35).Interior.ColorIndex = 43
  • Um die erste freie Zeile effizient zu ermitteln, kannst du auch die Find-Methode nutzen, die oft schneller ist als End(xlUp).


Praktische Beispiele

Hier sind einige Anwendungsbeispiele für das Einfärben von Zellen und das Schreiben in die Excel-Tabelle:

  1. Zellen einfärben:

    Sub ZellenEinfärben()
       With Worksheets("Komplett")
           .Cells(1, 1).Interior.Color = RGB(255, 0, 0) ' Rot
       End With
    End Sub
  2. Daten in die erste freie Zeile schreiben:

    Sub DatenEinfügen()
       Dim LastRow As Long
       With Worksheets("Komplett")
           LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
           .Cells(LastRow, 1).Value = "Neuer Eintrag"
       End With
    End Sub

Tipps für Profis

  • Debugging: Nutze die Debugging-Tools im VBA-Editor, um Probleme schnell zu identifizieren. Setze Haltepunkte und beobachte, wie die Variablen sich verändern.

  • Verwende Option Explicit: Füge dies am Anfang deines Codes hinzu, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler durch Tippfehler zu vermeiden.

  • Dokumentation: Kommentiere deinen Code gut, damit du und andere ihn später leichter verstehen können.


FAQ: Häufige Fragen

1. Was ist der Laufzeitfehler 1004?
Der Laufzeitfehler 1004 tritt auf, wenn Excel ein Problem beim Ausführen deines Makros hat, häufig aufgrund von falschen Referenzen oder nicht gefundenen Objekten.

2. Wie kann ich die erste freie Zeile effizient finden?
Du kannst die Methode End(xlUp) verwenden, um die letzte gefüllte Zelle zu finden und dann einen Schritt weiter nach unten zu gehen, um die erste freie Zeile zu ermitteln.

3. Warum funktioniert mein Makro nicht, wenn ich es über einen Button starte?
Stelle sicher, dass der Button im richtigen Arbeitsblatt platziert ist und dass alle Referenzen im Code auf das korrekte Arbeitsblatt zeigen.

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