25. September 2019

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

Vorbereitung

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

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.

Screenshot: Manual selection of external Workbook

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.

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

Mehr Tipps & Tricks

Nutzen Sie Ihr Excel-Wissen bei der Arbeit mit INOSIM In diesem Tipp und Trick möchten wir Ihnen zeigen, wie Sie die Standard-Visual Basic Befehle von…

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…

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…

mehr

INOSIM Kontakt

Zu den lokalen Geschäftszeiten

Deutschland +49 231 97 00 250

USA +1 214 663 3101

Indien +91 9766 331 092