Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1240to1244
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Laufzeitfehler 1004 bei Cells(1,1)

Laufzeitfehler 1004 bei Cells(1,1)
Sven
Liebe VBA Profis,
ich habe eine Rechnungsvorlagendatei aus der ich per Button bestimmte Werte in eine eigenständige Rechnungslistendatei kopieren möchte. Das kopieren zwischen den Dateien habe ich mit dem Makrorekorder von Excel bewerkstelligt, funktioniert auch soweit. Da nun aber die Rechnungsvorlagendatei immer beim speichern einen neuen Dateinamen erhält und mit dieser dann weitergearbeitet wird, habe ich den Code manuell erweitert und angepasst. Damit nun immer die nächste freie Zeile in der Rechnungsliste gesucht wird, habe ich mit Hilfe diese Forums die Range.Attribute in der Rechnungsliste angepasst.
Und hier liegt nun auch irgendwie der Fehler. Als Fehler Meldung erhalte ich "Lauftzeitfehler 1004 Anwendungs- oder objektdefinierter Fehler".
Da das ganze schoneinmal lief, verstehe ich das Problem nicht.
Vielleicht kann mir ein Profi mal unter die Arme greifen an bei der Code:
Vielen Dank schonmal im Vorraus.

Sub btn_Werte()
' btn_Werte Makro
Dim vEingabe As Variant
Dim vEingabe2 As Variant
Range("AC10").Select
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
->  Cells(1, 1).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Range("AF10").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Cells(1, 2).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Range("AF11").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Cells(1, 3).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Range("AF14").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Cells(1, 4).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Range("AC13").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Cells(1, 5).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Range("AB42").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Cells(1, 6).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Range("AB21").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Cells(1, 7).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Range("AF16").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Cells(1, 8).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Range("AC12").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Cells(1, 9).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Range("D7").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Cells(1, 10).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
vEingabe = InputBox("Bitte Ertragskonto eingeben:", "Irgendwas eingeben", "1690")
If vEingabe = "" Then
MsgBox "Der Benutzer hat abgebrochen oder nix eingegeben!"
Else
Windows("Rechnungsliste.xlsx").Activate
Cells(1, 11).End(xlDown).Offset(1, 0) = vEingabe
End If
ActiveWindow.ActivatePrevious
vEingabe2 = InputBox("Bitte ZBL eingeben:", "Irgendwas eingeben", "0")
If vEingabe2 = "" Then
MsgBox "Der Benutzer hat abgebrochen oder nix eingegeben!"
Else
Windows("Rechnungsliste.xlsx").Activate
Cells(1, 12).End(xlDown).Offset(1, 0) = vEingabe2
End If
ActiveWindow.ActivatePrevious
MsgBox "Die Werte wurden übertragen!"
End Sub

