12. August 2024

Arbeiten mit externen Excel-Arbeitsmappen

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), kann mit Hilfe von Visual Basic auch auf im Windows-Dateisystem gespeicherte Excel-Dateien zugegriffen werden oder es können neue Arbeitsmappen erstellt werden.

Vorbereitung

  1. Aktivieren Sie die Microsoft Excel Object Library im INOSIM Basic-Editor (Menü Extras > Verweise > COM):
  2. 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:

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

	Excel = CreateObject("Excel.Application")
	myExtWorkbook = Excel.Workbooks.Open(pathToWorkbook)

	OpenExternalWorkbook = myExtWorkbook

End Function
Public Excel as Object ' Don't forget the declaration of the global variable "Excel", as explained above

Private Sub Simulation_Init() Handles 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 path to your workbook
	myWorkbookPath = "C:\Users\INOSIMUser\Data\externalWorkbook.xlsx"

	myWorkbook = OpenExternalWorkbook(myWorkbookPath)
	myWorksheet =myWorkbook.Worksheets("Number of Batches")

	'Read number of Batches myWorksheet
	numBatchesA = myWorksheet.Cells(1,2).value '=10
	numBatchesB = myWorksheet.Cells(2,2).value '=15
	numBatchesC = myWorksheet.Cells(3,2).value '=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

In dem oben aufgeführten Beispiel wird die externe Arbeitsmappe geöffnet und Werte aus dem angegebenen 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.

Eine neue Excel-Arbeitsmappe erstellen

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

	Excel = CreateObject("Excel.Application")

	'Create a new workbook and
	'Add a worksheet and rename it
	myWorkbook = Excel.Workbooks.Add
	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.

Weitere Informationen zu hilfreichen Funktionen und Anwendungen sowie dem Umgang mit workbook und worksheet Objekten finden Sie in der offiziellen Microsoft Dokumentation: https://docs.microsoft.com/de-de/office/vba/api/excel.workbook.

Verwendung des Range-Objekts

Beim Schreiben von Daten in Excel-Tabellen kann es hilfreich sein, mehrere Werte, die in einer Array-Variablen gespeichert sind, in einem Befehl mit dem Range-Objekt zu schreiben. Leider ist das Range-Objekt in der VBA .NET-Version schreibgeschützt. Es kann jedoch weiterhin in einem separaten .COM-Makro verwendet werden, das sich leicht über EinfügenMakro im Visual Basic Editor einfügen lässt. Das Demomodell in der .NET-Version, das Sie im Downloads-Bereich finden, zeigt ein praktisches Beispiel.

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.

Array ( [posts_per_page] => 3 [post_type] => [category__in] => Array ( [0] => 171 ) [orderby] => rand [order] => ASC )

Mehr Tipps & Tricks

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…

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…

Dieser Tipp & Trick stellt Ihnen ein praktisches Werkzeug zur Visualisierung und Analyse von Transfers in Ihrem Modell mit der BICON-Erweiterung zur Verfügung. Die Tableau-Arbeitsmappe…

mehr

INOSIM Kontakt

Zu den lokalen Geschäftszeiten

Deutschland +49 231 97 00 250