Laufzeitfehler 1004

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Laufzeitfehler 1004
von: Listopherus
Geschrieben am: 26.07.2015 14:41:49

Liebe Excel-Gemeinde,
ich habe ein kleines Makro geschrieben, das tägliche eine Zeile an eine Tabelle anfügt. Das funktioniert auf dem entsprechenden Tabellenblatt über einen CommandButton wunderbar.
Wenn ich aber versuche, es von der Übersicht (Tabelle1) aus zu starten, bekomme ich die wenig aussagekräftige Fehlermeldung "Anwendungs- oder objektdefinierter Fehler".
Hier ist der Code:


Private Sub CommandButton5_Click()
Dim D As Date
Dim c As Long
Sheets("Historie").Activate
ActiveSheet.Range("A65536").End(xlUp).Offset(1, 0).Select
D = ActiveCell.Offset(-1, 0).Value
If Weekday(D + 1) <> 1 And Weekday(D + 1) <> 7 Then
  ActiveCell.Value = D + 1
Else
  ActiveCell.Value = D + 3
End If
c = ActiveSheet.UsedRange.Rows.Count
ActiveSheet.Range(Cells(c - 1, 2), Cells(c - 1, 13)).Select 'Hier kommt die Fehlermeldung
Selection.AutoFill Destination:=Range(Cells(c - 1, 2), Cells(c, 13)), Type:=xlFillDefault
End Sub
Ich habe seit gestern alle möglichen Foren durchwühlt und finde keine Lösung.
Wer kann helfen?
Listopherus

Bild

Betrifft: AW: Laufzeitfehler 1004
von: Daniel
Geschrieben am: 26.07.2015 15:14:36
Hi
in der Zeile fehlt die Tabellenblattangabe vor den beiden Cells innerhalb der Range.
VBA muss dann selbstständig vermuten, auf welches Tabellenblatt du dich hier beziehen willst.
Da sich der Code in einem Tabellenblattmodul befindet, setzt VBA dann dieses Tabellenblatt ein (also das "Modultabellenblatt")
Du schreibst aber vor die Range: "ActiveSheet".
zu diesem Zeitpunkt hast du aber schon das Tabellenblatt gewechselt und das Modultabellenblatt ist nicht mehr das aktive Sheet, somit liegt die Range auf einem anderen Tabellenblatt, als die Cells die die Range definieren sollen und das erzeugt den Fehler.
richtig wäre hier:

ActiveSheet.Range(ActiveSheet.Cells(c - 1, 2), ActiveSheet.Cells(c - 1, 13)).Select

oder das hier, etwas kürzer:
ActiveSheet.Cells(c - 1, 2).Resize(1, 12).Select
das gleiche Prinzip gilt dann natürlich auch für die nächste Programmzeile:
Zellbezüge ohne Tabellenblattangabe davor beziehen sich immer auf das Modultabellenblatt, da sich der Code in einem Tabellenblattmodul befindet.
die selection ist immer auf dem aktiven Blatt.
Daher solltest du dir mit diesem Wissen die nächste Zeile auch nochmal genauer anschauen.
Gruss Daniel

Bild

Betrifft: AW: Laufzeitfehler 1004
von: Listopherus
Geschrieben am: 26.07.2015 15:40:26
Hallo Daniel,
Du hast völlig Recht. Und das Beste ist: Es funktioniert!
Herzlichen Dank für die Hilfe.
Listopherus

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Laufzeitfehler 1004"