Copy Paste Problematik...

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ereza.

    Copy Paste Problematik...

    Liebe Community...

    ich habe eine copy paste Problematik... weiß aber eigentlich nicht warum...

    es soll etwas in ein anderes tabellenblatt, das neu erstellt wird "zwischenkopiert" werden und dann von dort wieder später ins alte Arbeitsblatt zurückkopiert werden...
    mit all den Formatierungen (auch Spaltenbreiten....)

    habe mir Haltepunkte gesetzt um zu schauen.. ob Excel tatsächlich das in das "Zwischenarbeitsblatt" einfügt... weil... kopieren tut ers... (also es ist im speicher dann vorhanden... -> habe ich geprüft, da ich an dieser stelle händisch, pers maus eingefügt habe...) aber, Excel selbst, fügt es dann mit PasteSpecial nicht ein!! und ich weiß nicht warum... :(

    mein code:

    Visual Basic-Quellcode

    1. Private Sub CommandButton1_Click()
    2. Dim wksa As Worksheet
    3. Dim wksn As Worksheet
    4. Set wksa = Worksheets("6 - Gesamt-Bestellungen") 'Active Worksheet entspricht "Tabelle1"
    5. Set wksn = Worksheets.Add(After:=Worksheets("Tabelle1"))
    6. wksn.Name = "Zwischenablage"
    7. wksa.Select
    8. wksa.Range("AF2:AG32").Copy
    9. wksn.Select
    10. wksn.Cells(1, 1).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    11. wksa.Select
    12. CODE DAZWISCHEN.... andere Sachen werden ausgeführt...
    13. wksn.Select
    14. wksn.Range("A1:B31").Copy
    15. wksa.Select
    16. wksa.Range("AF2").PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    17. Application.CutCopyMode = False
    18. Application.DisplayAlerts = False 'Fehlermeldungen (Abfrage ob Tabellenblatt wirklich gelöscht werden soll) werden deaktiviert
    19. 'wksn.Delete '"Hilfstabellenblatt" wird gelöscht
    20. 'Application.DisplayAlerts = True
    21. 'wksa.Select
    22. 'Range("AF2").Select
    23. End Sub


    Könnt ihr mir da vl. weiterhelfen?? woran könnte das liegen?

    Vielen Dank,
    LG Tim
    Ich weiss nicht so genau, was du da so rumkopierst, aber du kannst dir mal überlegen, warum dieser Code funktioniert und deiner nicht ;)

    Visual Basic-Quellcode

    1. Range("A1:F1").Copy
    2. Range("G1:L1").PasteSpecial (xlPasteColumnWidths)


    Im übrigen halte ich wenig von Copy/Paste und liebe die Direktzuweisung

    Visual Basic-Quellcode

    1. For i = 1 To 6
    2. Columns(i + 6).ColumnWidth = Columns(i).ColumnWidth
    3. Next

    Und zur Erklärung, weshalb Copy/Paste schlecht ist:
    Der Pastebuffer kann jederzeit von parallel laufenden Anwendungen sowie von User-Interaktion beeinflusst werden und damit deinen Programmablauf stören.

    Ansonsten arbeite ich selten mit festen Spaltenbreiten, sonder überlasse das der Intelligenz von Excel:
    ​UsedRange.EntireColumn.AutoFit
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    ja ich kann deinen Standpunkt schon verstehen... und da stimme ich dir auch zu...

    deine Methode ist sicherlich bei weitem smarter, unabhängiger und somit auch "stabiler".... nur.... ich bin vom Level her, was VBA-Programmierung angeht.... gaaanz wo anders wie du... ;)
    und.... da muss ich zuerst mal mit dem arbeiten... das ich jz mittlererweile ein wenig kennengelernt habe... weil... damit man diese ganzen schönen Lösungen anwenden kann... muss man zuerst mal das Wissen und die Erfahrung darüber haben... und in meinem Fall... fehlt da beides...

    Aber deine Erklärung macht absolut Sinn! - Und ich denke mal... wenn ich in VBA viel mehr Wissen und Erfahrung hätte... dann würde ich das bestimmt auch wesentlich smarter lösen... ^^... aber wie gesagt... "hätte" ;)

    zu deiner Anmerkung bzgl. warum dein code geht und meiner nicht....

    ich weiß es leider immer noch nicht genau... weil es bei mir immer noch nicht klappt :(
    was ich sehe... ich habe das "Range" beim einfügen vergessen.... und ich sehe... du lässt von der Bereichsgröße her... gleichwertig einfügen.... (also 6 Zellen --> A1 bis F1 und auch 6 Zellen beim einfügen --> G1 bis L1)
    und du hast nur xlPasteColumnWidths stehen und nicht noch die anderen Parameter... - aber an dem glaube ich liegts nicht...

    Wenn ich allerdings das mit Range ausbessere... bleibt die Situation aber leider unverändert... :(
    er kopierts und hats im zwischenspeicher... fügt aber nicht ein...
    ja... und ich habe halt auch noch die tabellenblatt-Zuweisung... also...:

    wksa.Range.....
    und
    wksn.Range....

    aber leider haut es nicht hin....

    ich probier mal weiter...



    NACHTRAG:

    Wenn ich xlPasteAll verwende... funktionierts problemlos!! nur stimmt dann eben der Spaltenabstand nicht... den nimmt er nicht mir... aber ich kapier das nicht... normalerweise muss Excel das doch ganz normal einfügen können... nur eben mit der Option die Spaltenbreiten mitzunehmen...?? ich verstehs grad echt nicht :(


    Tja... jz mach ichs eben einfach so... dass ich 2 mal paste... zuerst mal die Spaltenbreite... weil scheints... fügt Excel da ja dann wirklich nur die Spaltenbreite ein.... und sonst nix...
    und dann gleich nochmals, mit pasteAll den Inhalt...
    und die Sache hat sich...

    naja... dachte eigentlich dass bei xlPasteColumnWidth auch der Inhalt mit geht... aber gut...

    wieder a bissl schlauer geworden...



    DANKE aber wieder für die Erklärungen!


    LG Tim

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ereza“ ()

    .. nur.... ich bin vom Level her, was VBA-Programmierung angeht.... gaaanz wo anders wie du...


    Und genau deswegen würde ich auf diese Tips hören! Nur weil du anfängst heißt es ja nicht, dass du scheiße programmieren musst.
    Denn der Nachteil von Copy und Paste in Excel ist nicht nur, dass die Zwischenablage von jedem verwendet wird und damit verändert werden kann, sondern das durch diese Select und Copy Sachen das ganze zu "Zappel" Makros wird, was unschön aussieht und eben auch durch Userinteraktionen beinträchtigt werden kann (Wenn er im Excel rumklickt zB wird die Selection "zerschossen")
    Das ist meine Signatur und sie wird wunderbar sein!
    hmmm... ich verstehe...!

    ja, da habt ihr schon recht... auch wenns für mich schwieriger ist... - weil der Code zum Schreiben, für mich dann schwieriger ist... ABER da ist ma auf jeden Fall dann schon besser dran, wenn man es gleich von Anfang an "unempfindlich" programmiert...

    also... werde ich beherzigen! ;)

    Danke füre eure Tipps!!

    LG Tim