Um eine VBA-Makro (VMB) zu erstellen, die Stücklisten aus SAP CS11 in Excel exportiert, müssen wir mehrere Schritte berücksichtigen. Da SAP eine komplexe ERP-Software ist, gibt es keine direkte VBA-Integration, aber wir können eine Lösung über SAP GUI Scripting oder SAP-Exportfunktionen (z. B. über SAP Query oder ALV-Export) realisieren.
Hier ist ein VBA-Makro, das den Export von Stücklisten aus SAP CS11 in Excel automatisiert, unter der Annahme, dass die Daten bereits in einer SAP-Tabelle oder ALV-Liste vorliegen und manuell exportiert werden können.
VBA-Makro für den Export von SAP CS11-Stücklisten nach Excel
(Voraussetzung: SAP GUI Scripting ist aktiviert und die Stückliste ist in SAP geöffnet)
Sub ExportSAP_CS11_To_Excel()
Dim SapGuiAuto As Object
Dim SAPApp As Object
Dim SAPCon As Object
Dim session As Object
Dim WshShell As Object
Dim ExcelApp As Object
Dim ExcelWorkbook As Object
Dim ExcelSheet As Object
Dim FilePath As String
' Pfad für die Excel-Datei festlegen
FilePath = "C:\Temp\SAP_Stueckliste_" & Format(Now, "YYYYMMDD_HHMMSS") & ".xlsx"
' Excel-Anwendung starten
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = True
Set ExcelWorkbook = ExcelApp.Workbooks.Add
Set ExcelSheet = ExcelWorkbook.Sheets(1)
' SAP GUI Scripting initialisieren
On Error Resume Next
Set SapGuiAuto = GetObject("SAPGUI")
If SapGuiAuto Is Nothing Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe", 1, False
MsgBox "Bitte melden Sie sich in SAP an und öffnen Sie die Stückliste (CS11).", vbInformation, "SAP-Anmeldung erforderlich"
Exit Sub
End If
On Error GoTo 0
Set SAPApp = SapGuiAuto.GetScriptingEngine
Set SAPCon = SAPApp.Children(0)
Set session = SAPCon.Children(0)
' Prüfen, ob die Stückliste (CS11) geöffnet ist
If Not session.findById("wnd[0]/tbar[0]/okcd") Is Nothing Then
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nCS11"
session.findById("wnd[0]").sendVKey 0
End If
' Warten, bis die Stückliste geladen ist
Do While session.Busy
DoEvents
Loop
' Daten aus der ALV-Tabelle extrahieren (Beispiel: Tabelle "SAPLALDB" oder ähnliche)
' (Hinweis: Die genaue ID der Tabelle muss angepasst werden!)
Dim ALVGrid As Object
Set ALVGrid = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell")
If ALVGrid Is Nothing Then
MsgBox "ALV-Grid nicht gefunden. Bitte stellen Sie sicher, dass die Stückliste angezeigt wird.", vbExclamation, "Fehler"
Exit Sub
End If
' Daten in Excel schreiben
Dim RowCount As Integer, ColCount As Integer
RowCount = ALVGrid.RowCount
ColCount = ALVGrid.ColumnCount
' Spaltenüberschriften kopieren
For col = 0 To ColCount - 1
ExcelSheet.Cells(1, col + 1).Value = ALVGrid.GetColumnHeader(col)
Next col
' Daten kopieren
For row = 0 To RowCount - 1
For col = 0 To ColCount - 1
ExcelSheet.Cells(row + 2, col + 1).Value = ALVGrid.GetCellValue(row, col)
Next col
Next row
' Excel-Datei speichern
ExcelWorkbook.SaveAs FilePath
MsgBox "Stückliste erfolgreich nach Excel exportiert!" & vbCrLf & "Dateipfad: " & FilePath, vbInformation, "Export abgeschlossen"
' Aufräumen
Set ALVGrid = Nothing
Set session = Nothing
Set SAPCon = Nothing
Set SAPApp = Nothing
Set SapGuiAuto = Nothing
Set ExcelSheet = Nothing
Set ExcelWorkbook = Nothing
ExcelApp.Quit
Set ExcelApp = Nothing
End Sub
Wichtige Hinweise:
- SAP GUI Scripting muss aktiviert sein (in SAP unter
Extras → Optionen → Zugänglichkeit & Scripting). - Die ALV-Tabellen-ID (
cntlGRID1/shellcont/shell) kann je nach SAP-Version variieren.- Falls das Makro die Tabelle nicht findet, müssen Sie die korrekte ID mit dem SAP Scripting Recorder ermitteln.
- Manueller Export als Alternative:
- Falls VBA nicht funktioniert, können Sie in SAP die Stückliste als Excel-Datei exportieren (über
Strg+YoderSystem → Liste → Export → Lokale Datei).
- Falls VBA nicht funktioniert, können Sie in SAP die Stückliste als Excel-Datei exportieren (über
- Sicherheit:
- SAP-Systeme haben oft strenge Sicherheitsrichtlinien. Prüfen Sie, ob Makros erlaubt sind.
Alternative: SAP Query oder Report verwenden
Falls Sie häufig Stücklisten exportieren müssen, können Sie in SAP:
- Eine SAP Query (SQ01) erstellen, die die Stücklistendaten abfragt.
- Einen ABAP-Report schreiben, der die Daten direkt in Excel exportiert.
Möchten Sie eine dieser Alternativen näher erklärt haben? 😊