Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Kopieren ohne Format - VBA

Kopieren ohne Format - VBA
18.07.2019 08:45:29
Donna
Hallo liebe Forumsgemeinde!
Ich muss ein Makro schreiben, dass Daten aus einer Tabelle in ein Formular per Klicken auf einen Button kopiert.
Ich hab es schon so weit allein geschafft, dass das Makro die letzte beschriebene Zeile in der Tabelle „Basis“ findet, das Tabellenblatt „Vorlage“ kopiert und hinten anhängt. Danach die Kopie umbenennt, die Daten aus der letzten beschriebenen Zeile aus der Tabelle „Basis“ in bestimmte Zellen der Kopie „Vorlage“ einträgt.
Das Problem entsteht genau an dieser Stelle. Es soll nur der Wert der Zelle übernommen werden und nicht die Formatierung. Ich hab natürlich schon einige Hilfestellungen dazu gefunden, nur leider funktioniert nicht eine davon in meinem Makro.
With Worksheets („Basis“)
.Range(„A“ & LZ1).Copy Worksheets(Blattname).Range(„C“).PasteSpecial ...
Sobald ich PasteSpecial wieder raus nehme läuft der Kopiervorgang wieder ohne Probleme. Egal was ich hinter PasteSpecial schreibe es kommt die Meldung „Fehler beim Kompilieren: Erwartet: Anweisungsende“.
PS: LZ1 wurde vorher als letzte Zelle von Spalte A definiert und Blattname wurde als Variable für den neuen Namen des kopierten Tabellenblattes definiert. Wie gesagt ohne PasteSpecial klappt alles einwandfrei.
Ich hoffe ihr könnt mir weiterhelfen, einen Weg zu finden nur die Werte ohne die Formate zu kopieren.
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: extra Codezeile
18.07.2019 08:52:25
hary
Moin
PasteSpecial muss in eine neue Codezeile.
.Range(„A“ & LZ1).Copy
Worksheets(Blattname).Range(„C“).PasteSpecial ...

gruss hary
AW: extra Codezeile
18.07.2019 09:21:47
Rainer
Hallo Donna,
mit einem kleinen "Umweg" lässt sich das kopieren beschleunigen.
Kopiere den Wert erst in eine Variable und schreibe diese in die Zielzelle.
Außerdem hast du auch beim Ziel den Range nicht genau angegeben, es fehlt die Zeilennummer.

Dim CopyARR()
CopyARR = Worksheets („Basis“).Range(„A“ & LZ1)
Worksheets(Blattname).Range(„C“ & ZEILE) = CopyARR
Gruß, Rainer
Anzeige
AW: extra Codezeile
18.07.2019 09:37:18
Donna
Also ich hatte das auch schon probiert (vorgestern oder so). Hab es trotzdem nochmal probiert und es hat wieder so nicht funktioniert. Es kam „Laufzeitfehler 9: Index außerhalb des gültigen Bereichs“
Ich habe unterschiedliche Varianten probiert, weil ich auf meinen Recherchen auf unterschiedliche Schreibweisen gestoßen bin:
Variante 1:
.Range(„A“ & LZ1).Copy
Wirksheets(Blattname).Range(„C4“).PasteSpecial (PastexlPasteValues)
Variante 2:
... .PasteSpecial Paste:=xlPasteValues
Hat beides nicht funktioniert
Anzeige
AW: extra Codezeile
18.07.2019 09:42:50
Nepumuk
Hallo,
versuch es mal so:
Worksheets(Blattname).Range("C4").Value = .Range("A" & LZ1).Value

