Arbeiten mit externen Excel-Arbeitsmappen
Neben dem Zugriff auf die in INOSIM eingebaute Excel-Arbeitsmappe (siehe Tipp Nutzen Sie Ihr Excel-VBA-Wissen bei der Arbeit mit INOSIM), können mit Hilfe von Visual Basic auch im Windows-Dateisystem gespeicherte Excel-Dateien geöffnet oder neue Arbeitsmappen erstellt werden.
Vorbereitung
- Aktivieren Sie die Microsoft Excel Object Library im INOSIM Basic-Editor (Menü Extras > Verweise):
- Definieren Sie eine neue Objektvariable (z. B. Excel) als globale Public-Variable:
Public Excel As Object 'As public variable at top of the Macro
Weisen Sie der Objektvariable in der Initialisierung Ihrer Simulation die Excel-Applikation mittels der CreateObject-Funktion zu:
Set Excel = CreateObject("Excel.Application")
Nun haben Sie Zugriff auf MS Excel über die gleichnamige Objektvariable. Sie können entweder eine neue Arbeitsmappe erstellen oder bereits vorhandene öffnen.
Öffnen einer bestehenden externen Excel-Arbeitsmappe
Um eine bereits vorhandene Excel-Arbeitsmappe zu öffnen, können Sie die Open-Methode verwenden.
Die folgende Code-Ausschnitte bieten eine praktische Funktion, um eine Excel-Arbeitsmappe in einer Zeile zu öffnen und zu zeigen, wie die Arbeitsmappe durch VBA bearbeitet werden kann.
Private Function OpenExternalWorkbook(pathToWorkbook As String) As Workbook
'Open external Excel Workbook
' returns Workbook object myExtWorkbook
Dim myExtWorkbook As Workbook
Set Excel = CreateObject("Excel.Application")
Set myExtWorkbook = Excel.Workbooks.Open(pathToWorkbook)
Set OpenExternalWorkbook = myExtWorkbook
End Function
' Don't forget the declaration of the global variable "Excel", as explained above
Private Sub Simulation_Init()
Dim myWorkbookPath As String
Dim myWorkbook As Workbook
Dim myWorksheet As Worksheet
Dim numBatchesA As Integer
Dim numBatchesB As Integer
Dim numBatchesC As Integer
'Change this to the location of your workbook
myWorkbookPath = "C:\Users\INOSIMUser\Data\externalWorkbook.xlsx"
Set myWorkbook = OpenExternalWorkbook(myWorkbookPath)
Set myWorksheet =myWorkbook.Worksheets("Number of Batches")
'Read number of Batches myWorksheet
numBatchesA = myWorksheet.Cells(1,2) '=10
numBatchesB = myWorksheet.Cells(2,2) '=15
numBatchesC = myWorksheet.Cells(3,2) '=12
'myWorkbook.Save 'Use to save changes to the workbook, if desired
myWorkbook.Close 'Important!
Console.Information("Batches of Product A: " & numBatchesA)
Console.Information("Batches of Product B: " & numBatchesB)
Console.Information("Batches of Product C: " & numBatchesC)
End Sub
Eine neue Excel-Arbeitsmappe erstellen
In dem oben aufgeführten Beispiel wird die externe Arbeitsmappe geöffnet und Werte aus dem angegebenem Arbeitsblatt werden eingelesen.
Falls Änderungen an dem Arbeitsblatt vorgenommen wurden, können diese durch Anwendung der Save-Methode gespeichert werden. Schließen Sie die Arbeitsmappe, wenn Sie diese nicht mehr benötigen, über die Close-Methode. Achten Sie darauf, geöffnete Arbeitsmappen auch wieder zu schließen, um unerwartetes Verhalten sowie Datenverlust zu vermeiden.
Tipp: Sie können mit Hilfe der GetFilePath-Funktion auch eine manuelle Auswahl bei Simulationsstart initiieren.
Wollen Sie eine neue Excel-Arbeitsmappe erstellen, um beispielsweise nach jedem Simulationslauf die Ergebnisse separat abzuspeichern, können Sie die Add-Methode verwenden.
Der folgende Beispiel-Code führt die dafür nötigen Schritte auf:
' Don't forget the declaration of the global variable "Excel", as explained above
Private Function WriteResultsToNewWorkbook()
Dim savePath As String
Dim myWorkbook As Workbook
Dim myWorksheet As Worksheet
Set Excel = CreateObject("Excel.Application")
'Create a new workbook and
'Add a worksheet and rename it
Set myWorkbook = Excel.Workbooks.Add
Set myWorksheet = myWorkbook.Worksheets.Add
myWorksheet.Name = "Results 1"
'Write results into the new workbook
myWorksheet.Cells(1,1) = "Storage Product A"
myWorksheet.Cells(1,2) = "Storage Product B"
myWorksheet.Cells(1,3) = "Storage Product C"
myWorksheet.Cells(2,1) = 5000
myWorksheet.Cells(2,2) = 11250
myWorksheet.Cells(2,3) = 4800
'Save and close the new workbook
savePath = "C:\Users\INOSIMUser\Data\externalWorkbookResults.xlsx"
myWorkbook.SaveAs(savePath) 'Updates the path of the workbook, too, so it can be used with .Save now as well
'Console.Information(myWorkbook.FullName) 'Shows the full path of the new workbook
myWorkbook.Close
End Function
Zunächst wird eine neue Excel-Arbeitsmappe erstellt und in dieser ein neues Arbeitsblatt hinzugefügt. Im vorliegenden Beispiel wird der Inhalt der Tanks Storage A, Storage B und Storage C in das Arbeitsblatt Results 1 geschrieben. Nachdem die Ergebnisse geschrieben wurden, muss die neue Arbeitsmappe gespeichert werden. Verwenden Sie die SaveAs-Methode, um den Dateipfad und den Dateinamen der neu erstellten Arbeitsmappe zu definieren. Dadurch wird der im Arbeitsmappen-Objekt gespeicherte Dateipfad aktualisiert, so dass Sie anschließend die Save-Methode, wie oben beschrieben, verwenden können. Abschließend sollten die Sie die Arbeitsmappe mit der Close-Methode wieder schließen.
Downloads
(Nur für angemeldete INOSIM Nutzer)
- INOSIM Projekt
- Beispiel Excel-Arbeitsmappe
- PDF-Ausdruck zu diesem Tipp & Trick
Fragen?
Möchten Sie mehr über dieses Thema erfahren oder haben weitere Fragen? Bitte kontaktieren Sie uns.
Mehr Tipps & Tricks
Intervall-Auswertung des Transfer-Reports
Intervall-Auswertung des Transfer-Reports In diesem Tipp stellen wir Ihnen vor, wie Sie aus den von INOSIM erzeugten Reports automatisiert per VBA weitere Daten berechnen, um…
INOSIM 13 – WWB.NET vs. WWB-COM
Mit der neuen INOSIM 13 Version wurde der Basic-Editor umgestellt. So unterstützt dieser nun zusätzlich zu der WWB-COM auch die WWB.NET Sprachvariante, welche mit Visual…
Schichtkalender: Wie Prozeduren während einer Schichtpause unterbrochen werden können
In INOSIM kann die Verfügbarkeit von Ressourcen und Equipment mithilfe von Schichtkalendern ausgedrückt werden. Ein Schichtkalender legt fest, wann ein Equipment verfügbar ist oder wie…