aus zwei verschiedenen Arbeitsblätter verschiedene Spalten in ein Arbeitsblatt kopieren

  • Excel

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    aus zwei verschiedenen Arbeitsblätter verschiedene Spalten in ein Arbeitsblatt kopieren

    Hallo Leute,

    komme seit 2Std. zu keiner Lösung. Google konnte mir auch nicht weiter helfen.

    Ich muss mit Excel 2000 und durch ein Button(Schaltfläche) einen Excel File öffnen.
    Danach im ersten Arbeitsblatt (hier ändert sich ständig der Name des Arbeitsblattes), einen Gewissen Bereich kopieren und
    in eine Excel Datei einfügen. Gleichzeitig muss aber ein anderes Arbeitsblatt, wieder ein bestimmter Bereich kopiert und eingefügt werden.(beim zweiten
    ist der Name des Arbeitsblattes immer gleich.

    Mein Code:

    Private Sub CommandButton1_Click()


    Dim Ziel As Workbook
    Set Ziel = ThisWorkbook

    Application.Dialogs(xlDialogOpen).Show

    Range("B1:B2").Copy
    Windows("Template_Vorlage_Auswertung_TDR_aus_Soundbookdaten.xls").Activate
    Range("A1").Select
    ActiveSheet.Paste

    ' ab hier muss ein befehl reinkommen, um die davor geöffnete Excel Mappe zu öffnen '

    Sheets("FRF H1").Range("A2:AI12802").Copy
    Windows("Template_Vorlage_Auswertung_TDR_aus_Soundbookdaten.xls").Activate
    Sheets("FRF vertikal komplex").Select
    Range("A4").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
    Sheets("FRF vertikal komplex").Select

    End Sub














    Vielen Dank!
    Danke für den Ansatz, bekomms trotzdem i.wie nicht hin.

    ;(



    Öffnen mit, erscheint nach einer Auswahl, nocheinmal. Danach spuckt er mir einen Fehler und markiert die wb.Sheets(1)Range("B1:B2")...... Zeile gelb an.

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

    danielstern schrieb:

    wb.Sheets(1)Range("B1:B2")
    Tippfehler. Du solltest korrekt abschreiben oder Copy/Paste verwenden.

    danielstern schrieb:

    Öffnen mit, erscheint nach einer Auswahl, nocheinmal.
    Nicht, wenn du den von mir vorgeschlagenen Code verwendest.

    Zeig mal deinen jetzigen Code.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    jetzt spinnt er ganz rum.

    Private Sub CommandButton1_Click()


    Dim Ziel As Workbook
    Set Ziel = ThisWorkbook

    Application.Dialogs(xlDialogOpen).Show

    If Application.Dialogs(xlDialogOpen).Show Then
    Set wb = ActiveWorkbook
    wb.Sheets(1).Range("B1:B2").Copy ThisWorkbook.Sheets(1).Range("A1")
    wb.Close False
    End If


    Sheets("FRF H1").Range("A2:AI12802").Copy
    Windows("Template_Vorlage_Auswertung_TDR_aus_Soundbookdaten.xls").Activate
    Sheets("FRF vertikal komplex").Select
    Range("A4").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
    Sheets("FRF vertikal komplex").Select



    End Sub



    Das ist mein zweiter Tag mit VBA, deshlab hab ich kein System und versteh auch die Hälfte nicht was da so drinsteht im Code. :(
    Application.Dialogs(xlDialogOpen).Show
    If Application.Dialogs(xlDialogOpen).Show Then
    Works as designed.
    Zweimal .Show -> zwei Dialoge.
    Den ersten Aufruf kannst du beruhigt in die Tonne treten.

    Versuche zu verstehen, was du codest, sonst wirst du nicht glücklich.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hast Recht, nur habe ich grad nicht die Zeit dazu um was zu verstehen. Es soll nur funktionieren! ;)

    jetzt öffnet sich nur noch ein "öffnen mit".

    Aber nun hab ich ein Laufzeitfehler 1004
    Irgendwas soll Schreibgeschützt sein, obwohl ich keinen Schutz drin hab.

    :(

    Kann man das Problem auch ganz anders Lösen?
    Du begehst so ziemlich alle Sünden, die man als VBA-Programmierer begehen kann.
    Wenn du einer Aufzeichnung des Macrorecorders blind vertraust, kommt halt Murks dabei raus.
    Der Macrorecorder ist gut geeignet, um sich Tipps zu holen, welche Objekte und Methoden man verwenden kann.
    Aber die verwendeten Methoden bilden halt exakt die Mausklicks nach und nicht das eigentliche Ziel.

    Wenn du aus deinem Code alle interaktiven Methoden (.Select .Activate .Paste) entfernst, kommst du langsam in die richtige Richtung.

    Aber nun hab ich ein Laufzeitfehler 1004
    Bitte poste immer die Code-Zeile dazu, wo der Fehler auftritt.
    Hellsehen kann schnell schief gehen (zumindest ich habe die Perfektion in diesem Genre noch lange nicht erreicht).

    nur habe ich grad nicht die Zeit dazu um was zu verstehen. Es soll nur funktionieren!
    Wenn du in die falsche Richtung gehst, bist du nicht schneller am Ziel, als wenn du dir vorher überlegst, welches der richtige Weg ist.
    Gerade wenn du keine Zeit hast, kannst du dir Umwege nicht leisten.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Private Sub CommandButton1_Click()


    Dim Ziel As Workbook
    Set Ziel = ThisWorkbook



    If Application.Dialogs(xlDialogOpen).Show Then
    Set wb = ActiveWorkbook
    wb.Sheets(1).Range("B1:B2").Copy ThisWorkbook.Sheets(2).Range("A1")
    wb.Sheets(2).Range("A2:AI12802").Copy ThisWorkbook.Sheets(2).Range("A4")

    wb.Close False





    End If


    Sheets("FRF vertikal komplex").Select
    End Sub



    Jetzt funktioniert es, leider noch nicht so wie ich es mir vorgestellt habe.
    Im Bereich A2:AI12802 soll nur Zahlenwerte eingefügt werden und nicht
    das Format, denn so verliere ich die Farbe von meiner Tabelle.


    So hat es davor geklappt:
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False


    ABER, jetzt musste ich ja alle Select etc. rausnehmen.

    Abgabe ist heut um 17:00h.
    :D
    Wenn du unbedingt willst, kannst du PasteSpecial meinetwegen verwenden, aber ohne Select.

    Visual Basic-Quellcode

    1. wb.Sheets(2).Range("A2:AI12802").Copy
    2. ThisWorkbook.Sheets(2).Range("A4").PasteSpecial Paste:=xlValues


    Eleganter wäre die Values zuzuweisen.

    Visual Basic-Quellcode

    1. ThisWorkbook.Sheets(2).Range("A4:AI12804").Value = wb.Sheets(2).Range("A2:AI12802").Value
    Mit der hart codierten Adressierung habe ich auch noch etwas Probleme,
    Aber du wirst schon wissen, was du machst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Jetzt funktioniert es! Juhuuu

    Ein Problem gibt es aber noch.

    Es kommt ein Fenster:

    Es befindet sich enie große Menge von Informationen in der Zwischenablage. Wollen sie diese Informationen später in andere
    Programme einfügen?

    -Klicken Sie auf Ja, um diese Informationen in der Zwischenablage zu behalten und sie später einfügen zu können.
    -Klicken Sie auf Nein, um die Informationen in der Zwischenablage zu löschen und Speicher freizugeben.


    Egal auf was ich klicke, bei beidem funktioniert es. Bei Ja, macht der Rechner noch etwas länger rum.
    Kann man irgendwas in den Code einfügen, damit das Fenster nicht kommt, bzw. die Markierte Stelle nicht gespeichert wird, deshlab frägt er wahrscheinlich...


    Danke!

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

    Copy/Paste ist halt immer nur eine Krücke :D
    Den zweiten Vorschlag mit der sauberen Lösung hast du wohl erst gar nicht probiert. Der wirft nämlich keine Meldung.

    Meinetwegen bleibe bei der Krücke und unterdrücke die Fehlermeldung:
    Application.CutCopyMode=False
    Falls das je nicht hilft:
    Application.DisplayAlerts = False
    Und bete, dass der User während des Verarbeitungsvorgangs nicht selbst tätig wird und in einer anderen Anwendung gerade Copy/Paste verwendet.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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