Wenn es immer noch nicht geht, dann zeig mal die ganze Prozedur.
Gruß
Nepumuk
AW: extra Codezeile
18.07.2019 09:59:13
Donna
Ich gebe hier mal die komplette Prozedur an.
Dim wsBasis As Worksheet
Dim wsVorlage As Worksheet
Dim i As Integer
Dim LZ1 As Long 'letzte Zeile der Spalte A
Dim LZ2 As Long 'lezte Zeile der Spalte B
Dim LZ3 As Long 'lezte Zeile der Spalte C
Dim LZ4 As Long 'letzte Zeile der Spalte D
Dim LZ5 As Long 'letzte Zeile der Spalte E
Dim LZ6 As Long 'letzte Zeile der Spalte F
Dim LZ7 As Long 'letzte Zeile der Spalte G
Dim LZ8 As Long 'letzte Zeile der Spalte H
Dim Blattname As String
'Tabellenblatt "Vorlage" kopieren
i = Sheets.Count
Sheets("Vorlage").Copy After:=Sheets(i)
Worksheets("Basis").Select
SpalteA = "A"
LZ1 = ActiveSheet.Cells(Rows.Count, SpalteA).End(xlUp).Row 'letzte Zeile der Spalte A ermitteln
Sheets(Sheets.Count).Select
ActiveSheet.Name = Worksheets("Basis").Range("A" & LZ1)
Blattname = ActiveSheet.Name
With Worksheets("Basis")
.Range("A" & LZ1).Copy
Worksheets(Blattname).Range("C4").PasteSpecial Paste:=xlPasteValues
End With
End Sup
PS: wie schon gesagt ohne PasteSpecial funktioniert die Prozedur ohne Probleme, sie tut genau das was sie soll. Ich möchte nur die Werte ohne ihre Formatierung kopieren
Anzeige
AW: extra Codezeile
18.07.2019 10:10:38
Nepumuk
Hallo,
ich kann keinen Fehler finden, außer dass die Variable SpalteA nicht deklariert ist. Wie lautet denn die Fehlermeldung und welche Zeile markiert der Debugger?
Gruß
Nepumuk
AW: extra Codezeile
18.07.2019 10:20:57
Donna
Er markiert mir die erste Zeile nach With Worksheet...
Aber das macht er erst seitdem PasteSpecial dabei ist. Vorher hat er mir keinen Fehler angezeigt.
Mal kommt der Fehler „Index außerhalb des Wertebereichs“ und mal kommt „Paste-Methode konnte nicht ausgeführt werden“.
Einmal hatte das Marko ja schon fast alles richtig gemacht. Da hat es die 1. Zelle ohne Formatierung an die richtige Stelle gesetzt, aber dann bei der zweiten Zelle die eingefügt werden sollte kam „Paste-Methode konnte nicht ausgeführt werden“ oder so ähnlich.
Wie sollte die SpalteA denn definiert werden, wenn es daran liegen sollte?
Anzeige
AW: extra Codezeile
18.07.2019 10:30:41
Nepumuk
Hallo,
so wird das nichts. Kannst du eine Mustermappe hochladen mit ein paar Spieldaten damit ich das an deiner Mappe testen kann. Denn in meiner Testmappe funktioniert es ja wie gewünscht. Und die Variable SpalteA musst du als String deklarieren, aber daran kann es nicht liegen.
Gruß
Nepumuk
Anzeige
AW: extra Codezeile
18.07.2019 11:14:11
Donna
Doch es lag daran, dass SpalteA nicht definiert war. Ich hab sie einfach mal definiert und dann ging es plötzlich ohne Probleme.
Vielen Dank für deine Hilfe!
Einen schönen Tag noch!
AW: extra Codezeile
18.07.2019 09:45:43
hary
Moin
Gibt es das Blatt "Blattname"?
Der Blattname muss in Gaensepfoten.
Evtl. Schreibfehler im Blattnamen? Leerzeichen aus versehen Davor/dahinter?
gruss hary
Anzeige
AW: oder einfach nur Value
18.07.2019 09:39:54
hary
Moin nochemal
Nimm einfach Value. Hinter C fehlt evtl. die Zeilennummer
Worksheets(Blattname).Range(„C“).Value = .Range(„A“ & LZ1).Value

