mehrere Sheets zusammenführen und sortieren

  • Excel

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

    Ich sehe auf Anhieb keine Typunverträglichkeiten.
    Die Fehlersuche ist relativ mühevoll, wenn du nicht angibst, wo der Fehler auftaucht.

    Muss jetzt extra eine VBA-Engine starten zum Debuggen?
    Edit:
    ​Split("C:\Users\User\Desktop\test\Datei1.xlsm,C:\Users\User\Desktop\test\Datei2.xlsm", ",")
    oder
    Array("C:\Users\User\Desktop\test\Datei1.xlsm", "C:\Users\User\Desktop\test\Datei2.xlsm")

    Hättest du auch selbst debuggen können.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    'Hallo
    'Ich habe jetzt wbName als Variant festgelegt und den Code wie beschrieben angepasst.
    'Das Problem ist jetzt, dass die zu öffnen Datei ja Makros enthält welche beim öffnen automatisch starten.
    'Beim Ausführen der Funktion öffnet er also die Datei und das Marko wird aufgeführt.
    'Somit bleibt es hängen beim Kopiervorgang. Es kommt auch noch der Fehler : Laufzeitfehler 1004: Anwendungs und Objektdefinierter Fehler.

    Visual Basic-Quellcode

    1. Private Sub Zusammenfuehren()
    2. Dim wbName As Variant
    3. Dim wb As Workbook
    4. UsedRange.Delete xlUp
    5. For Each wbName In Split("C:\Users\User\Desktop\test\Auftrennen.xlsm, C:\Users\User\Desktop\test\Zuschnitt.xlsm", ",")
    6. Set wb = Workbooks.Open(wbName, ReadOnly:=True, Editable:=False)
    7. wb.Sheets("Zeiterfassung").UsedRange.Copy Cells(Rows.Count, 1).End(xlUp).Offset(1)
    8. wb.Close False
    9. Next
    10. End Sub

    TeamBob schrieb:

    dass die zu öffnen Datei ja Makros enthält welche beim öffnen automatisch starten
    Ist generell eine schlechte Idee.
    Dabei haben sich schon viele ins Knie geschossen.

    Wenn die Start-Makros aber sauber geschrieben sind, dürfte das dennoch keine Fehler geben.
    Der Kopiervorgang startet erst, wenn das Workbook_Open-Event abgearbeitet wurde.

    Du kannst vor dem Öffnen Application.EnableEvents auf False setzen und nach dem Schließen wieder auf True.
    Aber dann bitte eventuelle Fehler abfangen, sonst hast du ggf. bis ans Ende der Sitzung keine Events mehr.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --