Einfärben von Mehreren Zellen - Anwendungsfehler

Bild

Betrifft: Einfärben von Mehreren Zellen - Anwendungsfehler
von: lolap
Geschrieben am: 16.11.2015 15:31:16

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

Bild

Betrifft: AW: Falsche Referenzierung
von: EtoPHG
Geschrieben am: 16.11.2015 15:35:52
Hallo,
Immer wieder falsche Referenzierung der Objekte!

With Worksheets("Komplett")
   .Range(.Cells(LastRow2, 1), .Cells(LastRow2, 35)).Interior.ColorIndex = 43
End With
Gruess Hansueli

Bild

Betrifft: AW: Der Fehlerklassiker der meisten Anfänger
von: Daniel
Geschrieben am: 16.11.2015 15:42:23
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

Bild

Betrifft: AW: Der Fehlerklassiker der meisten Anfänger
von: lolap
Geschrieben am: 16.11.2015 16:01:10
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

Bild

Betrifft: AW: Der Fehlerklassiker der meisten Anfänger
von: Werner
Geschrieben am: 16.11.2015 16:13:15
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

Bild

Betrifft: AW: Der Fehlerklassiker der meisten Anfänger
von: lolap
Geschrieben am: 16.11.2015 16:34:32
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

Bild

Betrifft: AW: Der Fehlerklassiker der meisten Anfänger
von: lolap
Geschrieben am: 16.11.2015 16:39:42
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

Bild

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

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Einfärben von Mehreren Zellen - Anwendungsfehler"