gruss hary
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Werte ohne Formatierung kopieren in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um in Excel mit VBA nur die Werte zu kopieren, ohne die Formatierung zu übernehmen, kannst du folgende Schritte befolgen:

  1. Makro erstellen: Öffne den VBA-Editor (Alt + F11) und erstelle ein neues Modul.

  2. Code einfügen: Verwende den folgenden VBA-Code und passe ihn an deine Bedürfnisse an:

    Sub WerteOhneFormatierungKopieren()
       Dim wsBasis As Worksheet
       Dim wsVorlage As Worksheet
       Dim LZ1 As Long  ' letzte Zeile der Spalte A
       Dim Blattname As String
    
       Set wsBasis = Worksheets("Basis")
       LZ1 = wsBasis.Cells(wsBasis.Rows.Count, "A").End(xlUp).Row
    
       ' Kopiere den Wert ohne Formatierung
       Blattname = "DeinBlattname" ' Ersetze dies durch den tatsächlichen Namen
       Worksheets(Blattname).Range("C4").Value = wsBasis.Range("A" & LZ1).Value
    End Sub
  3. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus (Alt + F8).


Häufige Fehler und Lösungen

  • Fehler: "Index außerhalb des gültigen Bereichs"
    Dieser Fehler tritt auf, wenn der Blattname nicht korrekt ist oder das Blatt nicht existiert. Stelle sicher, dass der Blattname korrekt geschrieben ist und keine zusätzlichen Leerzeichen enthält.

  • Fehler: "Paste-Methode konnte nicht ausgeführt werden"
    Dieser Fehler kann auftreten, wenn die PasteSpecial-Methode nicht korrekt verwendet wird. Überprüfe, ob du die Methode wie folgt anwendest:

    Worksheets("Blattname").Range("C4").PasteSpecial Paste:=xlPasteValues
  • Lösung: Variable korrekt deklarieren
    Wenn du Variablen wie SpalteA verwendest, stelle sicher, dass sie korrekt deklariert sind, z. B.:

    Dim SpalteA As String
    SpalteA = "A"

Alternative Methoden

  • Direkte Wertzuweisung: Anstatt die PasteSpecial-Methode zu verwenden, kannst du den Wert direkt zuweisen, wie im folgenden Beispiel:

    Worksheets(Blattname).Range("C4").Value = Worksheets("Basis").Range("A" & LZ1).Value
  • Verwendung von Arrays: Du kannst auch die Werte in ein Array kopieren und dann in die Zielzelle zuweisen:

    Dim CopyARR As Variant
    CopyARR = Worksheets("Basis").Range("A" & LZ1).Value
    Worksheets(Blattname).Range("C4").Value = CopyARR

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du in Excel nur Text kopieren ohne Formatierung kannst:

  1. Werte aus einer Liste kopieren:

    Dim LZ As Long
    LZ = Worksheets("Daten").Cells(Rows.Count, "A").End(xlUp).Row
    Worksheets("Ziel").Range("A1").Value = Worksheets("Daten").Range("A" & LZ).Value
  2. Mehrere Zellen kopieren:

    Dim i As Long
    For i = 1 To 10
       Worksheets("Ziel").Cells(i, 1).Value = Worksheets("Daten").Cells(i, 1).Value
    Next i

Tipps für Profis

  • Verwende .Value, um nur Werte zu kopieren: Wenn du sicherstellen möchtest, dass du nur die Werte ohne Formatierung kopierst, nutze immer die .Value-Eigenschaft.

  • Vermeide die Verwendung von Copy und Paste: Das ständige Verwenden von Copy und Paste kann die Ausführung deines Codes verlangsamen. Setze stattdessen auf direkte Wertzuweisungen.

  • Fehlerbehandlung implementieren: Nutze On Error Resume Next, um mögliche Fehler abzufangen und die Ausführung fortzusetzen.


FAQ: Häufige Fragen

1. Wie kopiere ich Werte aus einer bestimmten Zeile?
Du kannst die Methode .Cells(Zeile, Spalte).Value verwenden, um gezielt Werte aus bestimmten Zellen zu kopieren.

2. Was mache ich, wenn ich Leerzeichen kopieren möchte?
Um Leerzeichen zu vermeiden, kannst du die Trim-Funktion verwenden, um sicherzustellen, dass keine überflüssigen Leerzeichen kopiert werden.

3. Funktioniert dies in jeder Excel-Version?
Ja, die gezeigten VBA-Techniken sind in den meisten modernen Excel-Versionen anwendbar, solange du den VBA-Editor nutzen kannst.

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