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
Benutzerdefinierte Farben im INOSIM Gantt-Diagramm
Das INOSIM Gantt-Diagramm bietet die Möglichkeit, Belegungsbalken auf Basis verschiedener vordefinierter Attribute zu färben. In der Auftragssicht ist es möglich, das Farbschema sowohl mit dem…
Benutzerdefinierte Graphen und Eigenschaften von Graphen in INOSIM Gantt
Custom Curves and Properties Of Curves in INOSIM Gantt In Ihrem Modell wird derselbe Rohstoff in mehreren Tanks aufbewahrt und Sie möchten den gesamten Lagerbestand…
Table-Objekte anwenden
Table-Objekte in INOSIM sind indexierte Tabellen. Sie können mit der Zeilen- und Spaltenüberschrift direkt auf den Inhalt einer Zelle zugreifen, ohne per For-Loop zunächst die richtige Zeile und Spalte…