AW: Laufzeitfehler 1004 bei Cells(1,1)
20.12.2011 12:31:11
Reinhard
Hallo Sven,
setz mal
MsgBox Cells(1, 1).End(xlDown).Address
vor die fehlerhafte zeile, was wird denn angezeigt?
Gruß
Reinhard
AW: Laufzeitfehler 1004 bei Cells(1,1)
20.12.2011 12:40:56
Sven
Hallo Reinhard,
vielen Dank für die schnelle Anwort.
Habe deine Zeile eingefügt und erhalte Laufzeitfehler 438 Objekt unterstützt diese Eigenschaft oder Methode nicht! :-(
Grüße Sven
AW: Laufzeitfehler 1004 bei Cells(1,1)
20.12.2011 12:46:07
Reinhard
Hallo Sven,
hast du einen Übertragungsfehler gemacht? Die Codezeile ist okay.
Gruß
Reinhard
AW: Laufzeitfehler 1004 bei Cells(1,1)
20.12.2011 12:51:05
Sven
Hallo Reinhard,
hier der Code:
Range("AC10").Select
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
MsgBox Cells(1, 1).End(xlDown).Adress
Cells(1, 1).End(xlDown).Offset(1, 0).Select
Gruß Sven
Anzeige
AW: Laufzeitfehler 1004 bei Cells(1,1)
20.12.2011 12:53:19
Sven
Hallo Reinhard,
sorry habe ein d in address vergessen.
Hier der Text: $A$1048576
AW: Laufzeitfehler 1004 bei Cells(1,1)
20.12.2011 12:57:42
Reinhard
Hallo Sven,
dann ist der Fehler 438 weil du Zelle $A$1048577 selektieren willst und die gibt es nicht.
    Range("AC10").Select
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
If Cells(Rows.Count, 1).Value  "" Then
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
Else
MsgBox "Die Wanne ist voll"
Exit Sub
End If

Gruß
Reinhard
Korrektur
20.12.2011 12:59:14
Reinhard
Hallo Sven,
    Range("AC10").Select
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
If Cells(Rows.Count, 1).Value = "" Then
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
Else
MsgBox "Die Wanne ist voll"
Exit Sub
End If

Gruß
Reinhard
Anzeige
AW: Korrektur
20.12.2011 13:13:04
Sven
Hallo Reinhard,
habe deinen Code eingefügt und erhalte "wanne ist voll". Da aber die Rechnungsliste bisher nur Werte in A1 - L1 nämlich die Tabellenüberschrift stehen hat, sollte doch zur nächsten freien zeile gesprungen werden oder irre ich mich da?
AW: Korrektur
20.12.2011 13:19:30
Reinhard
Hallo Sven,
genau das macht mein Code:
Sub test()
Range("AC10").Select
Selection.Copy
Windows(1).Activate
If Cells(Rows.Count, 1).Value = "" Then
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
Else
MsgBox "Die Wanne ist voll"
Exit Sub
End If
End Sub

Gruß
Reinhard
AW: Korrektur
20.12.2011 14:42:32
Sven
Hallo Reinhard,
ich habe mir eure Hinweise versucht zu Herzen zu nehmen und den Code abgewandelt. Jetzt funktioniert es bis zur 4. Spalte und dann kommt wieder der Laufzeitfehler 1004, mit den Bezug auf $D$1048576.
Was mache ich nur falsch?
Anbei der abgewandelte Code:
Sub btn_Werte()
' btn_Werte Makro
Dim vEingabe As Variant
Dim vEingabe2 As Variant
Range("AC10").Select
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Sheets("Tabelle1").Activate
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Sheets("Rechnung").Activate
Range("AF10").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Sheets("Tabelle1").Activate
Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Sheets("Rechnung").Activate
Range("AF11").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Sheets("Tabelle1").Activate
Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Sheets("Rechnung").Activate
Range("AF14").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Sheets("Tabelle1").Activate
Cells(Rows.Count, 4).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Sheets("Rechnung").Activate
Range("AC13").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Sheets("Tabelle1").Activate
Cells(Rows.Count, 5).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Sheets("Rechnung").Activate
Range("AB42").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Sheets("Tabelle1").Activate
Cells(Rows.Count, 6).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Sheets("Rechnung").Activate
Range("AB21").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Sheets("Tabelle1").Activate
Cells(Rows.Count, 7).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Sheets("Rechnung").Activate
Range("AF16").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Sheets("Tabelle1").Activate
Cells(Rows.Count, 8).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Sheets("Rechnung").Activate
Range("AC12").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Sheets("Tabelle1").Activate
Cells(Rows.Count, 9).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Sheets("Rechnung").Activate
Range("D7").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Rechnungsliste.xlsx").Activate
Sheets("Tabelle1").Activate
Cells(Rows.Count, 10).End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ActivatePrevious
Sheets("Rechnung").Activate
vEingabe = InputBox("Bitte Ertragskonto eingeben:", "Irgendwas eingeben", "1690")
If vEingabe = "" Then
MsgBox "Der Benutzer hat abgebrochen oder nix eingegeben!"
Else
Windows("Rechnungsliste.xlsx").Activate
Cells(Rows.Count, 11).End(xlDown).Offset(1, 0) = vEingabe
End If
ActiveWindow.ActivatePrevious
Sheets("Rechnung").Activate
vEingabe2 = InputBox("Bitte ZBL eingeben:", "Irgendwas eingeben", "0")
If vEingabe2 = "" Then
MsgBox "Der Benutzer hat abgebrochen oder nix eingegeben!"
Else
Windows("Rechnungsliste.xlsx").Activate
Cells(Rows.Count, 12).End(xlDown).Offset(1, 0) = vEingabe2
End If
ActiveWindow.ActivatePrevious
Sheets("Rechnung").Activate
MsgBox "Die Werte wurden übertragen!"
End Sub

Anzeige
Optimiertes Makro : Werte übertragen
20.12.2011 15:11:08
NoNet
Hallo Sven,
wenn die Daten in der Mappe "Rechnungsliste" immer in die gleiche Zeile eingetragen werden soll (also immer in die Zeile 2 aller Spalten, oder Zeile 3 aller Spalten etc.), dann sollte dieses optimierte und übersichtlichere Makro genügen (bitte testen) :
Sub btn_Werte()
' btn_Werte Makro
Dim vEingabe As Variant
Dim vEingabe2 As Variant
Dim wbAkt As Workbook, wbRechnung As Workbook, wsRListe As Worksheets
Dim lngLZ As Long
Set wbAkt = ActiveWorkbook
Set wbRechnung = Workbooks("Rechnungsliste.xlsx")
Set wsRListe = wbRechnung.Sheets("Tabelle1")
'Letzte belegte Zeile +1 ermitteln :
lngLZ = wbRechnung.Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row + 1
wsRListe.Cells(lngLZ, 1) = Range("AC10")
wsRListe.Cells(lngLZ, 2) = Range("AF10")
wsRListe.Cells(lngLZ, 3) = Range("AF11")
wsRListe.Cells(lngLZ, 4) = Range("AF14")
wsRListe.Cells(lngLZ, 5) = Range("AC13")
wsRListe.Cells(lngLZ, 6) = Range("AB42")
wsRListe.Cells(lngLZ, 7) = Range("AB21")
wsRListe.Cells(lngLZ, 8) = Range("AF16")
wsRListe.Cells(lngLZ, 9) = Range("AC12")
wsRListe.Cells(lngLZ, 10) = Range("D7")
vEingabe = InputBox("Bitte Ertragskonto eingeben:", "Irgendwas eingeben", "1690")
If vEingabe = "" Then
MsgBox "Der Benutzer hat abgebrochen oder nix eingegeben!"
Else
wsRListe.Cells(lngLZ, 11) = vEingabe
End If
vEingabe2 = InputBox("Bitte ZBL eingeben:", "Irgendwas eingeben", "0")
If vEingabe2 = "" Then
MsgBox "Der Benutzer hat abgebrochen oder nix eingegeben!"
Else
wsRListe.Cells(lngLZ, 12) = vEingabe2
End If
MsgBox "Die Werte wurden übertragen!"
End Sub
Gruß, NoNet
PS: Benenne Dein bestehendes Makro "

Sub btn_Werte()
" zuvor z.B. in "

Sub btn_Werte_Alt()
" um !
Anzeige
AW: Optimiertes Makro : Werte übertragen
20.12.2011 19:18:28
Sven
Hallo NoNet,
´vielen Dank für die viele Arbeit die Du dir machst.
Ich habe eben deien Code ausprobiert.
Bei folgendem Codeteil kommt Laufzeitfehler 13 Typen unverträglich
Set wsRListe = wbRechnung.Sheets("Tabelle1")

AW: Optimiertes Makro : Werte übertragen
20.12.2011 19:36:40
Reinhard
Hallo Sven
ändere
wsRListe As Worksheets
in
wsRListe As Worksheet
Gruß
Reinhard
AW: Optimiertes Makro : Werte übertragen
21.12.2011 08:35:35
Sven
Hallo Reinhard,
Super, das funktioniert 1a. Ich bin euch wirklich dankbar. Ich wünsche euch allen die in diesem Forum mitarbeiten ein Frohes Fest.
Viele Grüße
Sven
Dir fehlt ein "d" :-) o.w.T.
20.12.2011 12:53:21
Reinhard


Anzeige
AW: Dir fehlt ein "d" :-) o.w.T.
20.12.2011 13:00:11
Sven
Hallo Reinhard,
ja hatte ich dann auch gesehen :-)
Hallo Reinhard,
sorry habe ein d in address vergessen.
Hier der Text: $A$1048576

Letzte Zelle erreicht oder Diagrammblatt ?
20.12.2011 13:00:17
NoNet
Hallo Sven,
mit .Offset(1,0) setzt Du den Zellzeiger um 1 Zeile nach unten - das geht natürlich NUR, wenn noch nicht die letzte Zelle erreicht ist. Das wäre z.B. der Fall, wenn :
- Nur Zelle A1 in Spalte A gefüllt ist
- Oder : ALLE Zellen der Spalte A gefüllt sind
- oder : Alle gefüllten Zellen der Spalte A ausgeblendet sind
- oder : Das Fenster vor der letzten Zelle fixiert ist
In diesen 4 genannten Fällen ist der Fehler logisch nachvollziehbar !
Auch wenn die referenzierte Zelle geschützt ist und nur ungeschützte Zellen aktiviert werden können, wird ein Fehler erzeugt.
Andere mögliche Ursache : Mit Windows("Rechnungsliste.xlsx").Activate wird ja nur die Mappe aktiviert - unabhängig davon, welches Tabellenblatt dort gerade aktiv ist. Sollte das aktive Blatt in dieser Mappe z.B. ein Diagrammblatt sein, so existiert darin keine Zelle - ergo kann dort auch keine Zelle referenziert/aktiviert werden ! Stelle also sicher, dass auch wirklich das gewünschte Tabellenblatt in der Mappe aktiv ist, z.B. : Sheets("Tabelle1").Activate
Gruß, NoNet
Anzeige
99 %ig richtig
20.12.2011 13:10:09
Reinhard
Hallo NoNet,
Sheets("Tabelle1").Activate ist nur zu 99% sicher, denn Usern muß man alles zutrauen, auch daß sie ein Diagrammblatt "tabelle1" nennen :-)
Worksheets("Tabelle1").Activate
Aber da kann man ja noch überprüfen ob es das Blatt überhaupt gibt u.v.m.
Ich schreibe an sich nur wegen
https://www.herber.de/forum/messages/1242815.html
Danke
Gruß
Reinhard
AW: 99 %ig richtig
20.12.2011 13:20:32
Sven
Hallo NoNet,
in der Rechnungsliste liegen nur die Tabellenüberschriften ab A1-L1. Somit sollte doch mit offset die Zeile um eins nach unten rutschen und dann einfügen?
Vielen Dank für eure Geduld mit einem Noob!
Grüße Sven
Hallo Sven,
mit .Offset(1,0) setzt Du den Zellzeiger um 1 Zeile nach unten - das geht natürlich NUR, wenn  _
noch nicht die letzte Zelle erreicht ist. Das wäre z.B. der Fall, wenn :
- Nur Zelle A1 in Spalte A gefüllt ist

Anzeige
Fehlinterpretation : .End(Xldown)
20.12.2011 14:56:43
NoNet
Hallo Sven,
da hast Du diese Codezeile falsch interpretiert :
Cells(1, 1).End(xlDown).Offset(1, 0).Select
Diese Codezeile bewirkt folgendes :
- von Zelle A1 ausgehend die Tastenkombination Strg+Ende drücken um an das "Ende der Liste" zu springen (wenn nur Daten in Zeile 1 stehen, ist das "Ende der Liste" die letzte Tabellenzeile !) und von dort aus nochmal 1 Zeile tiefer markieren.
Wenn die Tabelle z.B. von Zeile 1 bis Zeile 10 gefüllt ist, funktioniert das, dann wird von A1 aus die Zelle A10 (="Ende der Liste") und dann nochmal 1 Zeile tiefer : Zelle A11 markiert.
Wenn jedoch nur die Überschriften in der Tabelle stehen oder eine der anderen genannten Voraussetzungen zutreffen, dann versucht der Code 1 Zeile unterhalb der letzten Tabellenzeile (also unterhalb der maximalen Zeilennr. 1.048.576 = 2^20) zu markieren - und das geht natürlich nicht !
Das was Du meintest ("...Somit sollte doch mit offset die Zeile um eins nach unten rutschen ...") bezieht sich auf "1 Zeile tiefer" (oder in VBA : .Offset(1,0) ) - würde aber (bezogen auf nur gefüllte Zeile 1) nur so funktionieren : Cells(1,1).Offset(1,0).Select was soviel bedeutet wie : Von Zelle A1 ausgehend 1 Zeile tiefer (ohne den Teil mit dem .End(Xldown) !!
Ich hoffe, ich konnte Dir das etwas näher bringen und verständlich machen...
Gruß, NoNet
Anzeige
AW: Fehlinterpretation : .End(Xldown)
20.12.2011 15:39:38
Sven
Hallo NoNet,
vielen vielen Dank für die ausführlichen Erklärungen.
Ich habe es hinbekommen. :-)
Vielen Dank an Dich und Reinhard.
Grüße Sven
Strg+Ende muss Strg+Pfeil runter heißen _oT
20.12.2011 15:47:52
NoNet
_oT = "ohne Text"

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige