Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Error 1004 PasteSpecial xlPasteValues
#1
Hallo Excel Profi

Mit dem selbst gebastelten VBA Script versuche ich aus der Tabelle Bestellung die aktive Zelle mit der ganzen Zeile in der Tabelle Archive zu kopieren, dort wo die letzte leere Zeile ist.
 
Ich bekomme nach dem Ausführen des Script Fehler 1004, an der Stelle
.PasteSpecial xlPasteValues
ws2.Range("A" & lastRow).PasteSpecial xlPasteValues
 
irgendeine Idee wie ich den Fehler im Script beseitigen kann?
Danke für Eure Hilfe
 
 

Sub cc()

    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim lastRow As Long
    Dim selectedRow As Long
   
    Const xlPasteValues As Long = 4163
   
    Set ws1 = ThisWorkbook.Sheets("Bestellung")
    Set ws2 = ThisWorkbook.Sheets("Archive")
    selectedRow = ActiveCell.Row
   
    lastRow = ws2.Cells(ws2.rows.Count, "A").End(xlUp).Row + 1
    ws1.rows(selectedRow).EntireRow.Copy ws2.Range("A" & lastRow)
    ws2.Range("A" & lastRow).PasteSpecial xlPasteValues


End Sub
Antworten Top
#2
Moin!
Ernsthaft!
Das hat ja was, einer Konstante per Zuweisung einen falschen Wert zuzuweisen …
Die "fest verdrahtete" Konstante xlPasteValues hat den Wert -4163 und nicht 4163
Niemals nie sollte man auf die abstruse Idee kommen einer Variablen oder Konstanten einen bereits vergebenen Namen zu spendieren!
Zum Rest des Codes hülle ich den Mantel des Schweigens …
Aber vielleicht reichte Dir ja schon der Wink?

Egal, noch etwas genauer:
Es gibt die Vorfahrtsregel rechts vor links.
Du deklarierst sie mittels
Const Vorfahrtsregel = links vor rechts
um.
Du hältst Dich fortan daran und wunderst Dich, dass es an der nächsten Kreuzung zum Unfall kommt?

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#3
Hallo

was du da mit Const festgelegt hast ist mir auch ein Rätsel, das kollidiert aber mit VBA Schlüsselwörtern!

Ich musste aber zweimal hinschauen um den Fehler in deinem Code zu erkennen. Was machst du da wirklich??
Kopierst du zuerst alle Werte, um die Zellen Formate mit zu kopieren??  Achte bitte mal auf diesen Befehl!
  ws1.rows(selectedRow).EntireRow.Copy ws2.Range("A" & lastRow)    Ein zusammenhängender Befehl!

Das ist ein in sich abschlossener Copy Befehl, kurze Syntacs, der den Kopiermodus IMMER aufhebt!
Danach kommt ein Kopierbefehl, an dessen Ende du den Kopiermodus selbst abschalten müsstest!
Der nachfolgende PastSpecial Befehl findet aber keinen -Copy Modus- mehr, der ist ja abgeschaltet!
Im Prinzip kannst den nachfolgenden Befehl einfach löschen.  Der hat keine Funktion mehr.

mfg Gast 123
Antworten Top
#4
Danke an Euch beide

... jetzt funktioniert einwandfrei
Antworten Top
#5
Nur noch ergänzend:
(28.06.2024, 19:36)Gast 123 schrieb: was du da mit Const festgelegt hast ist mir auch ein Rätsel, das kollidiert aber mit VBA Schlüsselwörtern!
Hinter allen Excel- und VBA-Konstanten "verbergen" sich Zahlen.
Dies kann man sehr einfach mittels ?Konstante und Enter im Direktfenster überprüfen.
Code:
?vbRed
255
?xlPasteFormulasAndNumberFormats
11
?xlPasteValues
-4163

Und wie oben bereits geschrieben, verbietet es sich, einen reservierten Konstantennamen zu missbrauchen und ihn dann mit einem "falschen" Wert zu überschreiben.
Deklarierte Variablen/Konstanten haben im Ablauf des Makros nämlich Vorrang.
Mal ein bewusst dämliches Beispiel:
Code:
Sub Tinnef()
Dim vbRed As Long
vbRed = vbGreen
ActiveCell.Interior.Color = vbRed
End Sub
→ Die aktive Zelle wird grün und nicht etwa rot formatiert.

Two Cents,
Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#6
Hallo

@Ralf   wie sagte mal ein grieschicher Gelehrter:  "ich weiss, das ich nichts weiss..."   Wieder was gelernt!
Das mit dem Direktfenster habe ich nie ausprobiert.  Interessant ...

mfg Gast 123
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste