Excel Vba und SAP Scripting: Wie öffne bearbeite ich eine geöffnete zweite Arbeitsmappe?


29.09.2022, 21:07

Kurz gesagt ich möchte die Daten aus Mappe2 in Mappe1 speichern allerdings ist die Mappe2 immer eine neu erstellte Datei mit Namen xyz.xlsx, die sich nach dem exportieren auf dem Desktop öffnet

2 Antworten

Also, das Skript aus Mappe1 funktioniert ja offenbar schon und produziert indirekt über SAP eine Excel die auf dem Desktop erstellt wird.
Wenn dies geschehen ist. Ist die Mappe1 ja immer noch offen.
ggf auch die neue Mappe2. Dies ist im Übrigen WICHTIG zu wissen, denn dies hat Einfluss auf das nächste Makro.
Am einfachsten ist es wenn es auf dem DeskTop eigentlich KEIN Excel File gibt
und erst durch SAP ein 'erstes' erstellt wurde, dann muss dass Makro NICHT suchen.
Also, dein Makro
A) prüft zunächst ob neben der Mappe1 eine weitere Datei offen ist
wenn ja B) Kopiere die Daten aus Mappe2 in Mappe1 und schließe + ggf lösche Mappe2
wenn nein C) öffne nun die 'einzige' Excel Datei auf dem Desktop und führe Schritt "B" aus.
===
Für A,B,C gibt es Code Schnipsel im Web.

Siggi596 
Fragesteller
 29.09.2022, 21:43

Hey, danke für deine Antwort. Ja, sobald SAP die Excel erstellt hat gibt es in diesem Moment zwei offene Dateien. Ich weiß das A die Lösung für mein Problem ist aber ich finde bei Google irgendwie nichts was auf meinen Fall zutrifft bzw. mein Problem behandelt. Kannst du näher auf A eingehen?

0
IchMalWiederXY  30.09.2022, 12:52
@Siggi596

Zunächst mal solltest du beim Öffnen der Mappe A speichern wie sie heißt:
Dies im "Workbook Open Event" unterbringen.
Wenn dann die neue Datei irgendwann parallel offen ist in der Mappe 1 das Makro started welches die Daten holen soll.
Als erstes prüft dieses Makro in der "Workbooks" Auflistung welches nun das 'andere' Workbook neben der bekannten Mappe1 ist.
Dim myWB as WorkBook
For each myWB in WorkBooks
if myWB.Name <> Mappe1Name then
keepNewWBName = myWB.Name
end if
Next
Egal wie das andere heißt, es muss dann jenes sein, wo deine Daten stehen.
dann mit
Workbook(SavedMappe1name).Worksheets("BlaBla"). Range("A1:A100"). Value = _
Workbook(keepNewWBName)Worksheets("BlaBla"). Range("C1:C100"). Value
Dinge zuweisen oder ggf Copy Paste programmieren.
Siehe auch daCypher

1
Sub saveOtherWorkbook()
    Dim workbook As Variant ' VBA lässt keine spezifischen Typen in einer for-each-Schleife zu
                            ' Wenn du die Methoden und Eigenschaften von Workbooks auflisten willst,
                            ' kannst du eine Variable mit z.B "Dim x as Workbook" definieren
                            ' und damit die Formelvervollständigung (bzw. IntelliSense) benutzen.
    
    For Each workbook In Workbooks
        If Not workbook Is ThisWorkbook Then
            ' Hier kannst du bestimmen, was mit der anderen Arbeitsmappe passieren soll. Z.B.:
            ' workbook.SaveAs "C:\temp\SAPexport.xlsx"
            ' workbook.Close
            
            ' Oder um das erste Arbeitsblatt aus der anderen Mappe in die aktuelle Mappe zu kopieren:
            ' workbook.Sheets(1).Copy After:=Sheets(Sheets.Count)
            
            ' bzw. um alle Arbeitsblätter zu kopieren:
            ' workbook.Sheets.Copy After:=Sheets(Sheets.Count)
            
            Debug.Print "Offene Arbeitsmappe gefunden: " + wb.Name + " (" + wb.Path + ")"
        End If
    Next wb
End Sub