Stellen Sie sich vor, Ihre Aufgabe bestünde darin, 100 Simulationen durchzuführen und die Ergebnisse jedes Laufs in einer Datei in speziell benannten Ordnern neben der Datenbankdatei zu speichern. Anstatt sich wie ein Höhlenmensch mit dem manuellen Anlegen von Ordnern und Dateien sowie dem Kopieren von Daten aus der Parameter-Arbeitsmappe herumzuschlagen, sind Sie sich sicher: Bei INOSIM muss es doch eine Möglichkeit geben, dies zu automatisieren – und die gibt es auch!
In diesem Tipp & Trick zeigen wir Ihnen, wie Sie den Pfad zur Datenbankdatei abrufen, einen Ordner erstellen, den Inhalt eines Tabellenobjekts in eine CSV-Datei und eine Excel-Arbeitsmappe schreiben und diese unter einem bestimmten Pfad speichern. Und um den Workflow der Dateiverwaltung zu vervollständigen, behandeln wir auch, wie man eine Datei löscht.
Im Download-Bereich finden Sie einen Modellexport, der alle Funktionen enthält. Wenn Sie nach einer Möglichkeit suchen, mehrere Simulationsläufe hintereinander durchzuführen, schauen Sie sich diesen Tipp & Trick an.
Abrufen des Pfads der Datenbank und Auswählen des Ausgabeordners
Die folgende Funktion gibt den Verzeichnispfad der Datenbankdatei (.imdf) zurück, die in dieser Instanz von INOSIM geöffnet ist. Anhand dieses Pfads lässt sich der Pfad des Ausgabeordners festlegen und Dateien in diesen Ordner ausgeben.
Public Function RootDatabase() As String
Dim splitConnectionString() As String
Dim splitPath() As String
Dim fullPath As String
Dim fileName As String
Dim fileRoot As String
splitConnectionString = Split(ConnectionString,"""")
fullPath = splitConnectionString(1)
splitPath = Split(fullPath,"\")
fileName = splitPath(UBound(splitPath))
fileRoot = Left(fullPath,Len(fullPath) - Len(fileName) - 1) ' 1 for \
RootDatabase = fileRoot
End Function
Der Pfad zum Ordner der Datenbank lässt sich wie folgt abrufen und der Ausgabeordner auf einen Unterordner des Pfads der Datenbank festlegen:
Public RootPath As String
RootPath = RootDatabase()
Public FolderPath As String
FolderPath = RootPath & "\Output Files"
Ausgabe eines Table-Objekts als CSV-Datei
Die folgende Funktion gibt ein Tabellenobjekt in eine kommagetrennte Datei aus. Sie nimmt folgende Parameter als Eingabe entgegen:
- VBA_Table: Das Tabellenobjekt, das in eine kommagetrennte Datei geschrieben werden soll.
- TableName: Der Name des Tabellenobjekts.
- FullFilePath: Ordnerpfad & „\Table.csv“
- Overwrite: Bei Auswahl von „true“ wird die Datei überschrieben, bei Auswahl von „false“ wird der Inhalt an das Ende der Datei angehängt.
- ri, ci: Bei Auswahl von „true“ wird jeweils der Zeilen- bzw. Spaltenindex geschrieben. Bei Auswahl von „false“ wird der Zeilen- oder Spaltenindex nicht geschrieben.
- SeparatorTag: Wählt das Trennzeichen aus, Standard ist „;“. Diese Eingabe ist optional.
- CommentTag: Wählt das Kommentar-Tag aus, Standard ist „<!–“. Diese Eingabe ist optional.
- Im Code-Snippet „- – -“ durch „<!–“ ersetzen
- Kommentare sind kein Bestandteil von Standard-CSV-Dateien, sondern eine benutzerdefinierte Anpassung, die sich für unsere Zwecke als nützlich erwiesen hat.
Public Function Table2CSV_Output(VBA_Table As Table, TableName As String, FullFilePath As String, Overwrite As Boolean, ci As Boolean, ri As Boolean, Optional SeparatorTag As String = "", Optional CommentTag As String = "")
' Write table object to csv-file
' VBA_Table = Table Object
' TableName = Section Name e.g. "Resources"
' FullFilePath = complete path incl. file name
' Overwrite = Overwrite existing data In file(True/False) (Select False To Append)
' ri, ci = write row index, column index, true/false
' SeparatorTag = Optional, Default ";"
' CommentTag = Optional, Default "- - -" 'replace with comment tag given in text
If SeparatorTag = "" Then SeparatorTag = ";"
If CommentTag = "" Then CommentTag = "- - -" 'replace with comment tag given in text
Dim OutString As String
Dim Separator As String
Dim fHandle As Integer
FullFilePath = Trim(FullFilePath)
fHandle = FreeFile
If Overwrite Then
FileOpen fHandle, FullFilePath, OpenMode.Output
Else
FileOpen fHandle, FullFilePath, OpenMode.Append
End If
'Print #fHandle, vbUTF8BOM; 'write file in UTF-8 coding
' write comment line
Print fHandle, CommentTag & " Table: " & TableName
Dim row As Long, col As Long 'internal
Dim rs As Long, cs As Long 'row/column start (0/1) (write first row/first column as table index)
If ci And VBA_Table.ColumnIndex Then
rs = 0 ' Export w column index (row 0)
ElseIf ci = False And VBA_Table.ColumnIndex = False Then
rs = 1 ' Export w/o column index (row 0)
Else
Stop ' table does not have a column index
End If
If ri And VBA_Table.RowIndex Then
cs = 0
ElseIf ri = False And VBA_Table.RowIndex = False Then
cs = 1
Else
Stop ' table does not have a row index
End If
If VBA_Table.RowCount > 0 Then
For row = rs To VBA_Table.RowCount
OutString = ""
Separator = ""
For col = cs To VBA_Table.ColumnCount
OutString = OutString & Separator & VBA_Table(row,col)
Separator = ";"
Next
PrintLine fHandle, OutString
Next
End If
FileClose fHandle
End Function
Ausgabe eines Tabellenobjekts als Excel-Arbeitsmappe
Die folgende Funktion gibt ein Table-Objekt als Excel-Workbook mit der WorkbookXML-Extension in INOSIM 2026 aus. Sie benötigt folgende Parameter:
- VBA_Table: Das Tabellenobjekt, das in ein Workbook geschrieben werden soll
- FullFilePath: z.B. FolderPath & „\Table.xlsx“
- TableName: Der Name des Table-Objekts
Beachten Sie, dass diese Funktion standardmäßig automatisch die Zeilen- und Spaltenindizes des Tabellenobjekts schreibt. Sie können die Funktion gerne an Ihren Anwendungsfall anpassen.
Public Function Table2WorkbookXML_Output(VBA_Table As Table, FullFilePath As String, TableName As String)
Dim wb As Workbook = New Workbook
wb.Worksheets.Add TableName
Dim row As Integer
Dim col As Integer
For row = 0 To VBA_Table.RowCount
For col = 0 To VBA_Table.ColumnCount
wb.Worksheets(TableName).CellYX(row + 1, col + 1).Value = VBA_Table(row, col)
Next
Next
wb.SaveToFile(FullFilePath)
End Function
Eine Datei mit WWB löschen
Die folgende Funktion löscht eine Datei anhand ihres vordefinierten Pfads. Sie erwartet folgende Eingabe:
- FullFilePath: FolderPath & „\Table.xlsx“
- Dadurch wird der Pfad zu „Table.xlsx“ angegeben, und die Funktion löscht die Datei.
Achtung: Diese Funktion löscht die Datei ohne weitere Rückfrage. Es besteht die Gefahr eines Datenverlusts!
Public Function DeleteFile(FullFilePath As String)
If Dir(FullFilePath) <> "" Then
Kill FullFilePath
End If
End Function
Fragen?
Möchten Sie mehr über dieses Thema erfahren oder haben weitere Fragen? Bitte kontaktieren Sie uns.
Mehr Tipps & Tricks
Ausführungsdauer von VBA-Steuerungen messen
In diesem Tipp & Trick geht es um den Einsatz eines VBA Timers zur Messung der Ausführungsdauer von VBA Steuerungen. Um die Perfomance eines Modells…
Neue Steuerungen für Unit Pools in INOSIM 13 anwenden
Die Frameworks für die Steuerungstypen Teilanlagenpoolbelegung und Transfer in/aus Teilanlagenpool haben sich in der neuen INOSIM Version 13 geändert. Die Änderungen bieten einige neue Möglichkeiten,…
Das Reporting-Objekt
Ab INOSIM 12 ist das Reporting-Objekt Bestandteil des Objektmodells. Es ermöglicht den Zugriff auf die Ergebnisberichte über Visual Basic und bietet dadurch vielfältige Optionen zur…

