VBA Crashkurs - fhdo
Transcrição
VBA Crashkurs - fhdo
Logistikmanagement mit Heuristiken Logistische Problemstellungen unter Verwendung von Excel VBA lösen Prof. Dr. Heinz-Michael Winkels WS 2013/14 Modellbasiertes Logistikmanagement Inhaltsverzeichnis Inhaltsverzeichnis ........................................................................................................II A Crash-Kurs in Excel VBA.........................................................................................6 A.1 Die Entwicklungsumgebung von Excel VBA ....................................................7 A.1.1 Aktivierung der Entwicklertools ..............................................................7 A.1.2 Aufruf der Entwicklungsumgebung ........................................................7 A.1.3 Der Projekt-Explorer ..............................................................................8 A.1.4 Das Eigenschaftenfenster....................................................................11 A.1.5 Das Code-Fenster ...............................................................................12 A.1.6 Der Objektkatalog ................................................................................14 A.1.7 Testumgebung: Das Direktfenster .......................................................17 A.1.8 Testumgebung: Das Überwachungsfenster.........................................18 A.1.9 Testumgebung: Das Lokal-Fenster......................................................19 A.1.10 Die Excel-Hilfe innerhalb der Entwicklungsumgebung ............20 A.1.11 Einstellen der Entwicklungsumgebung....................................22 A.2 Die Eingabe von Programm-Code .................................................................24 A.2.1 Erfassen von Makros mit dem Makro-Rekorder ..................................24 A.2.2 Bearbeiten oder Ausführen eines vorhandenen Makros über die Menüstruktur........................................................................................26 A.2.3 Der Start von Makros mit Graphiken und Steuerelementen ................27 A.2.3.1 Ausführen eines Makros durch Anklicken eines Grafikobjektes27 A.2.3.2 Ausführen eines Makros durch Anklicken eines Steuerelementes .....................................................................28 A.2.4 Programmierung mithilfe des Code-Fensters ......................................29 A.2.4.1 IntelliSense .............................................................................29 A.2.4.2 Hilfestellungen über die Bearbeiten Symbolleiste ...................30 A.2.4.3 Direkter und indirekter Aufruf des Code-Fensters ...................32 A.2.4.4 Anlegen eines neuen Modules ................................................32 A.2.4.5 Aufruf eines vorhandenen Modules.........................................32 A.2.4.6 Anlegen einer neuen Prozedur ...............................................33 A.2.5 Debugging/Fehlersuche.......................................................................34 A.2.5.1 Zeilenweise Abarbeitung einer Prozedur ................................34 A.2.5.2 Verwendung von Haltepunkten in einer Prozedur ...................35 A.2.5.3 Verwendung von Überwachungsausdrücken in einer Prozedur35 A.2.6 Standarddialoge...................................................................................35 A.2.6.1 Die Funktion MsgBox ..............................................................36 A.2.6.2 Die Funktion InputBox .............................................................37 A.2.6.3 Die Methode InputBox.............................................................38 A.2.7 Erstellen einer User-Form....................................................................39 A.2.7.1 Benutzerformular erstellen ......................................................39 A.2.7.2 Steuerelemente einfügen ........................................................40 A.2.7.3 Steuerelementeigenschaften festlegen ...................................41 A.2.7.4 Steuerelement-Eigenschaften initialisieren .............................43 A.2.7.5 Steuerelement- und Dialogfeldereignisse erstellen .................43 A.2.7.6 UserForm anzeigen.................................................................44 A.2.7.7 Steuerelemente während der Code-Ausführung verwenden ..44 A.2.7.8 Besonderheiten beim Dialogende ...........................................45 A.2.8 Internet Links für Hilfestellungen zur VBA Programmierung ................46 A.3 Die Syntax von VBA.......................................................................................47 A.3.1 Kommentare und Schreibkonventionen ...............................................47 II Inhaltsverzeichnis A.3.2 Standardkonventionen für die Namensgebung....................................47 A.3.3 Prozeduren ..........................................................................................48 A.3.3.1 Sub-Prozeduren ......................................................................48 A.3.3.2 Function-Prozeduren...............................................................50 A.3.3.3 Property-Prozeduren ...............................................................50 A.3.4 Konstante, Variable und Datenfeldern .................................................51 A.3.4.1 Standard-Datentypen ..............................................................51 A.3.4.2 Benutzerdefinierte Datentypen................................................52 A.1.1 Aufzähl-Typen .........................................................................53 A.3.4.3 Deklarieren von Konstanten ....................................................53 A.3.4.4 Deklarieren von Variablen .......................................................55 A.3.4.5 Deklarieren von Variablen innerhalb einer Prozedur...............56 A.3.4.6 Deklarieren von Datenfeldern innerhalb einer Prozedur .........57 A.3.5 Operatoren ..........................................................................................59 A.3.5.1 Arithmetische Operatoren zum Durchführen mathematischer Berechnungen.........................................................................59 A.3.5.2 Vergleichsoperatoren zum Durchführen von Vergleichen .......59 A.3.5.3 Verkettungsoperatoren zum Aneinanderhängen von Zeichenfolgen .........................................................................59 A.3.5.4 Logische Operatoren zum Durchführen logischer Operationen59 A.3.6 Kontrollstrukturen.................................................................................60 A.3.6.1 IF-Verzweigung .......................................................................60 A.3.6.2 IIF-Verzweigung ......................................................................60 A.3.6.3 For-Next-Schleife ....................................................................61 A.3.6.4 For-Each-Next-Schleife ...........................................................61 A.3.6.5 Do-Until-Loop-Schleife ............................................................62 A.3.6.6 Do-While-Loop-Schleife ..........................................................62 A.3.6.7 Select Case-Anweisung ..........................................................62 A.4 Verwendung der verschiedenen Funktions-Arten in Excel-VBA ....................64 A.4.1 Die verschiedenen Funktions-Arten in Excel-VBA ...............................64 A.4.2 Benutzerdefinierte VBA-Funktionen.....................................................64 A.4.2.1 Verwendung in VBA-Prozeduren ............................................64 A.4.2.2 Verwendung in Arbeitsblättern ................................................65 A.4.3 Vorinstallierte VBA-Funktionen ............................................................66 A.4.3.1 Verwendung in VBA-Prozeduren ............................................66 A.4.3.2 Verwendung in Arbeitsblättern ................................................66 A.4.4 Excel-Funktionen .................................................................................67 A.4.4.1 Besonderheiten von Excel-Funktionen....................................67 A.4.4.2 Verwendung in VBA-Prozeduren ............................................68 A.4.4.3 VBA-Befehle für die Zellenbelegung in Arbeitsblättern ...........69 A.5 Verwendung von Objekten in Excel-VBA .......................................................71 A.5.1 Begriffsklärung .....................................................................................72 A.5.2 Schreibweisen .....................................................................................73 A.5.3 Objektlisten ..........................................................................................74 A.5.4 Objektvariablen ....................................................................................74 A.5.5 Das Excel Objektmodell.......................................................................75 A.5.5.1 Das Application-Objekt............................................................76 A.5.5.2 Das Workbook-Objekt .............................................................76 A.5.5.3 Das Worksheet-Objekt ............................................................77 A.5.5.4 Das Range-Objekt...................................................................77 A.5.6 Spezielle Verwendungen des Excel Objektmodells .............................78 III Modellbasiertes Logistikmanagement A.5.6.1 Positionierung in Range-Objekten ..........................................78 A.5.6.2 Positionierung mit der Cells-Eigenschaft.................................79 A.5.6.3 Cursorposition feststellen ........................................................79 A.5.6.4 Zellen, Zellbereiche, Zeilen, Spalten gezielt auswählen..........80 A.5.6.5 Relatives Versetzen von Bereichen und Cursor......................80 A.5.6.6 Bereichsnamen vergeben mit Name-Eigenschaft ...................81 A.5.6.7 Wertzuweisungen mit Value-Eigenschaft ................................82 A.5.6.8 Formeln eintragen mit der Formula-Eigenschaft .....................82 A.5.6.9 Formatierung von Zellbereichen .............................................82 A.5.6.10 Löschen von Zellbereichen .................................................83 A.5.7 Erstellung eigener Klassen ..................................................................83 A.5.7.1 Definition einer Klasse ............................................................83 A.5.7.2 Eigenschaften .........................................................................83 A.5.7.3 Methoden ................................................................................85 A.5.7.4 Spezielle Ereignisprozeduren: Konstruktor und Destruktor .....85 A.5.8 Erzeugung neuer Objekte ....................................................................86 A.5.9 Entfernen von Objekten .......................................................................87 A.5.10 Erstellung von Ereignisprozeduren .........................................87 A.5.10.1 Allgemeine Ereignisprozeduren ..........................................87 A.5.10.2 Eigene Ereignisprozeduren .................................................88 A.5.10.3 Objekt mit WithEvents erstellen ..........................................88 A.5.10.4 Deklaration einer Objektvariablen vom Typ Application ......89 A.5.10.5 Eingabe des Programmcodes für die Ereignisprozedur ......90 A.5.10.6 Ausführen der Ereignisprozedur..........................................90 B Übersicht über die vorinstallierten VBA-Funktionen ..............................................91 B.1 Datums- und Zeitfunktionen ...........................................................................91 B.2 Textfunktionen ...............................................................................................92 B.3 Dateifunktionen und Anweisungen ................................................................95 B.4 Mathematische Funktionen ............................................................................97 C Übersicht über die Excel-Funktionen................................................................... 100 C.1 Finanzmathematische Funktionen ............................................................... 100 C.2 Logische Funktionen .................................................................................... 104 C.3 Textfunktionen ............................................................................................. 104 C.4 Datums- und Uhrzeitfunktionen ................................................................... 106 C.5 Nachschlage- und Verweisfunktionen .......................................................... 108 C.6 Mathematische und trigonometrische Funktionen ....................................... 110 C.7 Statistische Funktionen ................................................................................ 114 C.8 Konstruktionsfunktionen............................................................................... 122 C.9 Cubefunktionen............................................................................................ 124 C.10Informationsfunktionen................................................................................. 126 C.11Datenbankfunktionen ................................................................................... 127 C.12Kompatibilitätsfunktionen ............................................................................. 128 C.13Add-ins und Automatisierung ....................................................................... 131 D Übersicht über die wichtigsten Excel-Objekte ..................................................... 132 D.1 Das Application-Objekt ................................................................................ 132 D.1.1 Eigenschaften .................................................................................... 132 D.1.2 Methoden........................................................................................... 133 D.1.3 Ereignisse .......................................................................................... 133 D.2 Das Workbook-Objekt .................................................................................. 137 D.2.1 Eigenschaften .................................................................................... 137 D.2.2 Methoden........................................................................................... 137 IV Inhaltsverzeichnis D.2.3 Ereignisse .......................................................................................... 138 D.3 Das Worksheet-Objekt ................................................................................. 141 D.3.1 Eigenschaften .................................................................................... 141 D.3.2 Methoden........................................................................................... 142 D.3.3 Ereignisse .......................................................................................... 142 D.4 Das Range-Objekt ....................................................................................... 144 D.4.1 Eigenschaften .................................................................................... 144 D.4.2 Methoden........................................................................................... 145 D.4.3 Ereignisse .......................................................................................... 145 Literaturverzeichnis.................................................................................................. 146 Stichwortverzeichnis ................................................................................................ 149 V Modellbasiertes Logistikmanagement A Crash-Kurs in Excel VBA In diesem Abschnitt geben wir einen Überblick über die Programmiersprache Visual Basic for Applications (VBA) von Microsoft, ausgerichtet auf Excel, wobei wir Kenntnisse in einer gängigen Programmiersprache voraussetzen. Das hat den Vorteil, dass damit die Erklärung grundlegendender Begriffe nicht logisch aufeinander aufbauend erklärt werden muss. Der nachfolgende Text ist als Steilkurs für Programmierer mit Vorkenntnissen gedacht, die sich möglichst schnell in eine für sie neue Programmiersprache und deren Entwicklungsumgebung einarbeiten wollen, ohne sich lange mit zwar pädagogischen aber für ihre momentane Problemstellung irrelevanten Beispielen zu beschäftigen.12 VBA ist eine leistungsfähige Skriptsprache und die am weitesten verbreitete Möglichkeit, auf Microsoft-Office-Anwendungen (Excel, Word, Access etc.) basierende Programme zu erstellen. VBA ist auf prozedurale Programmierung ausgerichtet. Zwar gibt es auch in diesem Zusammenhang Klassen und Objekte mit Merkmalen wie Datenkapselung, nicht jedoch die Implementierungsvererbung objektorientierter Sprachen. In diesem kurzen Schnelleinstieg können natürlich nur die wichtigsten Aspekte von VBA behandelt werden. Wir empfehlen dem Nutzer, die nicht erwähnten Icons und Menüs auf dem Bildschirm selbständig aus zu probieren, um auf diese Weise deren Funktionalität spielerisch zu erfassen. Sie lassen sich in der Regel intuitiv verstehen. Diese Vorgehensweise empfiehlt sich übrigens für jede neue Programmierumgebung. Als Hilfsmittel greifen wir vornehmlich auf die von Microsoft bereits in Excel integrierte und somit direkt verfügbare Hilfe-Funktion zurück. Im Bedarfsfall können 1 Umfassende und sehr ausführliche Einführungen in Excel-VBA findet man beispielsweise in den Büchern von Held (2004, 2010a, 2010b). Eine kompakte Einführung bietet Nahrstedt (2011). Für einen Grundkurs in Programmierung mit Visual Basic siehe beispielsweise Kämper (2009). 2 Die Ausführungen hier basieren weitgehend auf der Excel-Hilfe und dabei insbesondere auf http://office.microsoft.com/de-de/ecel-help/ http://www.excel-functions.info http://de.excelfunctions.eu/ 6 Crash-Kurs in Excel VBA hier Antworten zu den meisten Fragen der Themenstellung gefunden werden. Weitere Hilfestellungen kann man dann über das Internet erlangen, diesbezügliche Links werden angegeben. Am Ende eines Abschnittes wird in der Regel ein zugehöriges Suchkriterium für die Hilfe-Funktion angegeben und durch markiert. Damit kann man dann weiterführende Informationen zu den jeweiligen Themen finden. Eine weitere Möglichkeit besteht darin, mit der Maus auf ein entsprechendes Icon des Bildschirms zu zeigen und die F1-Hilfe-Taste zu drücken. A.1 A.1.1 Die Entwicklungsumgebung von Excel VBA Aktivierung der Entwicklertools Die Registerkarte Entwicklertools wird in Excel 2010 nicht standardmäßig angezeigt. Sie kann wie folgt aktiviert werden: Registerkarte Datei Optionen Menüband anpassen Hauptregisterkarten Kontrollkästchen Entwicklertools aktivieren OK. Abbildung: Aktivierung der Entwicklertools A.1.2 Aufruf der Entwicklungsumgebung 7 Modellbasiertes Logistikmanagement Innerhalb der Entwicklungsumgebung kann für eine Anwendung der Programm-Code geschrieben und Bildschirmformulare mit deren Steuerelemente entwickelt werden. Sie ist somit das Gegenstück zur Ausführung einer Anwendung. Die Entwicklungsumgebung kann in Excel 2010 über folgende Möglichkeiten aufgerufen werden: • Tastenkombination ALT + F11 (die schnellste Möglichkeit). • Innerhalb der Registerkarte Entwicklertools durch Anklicken des Visual Basic Symbols oder alternativ des Menüpunktes Code Anzeigen. • Anklicken eines beliebigen Tabellenreiters (unten auf dem Blatt) und innerhalb des Drop-down-Menüs Code Anzeigen wählen. Abbildung: Aufrufen der Benutzeroberfläche Makros: Erstellen oder Löschen eines Makros Die Menüstruktur wirkt auf den ersten Blick recht komplex. Es können diverse Fenster über den Menüpunkt Ansicht angezeigt werden, die sich bei näherer Betrachtung hinsichtlich ihrer Funktionalität sehr praktisch ergänzen. Neben den Standards wie Projekt-Explorer und Eigenschaftenfenster sind da auch noch die Fenster Überwachungsfenster, Direktfenster, Lokal-Fenster sowie der Objektkatalog. A.1.3 Der Projekt-Explorer Unter einem Projekt versteht man eine Zusammenfassung unterschiedlicher Programmtexte für eine bestimmte Anwendung (im Beispiel: eine Tourenplanung). 8 Crash-Kurs in Excel VBA Man spricht auch von einem Container für die unterschiedlichen Arten von Programm-Code und nennt die Arten allgemein Module. Dazu gehören 1: • Programm-Code hinsichtlich der geöffneten Excel-Objekte: der Arbeitsmappen (mit der Standard-Bezeichnung: DieseArbeitsmappe) und deren Arbeitsblätter (mit den Standard-Bezeichnungen Tabelle1, etc.), • Programm-Code für Formulare (oder: UserForms, kurz: Forms) genannte Benutzeroberflächen mit den Standard-Bezeichnungen UserForm1, etc. Hier handelt es sich um Container für Bildschirmmasken, Steuerelemente und zugehörigen Anweisungen in Form von Prozeduren. • Allgemeiner, nicht objekt-spezifischer Programm-Code in Form von Prozeduren, der in unterschiedlichen Sinneinheiten (für die Programmstruktur und eventuellen Textaustausch zwischen Projekten) zusammengefasst bzw. „gekapselt“ wird: Standardmodule mit den Standard-Bezeichnungen Modul1, etc. • 2 sowie den Klassenmodulen mit den Standard-Bezeichnungen Klasse1, etc. als Container für selbst definierte Objekte mit den Definitionen ihrer Methoden und Eigenschaften. Jedes Projekt besitzt einen Namen. Wird der gleiche Projektname (im Beispiel VBAProjekt) in unterschiedlichen Dateien benutzt, so erscheint in Klammern dahinter auch der Dateiname. 1 Oftmals wird sprachlich nicht zwischen Modulen und Standardmodulen unterschieden, was häufig zur Verwirrung beiträgt. 2 Standardmodule wurden von Microsoft bis 2007 als Code-Module bezeichnet. 9 Modellbasiertes Logistikmanagement Abbildung: Projekt-Explorer Der Projekt-Explorer dient nur zur Verwaltung der Projekte, nicht zu deren inhaltlicher Erstellung. Er zeigt eine hierarchische Liste aller Projekte der momentan geöffneten Arbeitsmappen an, sowie die über den Excel-Manager eingebundenen Add-Ins (installierte Dateien mit der Endung .xla bzw. .xlam, in der Abbildung beispielsweise der Solver). Diese lassen sich jedoch nur dann im Detail anzeigen, wenn sie nicht Passwort-geschützt sind. 10 Crash-Kurs in Excel VBA Darüber hinaus wird auch noch das Projekt Personal.xlsb angezeigt1, in der als persönliche Library solche Programm-Codes gespeichert werden können, die dann auch für alle weiteren eigenen Arbeitsmappen zur Verfügung stehen sollen. Für das Öffnen des Projekt-Explorers gibt es folgende Möglichkeiten: • Tastenkombination STRG + R drücken. • Registerkarte Ansicht Projekt-Explorer wählen. • Anklicken des Icons Projekt-Explorer in der Symbolleiste der Entwicklungsumgebung. Bei einem neuen Projekt wird immer VBAProjekt als Vorgabe-Namen für das aktuelle Projekt aufgeführt. Für ein solches neues Projekt sind nur die Microsoft Excel Objekte standardmäßig vorhanden und angezeigt. Formulare, Standardmodule oder Klassenmodule müssen dann erst noch angelegt werden. Mit Rechtsklick auf VBAProjekt Eigenschaften von VBAProjekt kann man den Namen ändern und die detaillierte Anzeige des Projektes per Passwort sperren. Projekt-Explorer A.1.4 Das Eigenschaftenfenster Im Eigenschaftenfenster werden alle Eigenschaften und Einstellungen des im Projekt-Explorer ausgewählten Moduls zur Entwurfszeit angezeigt. Die voreingestellten Werte können hier verändert werden, ohne dass dafür aufwändige Programmierarbeit zu leisten ist. (Beispiele: Ein- und Ausblenden von Tabellen, Festlegen von Eingabebereichen, für die Programmierung genutzte interne Namensgebungen für alle angesprochenen Module, usw.). Für das Öffnen des Eigenschaftenfensters gibt es folgende Möglichkeiten: 1 • Taste F4 drücken, • Registerkarte Ansicht Eigenschaftenfenster wählen, Personal.xlsb wird seit Excel 2007 für die persönliche Makrosammlung benutzt, vorher war das die Datei personl.xls 11 Modellbasiertes Logistikmanagement • Anklicken des Icons Eigenschaftenfenster in der Symbolleiste der Entwicklungsumgebung. Abbildung: Eigenschaftenfenster bezogen auf das Excel Objekt DieseArbeitsmappe Eigenschaftenfenster In der Hilfe befindet sich ebenfalls eine Übersicht mit nützlichen Shortcuts für das Editieren der Eigenschaften. Shortcuts für das Eigenschaftenfenster Um die Definition/Bedeutung der einzelnen Eigenschaften zu erhalten, markiere man den Namen durch Anklicken bis er blau hinterlegt ist und drücke dann auf die F1Taste. A.1.5 Das Code-Fenster Das Code-Fenster ist der eigentliche Visual-Basic-Editor. Es dient zum Erstellen, Anzeigen und Bearbeiten von Visual-Basic-Code. 12 Crash-Kurs in Excel VBA Für das Öffnen eines Code-Fensters gibt es folgende Möglichkeiten: • Doppelklick im Projektfenster auf ein Excel-Objekt, Standardmodul oder Klassenmodul. Beim Doppelklick auf ein Formular öffnet sich zunächst ein graphischer Editor, der sogenannte Formular-Designer zum Entwurf von Dialog-Formularen und Platzieren von Steuerelementen, beim weiteren Doppelklick auf ein Steuerelement oder eine Formularfläche dann das Code-Fenster für die Eingabe zugehöriger Prozeduren. • Markieren eines Moduls im Projektfenster und Anklicken der Schaltfläche Code anzeigen in der Kopfzeile des Projektfensters. • Markieren eines Moduls im Projektfenster und im Menü Ansicht auf Code klicken oder F7 drücken. Abbildung: Code-Fenster Im oberen Teil sind zwei Auswahlfelder zu sehen. Im Feld Objekt (1) können alle verfügbaren Objekte ausgewählt werden. Abhängig von der Auswahl ändern sich dann auch die Einträge im Feld Prozedur (2). Es werden nur die für das Feld Objekt möglichen Ereignisse angezeigt. In der Kennzeichenleiste im Fenster unten links kann gewählt werden, ob die Prozeduren eines Modules einzeln oder gesamt angezeigt werden. Code-Fenster 13 Modellbasiertes Logistikmanagement A.1.6 Der Objektkatalog Der Objektkatalog wird über den Menüpunkt Anzeige oder die F2-Taste angezeigt. Er stellt alle relevanten Objekte übersichtlich dar, nicht nur die Objekte aus den vordefinierten Excel-Bibliotheken, sondern auch die eventuell manuell erstellten Objekte aus allen zugänglichen Projekten. Abbildung: Objektkatalog Das Feld Projekt/Bibliothek zeigt alle Bibliotheken an, auf die das aktive Projekt verweist. Es können Bibliotheken hinzugefügt oder über die Auswahl Alle Bibliotheken angezeigt werden. Im Feld Suchtext darunter kann Freitext eingeben werden, wobei auch Platzhalterzeichen verwendet werden können. Die letzten vier Einträge werden gespeichert und können ausgewählt werden. In dem Teilfenster Klassen werden alle verfügbaren Klassen der ausgewählten Bibliothek aufgelistet. Die Klasse wird in Fettschrift dargestellt, wenn für diese Code 14 Crash-Kurs in Excel VBA vorhanden ist. Standardelement einer Klasse sind durch ein * markiert und werden automatisch verwendet, wenn kein anderes Element festgelegt wurde. Das Teilfenster Elemente von zeigt alle Elemente der ausgewählten Klasse, wobei Methoden, Eigenschaften, Ereignisse oder Konstante, für die Code vorhanden ist, in Fettschrift dargestellt werden. Das Teilfenster Details zeigt detaillierte Informationen des ausgewählten Elements oder der übergeordneten Klasse an. Der hier angezeigte Text kann kopiert werden. In diesem Drop-down-Feld lassen sich die Bibliotheken, in denen gesucht werden soll, wiederum eingrenzen. Dabei kann zwischen folgenden Bereichen gewählt werden: BIBLIOTHEK BESCHREIBUNG Alle Bibliotheken Alle Elemente aus allen Klassen werden angezeigt. Excel Nur Elemente, die in Excel zur Verfügung stehen. MSForms Element, die für die Erstellung von Microsoft Formularen benutzt werden können. Office Alle Elemente, die im gesamten Office-Paket genutzt werden können. stdole Die für das Microsoft Objektsystem OLE zur Verfügung stehenden Elemente. VBA Alle Elemente, die nur im VBA Editor zur Verfügung stehen. VBAProject Zeigt alle Elemente an, die im aktuellen Projekt benutzt werden. Tabelle: Bibliotheken des Objektkataloges Nachdem der Suchbegriff in das zweite Drop-down-Feld eingeben wurde, erscheinen alle gefundenen Ergebnisse im Bereich Suchergebnisse. Dabei werden die 15 Modellbasiertes Logistikmanagement gefundenen Elemente angezeigt, welchen Klassen diese zugeordnet sind und in welcher Bibliothek sie sich befinden. Das untere Anzeigefeld zeigt die Eigenschaften des jeweiligen Elementes. Beispielhaft ist in der nachfolgenden Abbildung der Suchbegriff sqrt zu sehen. Anschließend wurde das Element SqrtPi ausgewählt, um die Eigenschaften des Elementes zu veranschaulichen. An dieser Stelle kann durch einfaches Markieren eines Elementes die Excel-Hilfe zu diesem aufgerufen werden. Dazu muss entweder die F1-Taste, der Button Objektkatalog oder das Excel-Hilfe Icon im Kontextmenü gewählt werden. Die Elemente lassen sich per Copy & Paste in das gewünschte Projekt kopieren. Abbildung: Suchanfrage im Objektkatalog 16 im Crash-Kurs in Excel VBA Wird ein Rechtsklick innerhalb des Objektkataloges ausgeführt, so öffnet sich das bekannte Kontextmenü. Dieses enthält zwei nützliche Funktionen. Zum einen lässt der Punkt Verborgene Elemente anzeigen auch versteckte Elemente sichtbar werden und zum anderen können mit dem Unterpunkt Verweise zusätzliche Bibliotheken in den Objektkatalog eingebunden werden. Durch einfaches Anhaken des jeweiligen Verweises wird die Verknüpfung zum Objektkatalog hergestellt und ist durch anschließende Bestätigung des Fensters verfügbar. Die zur Verfügung stehenden Bibliotheken hängen von der Software ab, die auf dem Rechner installiert ist. Die folgende Abbildung zeigt ein Dialogfenster zur Aktivierung weiterer Bibliotheken. Abbildung: Verweise im Objektkatalog Objektkatalog A.1.7 Testumgebung: Das Direktfenster Zum Austesten von Programmen und zur Fehlersuche lässt sich das Direktfenster verwenden. Es wird über die Registerkarte Ansicht Direktfenster oder alternativ durch die Tastenkombination STRG + G geöffnet. 17 Modellbasiertes Logistikmanagement Im Direktfenster kann temporärer Code eingegeben werden, der nach Betätigung der Eingabetaste ausgeführt wird. Der (ausgetestete) eingegebene Code kann aus dem Direktfenster kopiert und in das Code-Fenster eingefügt werden. Das Speichern des Codes im Direktfenster ist nicht möglich. Abbildung: Direktfenster Direktfenster A.1.8 Testumgebung: Das Überwachungsfenster Das Überwachungsfenster dient ebenfalls für Testzwecke. Es erscheint automatisch, sobald im Code spezielle Überwachungsausdrücke deklariert wurden. Abbildung: Überwachungsfenster 18 Crash-Kurs in Excel VBA Der Überwachungsausdruck wird in der Spalte Ausdruck angezeigt. In der Spalte Wert wird der Wert des Ausdrucks beim Übergang in den Haltemodus angezeigt. Dieser Wert kann bearbeitet werden. Bei unzulässigen Werten bleibt das Bearbeitungsfeld aktiv, der Wert wird markiert und eine Meldung mit der Fehlerbeschreibung erscheint. Durch Betätigen der ESC-Taste können Änderungen zurückgenommen werden. Aktuelle Werte, die nicht im Gültigkeitsbereich liegen, werden beim Wechsel in den Haltemodus nicht angezeigt. Überwachungsfenster A.1.9 Testumgebung: Das Lokal-Fenster Das Lokal-Fenster komplettiert die Instrumente der Testumgebung. Es zeigt alle festgelegten Variablen in der gegenwärtigen Prozedur mit zugehörigem Wert an. Nach einem Wechsel zwischen Laufzeit- und Haltemodus oder der Auswahl eines anderen Eintrages in der Aufrufliste wird das Lokal-Fenster aktualisiert. Abbildung: Lokal-Fenster Die Namen der Variablen werden in der Spalte Ausdruck aufgelistet und können nicht verändert werden. Um alle Variablen des aktuellen Moduls auf Modulebene anzuzeigen, kann die erste Variable in der Liste, eine spezielle Modulvariable, erweitert werden. Variablen werden in den verschiedenen Modulen differenziert dargestellt. Die Systemvariable <Me> ist bei einem Klassenmodul definiert, während bei Standardmodulen der <Name des aktuellen Moduls> die erste Variable darstellt 19 Modellbasiertes Logistikmanagement Über das Lokal-Fenster sind globale Variablen und Variablen in anderen Projekten nicht verfügbar. Der Eintrag in der Spalte Wert kann bearbeitet werden. Bei unzulässigen Werten bleibt das Bearbeitungsfeld aktiv, der Wert wird markiert und eine Meldung mit der Fehlerbeschreibung erscheint. Durch Betätigen der ESC-Taste können Änderungen zurückgenommen werden. Dabei muss für alle numerischen Variablen ein gültiger Wert angegeben werden, während bei Zeichenfolgevariablen keine Eingabe vorhanden sein muss. Es besteht die Möglichkeit, Variablen mit untergeordneten Variablen ein- oder auszublenden, wobei ausgeblendete Variablen keinen Wert anzeigen. Der Variablentyp wird im Element Typ angezeigt und kann nicht bearbeitet werden. Lokal-Fenster A.1.10 Die Excel-Hilfe innerhalb der Entwicklungsumgebung Die Excel-Hilfe bietet dem Entwickler zahlreiche Möglichkeiten, Fragen zur Visual Basic Thematik nachzuschlagen. Für den Aufruf der Excel-Hilfe innerhalb der VBA-Entwicklungsumgebung gibt es folgende Möglichkeiten: • Über die Menüleiste durch Aufruf des Icons • Anklicken des Punktes • Drücken der F1-Taste. . . Abbildung: Aufruf der Excel-Hilfe in der Menüleiste Die nachfolgende Abbildung zeigt die Excel-Hilfe nach dessen Aufruf. Das gesamte Inhaltsverzeichnis der Hilfe wird durch das Symbol 20 (1) angezeigt und an der Crash-Kurs in Excel VBA gleichen Stelle auch wieder ausgeblendet. Für die Suchanfragen wird das Eingabefeld (2) genutzt. Darüber hinaus besteht die Möglichkeit, über den Dropdown-Button (3) den Suchbereich einzuschränken oder zu erweitern. Abbildung: Die Excel-Hilfe Die nächste Abbildung zeigt die Einschränkung der Suche. Die Inhalte des Suchbereichs sind in zwei Kategorien aufgeteilt. Der obere Bereich Inhalte von Office.com (1) stellt die sogenannte Online-Suche dar. In diesem Abschnitt werden alle Suchanfragen mit der Online-Hilfe von Microsoft bearbeitet. Dazu wird eine aufgebaute Internetverbindung benötigt. Der Bereich Inhalte von diesem Computer (2) bewirkt, dass nur die lokalen Inhalte der Excel-Hilfe durchsucht werden. Diese wird automatisch bei der Standardinstallation von Microsoft Excel 2010 auf dem Computer installiert und reicht für die meisten Suchanfragen aus. 21 Modellbasiertes Logistikmanagement Abbildung: Einschränkung der Suche A.1.11 Einstellen der Entwicklungsumgebung Die Entwicklungsumgebung von Excel VBA kann individuell eingestellt werden über die Befehlsfolge: Registerkarte Entwicklertools Extras Optionen. Abbildung: Einstellungen der Entwicklungsumgebung: Editor Unter den Editor-Einstellungen sollte Variablendeklaration erforderlich aktiviert sein. Damit ist es dann im Sinne einer sauberen Programmentwicklung erforderlich, alle verwendeten Variablen vor deren Nutzung zu deklarieren. Auf diese Weise wird in allen neuen Modulen die Anweisung Option Explicit an erster Stelle den 22 Crash-Kurs in Excel VBA allgemeinen Deklarationen hinzugefügt. Für jede nicht definierte Variable erfolgt dann eine Fehlermeldung. Abbildung: Einstellungen der Entwicklungsumgebung: Verankerung Verankerbare Fenster werden automatisch ausgerichtet, nicht verankerbare Fenster können an eine beliebige Position auf dem Bildschirm verschoben werden. Auf diese Weise können beispielsweise Projekt- und Eigenschaftenfenster praktischerweise auf einen zweiten Bildschirm verlagert werden. Optionen 23 Modellbasiertes Logistikmanagement A.2 Die Die Eingabe von Programm-Code Programmierumgebung von Visual Basic unterscheidet Excel-Objekte, Formulare, Standardmodule und Klassenmodule. Als Programm-Code werden (im Sprachgebrauch von Microsoft) sogenannte (VBA-) Makros erzeugt, das sind Textbausteine in der Syntax der Programmiersprache VBA, die durch den Visual– Basic-Interpreter oder Präprozessor bei der Ausführung automatisch durch ein größeres Stück Programm-Code ersetzt werden. Der Makro-Begriff stammt aus den Anfängen von Excel (Version 4). Damals wurde noch eine auf BASIC abzielende rudimentäre Programmiersprache benutzt. Im Zusammenhang mit dem fortgeschrittenen VBA sind die Begriffe Makro und (VBA-) Prozedur synonym. Der Programm-Code wird innerhalb der Entwicklungsumgebung über das CodeFenster eingegeben. Hierbei werden die bereits erwähnten Modul-Blätter, kurz Module erzeugt. Ein Modul kann eines oder mehrere Makros/Prozeduren enthalten. Der besondere Vorteil der Nutzung des Code-Fensters besteht in den Programmierhilfen, genannt IntelliSense, die Microsoft hier bietet. Alternativ kann man aber auch für die Programmerzeugung externe (ASCII-) Text-Editoren benutzen und diesen Text dann über den Projekt-Explorer importieren: Rechtsklick auf Modul und Datei importieren wählen. Das Exportieren von Programm-Code in ASCII-Dateien zum Sichern und eventuellen Verwendung für andere Zwecke verläuft entsprechend. A.2.1 Erfassen von Makros mit dem Makro-Rekorder Mit dem Makro-Rekorder lassen sich bequem und einfach Makros erstellen. Er wird über die Registerkarte Entwicklertools (1) Makro aufzchn. (2) OK gestartet. Ein neues Fenster öffnet sich, in dem der Makroname und der Speicherort angegeben werden. Eine Tastenkombination zum späteren Ausführen des Makros kann optional hinterlegt werden. 24 Crash-Kurs in Excel VBA Abbildung: Makro aufzeichnen mit Makro-Rekorder Nach dem Start des Makro-Rekorders werden alle Tastatureingaben und Mausklicks aufgezeichnet. Diese Aufzeichnungen werden relativ zur Cursor-Position beim Aufruf des Rekorders vorgenommen, wenn vorher noch die Option Relative Aufzeichnung durch Anklicken festgestellt wird (dabei wird der Text gelb hinterlegt). Die Aufzeichnung wird über die Registerkarte Entwicklertools Aufzeichnung beenden (3) gestoppt. Abbildung: Makro-Aufzeichnung beenden 25 Modellbasiertes Logistikmanagement Schnellstart: Erstellen eines Makros A.2.2 Bearbeiten oder Ausführen eines vorhandenen Makros über die Menüstruktur Die vorhandenen Makros (gleichgültig, ob per Aufzeichnung oder manuell erstellt) können über viele Möglichkeiten ausgeführt oder bearbeitet werden. In der Excel-Umgebung: • unter der Registerkarte Entwicklertools mit Klick auf das Symbol Makros • oder alternativ über die Alt + F8 -Taste. In der Entwicklungsumgebung: • wählt man unter dem Menü Ausführen Sub/UserForm ausführen • oder über die F5-Taste • oder über den Rechtspfeil in der Werkzeugleiste. Man erhält in allen Fällen das nachfolgende Fenster. Abbildung: Fenster nach Aufruf des Menüpunktes Makro Beim Klick auf Bearbeiten öffnet sich das Code-Fenster für das Modul, das dieses Makro enthält, bei Schritt die schrittweise Testausführung. 26 Crash-Kurs in Excel VBA Unter Optionen lässt sich nachträglich eine zugehörige Tastenkombination mit der STRG-Taste einrichten oder ändern, mit der das Makro aus Excel heraus gestartet werden kann. Ausführen eines Makros A.2.3 Der Start von Makros mit Graphiken und Steuerelementen Eine alternative, aber sehr benutzerfreundliche Möglichkeit zum Ausführen eines Makros besteht darin, eine Graphik oder ein Steuerelement in eines der geöffneten Excel-Arbeitsblätter aufzunehmen und mit dem Makro zu verbinden. A.2.3.1 Ausführen eines Makros durch Anklicken eines Grafikobjektes Für diesen Zweck wird zunächst in ein Arbeitsblatt ein Grafikobjekt eingefügt, z. B. ein Bild, eine ClipArt, eine Form oder eine SmartArt. Die entsprechenden Möglichkeiten finden sich unter der Registrierkarte Einfügen. Abbildung: Einfügen von Graphikobjekten Hinzufügen, Ändern oder Löschen von Formen. Man kann das Graphikobjekt nun mit der rechten Maustaste anklicken und einem Makro zuweisen. Microsoft spricht hier von einem Hotspot. Es lässt sich durch Anklicken dann noch zusätzlich formatieren: Abbildung: Formatieren eines Graphikobjektes Ausführen eines Makros 27 Modellbasiertes Logistikmanagement A.2.3.2 Ausführen eines Makros durch Anklicken eines Steuerelementes Eine weitere Möglichkeit, eine Graphik zum Aufruf eines Makros zu benutzen, besteht darin, Formular- oder ActiveX-Steuerelemente als spezielle Objekte in ein Arbeitsblatt zu integrieren. Für diesen Zweck klicke man unter der Registrierkarte Entwicklertools auf Einfügen. Die entsprechende Toolbox wird angezeigt, man kann ein Steuerelement anwählen und auf dem Arbeitsblatt platzieren. Während dieses Vorganges ändert sich die Form des Cursors zu einem Kreuz. Abbildung: Einfügen von Formularsteuerelementen und ActiveX-Steuerelementen Abbildung: Anzeige der Toolbox für Steuerelemente Will man das Steuerelement hinterher bearbeiten, muss zuvor in der Registerkarte Entwicklertools auf den Entwurfsmodus umgeschaltet werden. Formularsteuerelemente Formularsteuerelemente sind die ursprünglichen Steuerelemente von Excel (XLM). Das Makro wird über Rechtsklick auf dem Steuerelement mit diesem verbunden und startet dann beim Anklicken des Steuerelementes. Innerhalb der Formularsteuerelemente wird je nach Art des Elementes bei dessen Formatierung auf den Inhalt von Arbeitsblatt-Zellen oder Zellenbereichen verwiesen. Diese Werte 28 Crash-Kurs in Excel VBA können dann als Parameter für ein Makro im Rahmen der Programmierung übernommen werden.1 ActiveX-Steuerelemente ActiveX-Steuerelemente bieten im Vergleich zu Formularsteuerelementen umfangreichere Optionen zur Automatisierung einer Aufgabe an. Es ist nicht möglich, ein Makro über ein ActiveX-Steuerelement nur durch Zuweisung auszuführen, so wie es bei einem Formularsteuerelement möglich ist. Die Makros gehören hier stattdessen als eigener VBA-Code direkt zum Steuerelement, so wie bei den noch zu beschreibenden UserForms und werden auch genauso behandelt. Zusätzlich verfügen sie über umfangreiche Eigenschaften, mit denen Darstellung, Verhalten, Schriftarten und andere Merkmale angepasst werden können. Klickt man auf das Steuerelement, so wird zugehörige VBA-Code ausgeführt und alle für dieses Steuerelement auftretenden Ereignisse verarbeitet. Einige der ActiveX-Steuerelemente stehen nur auf UserForms zur Verfügung.2 Übersicht über Formulare, Formularsteuerelemente und ActiveX-Steuerelemente auf einem Arbeitsblatt. A.2.4 Programmierung mithilfe des Code-Fensters Neben der automatischen Erfassung von Makros mit Hilfe des Makro-Rekorders kann Programm-Code im integrierten Visual-Basic-Editor über das Code-Fenster erstellt und bearbeitet werden. A.2.4.1 IntelliSense Der Visual-Basic-Editor verfügt mit IntelliSense über eine integrierte Funktionalität, die dem Programmierer durch zusätzliche Informationen und Auswahlmöglichkeiten die Arbeit erleichtert und die insbesondere den Aufwand des manuell einzugebenden Quellcodes reduzieren soll: 1 Siehe http://support.microsoft.com/kb/291073/de 2 Siehe http://office.microsoft.com/de-de/excel-help/ubersicht-uber-formulare-formularsteuerelemente- und-activex-steuerelemente-auf-einem-arbeitsblatt-HA010342745.aspx 29 Modellbasiertes Logistikmanagement • Der Quellcode wird nach jeder Eingabezeile optisch hinsichtlich der Schreibweise (Groß- und Kleinschreibung) zur besseren Übersichtlichkeit aufbereitet. • (Insbesondere lange) Variablennamen können mit STRG + Leertaste oder STRG + Tab automatisch vervollständigt werden, sobald ein Name eindeutig feststeht. • Bei der Eingabe eines Punkts hinter einer Objektvariablen werden die Eigenschaften und Methoden eines Objektes auflistet und die leichte Auswahl aus der Liste ermöglicht. • Bei dem Aufruf von Prozeduren erfolgen Hilfestellungen zur Angabe der Parameter. Diese Hilfestellungen können eingestellt werden über die Befehlsfolge: Registerkarte Entwicklertools Extras Optionen. Editor (Registerkarte, Dialogfeld "Optionen") A.2.4.2 Hilfestellungen über die Bearbeiten Symbolleiste 1 Die IntelliSense Funktionalitäten können zusätzlich auch über die Symbolleiste Bearbeiten abgerufen werden. Sie enthält weitere Schaltflächen, die Tastenkombinationen für häufig verwendete Menübefehle zum Bearbeiten von Code darstellen: Abbildung: Symbolleiste Bearbeiten Eigenschaften/Methoden anzeigen (Strg + J) Öffnet ein Feld im Code-Fenster mit den Eigenschaften und Methoden, die für das Objekt vor dem Punkt (.) verfügbar sind. 1 Siehe Excel-Hilfe unter „Bearbeiten Symbolleiste“ 30 Crash-Kurs in Excel VBA Konstanten anzeigen (Strg + Umschalt + J) Öffnet ein Feld im Code-Fenster mit den Konstanten, die für die eingegebene Eigenschaft zur Verfügung stehen, die vor dem Gleichheitszeichen (=) steht. QuickInfo (Strg + I) Stellt Informationen zur Syntax für eine Variable, Funktion, Methode oder Prozedur zur Verfügung, auf deren Namen sich der Cursor befindet. Parameterinfo (Strg + Umschalt + I) Zeigt im Code-Fenster ein Popup-Fenster mit Informationen zu den Parametern der Funktion an, in der sich der Cursor befindet. Wort vervollständigen (Strg + Leertaste) Visual Basic ergänzt automatisch das eingegebene Teil-Wort. Einzug vergrößern (Tab vorwärts) Verschiebt alle Zeilen des markierten Bereichs bis zum nächsten Tabstop. Einzug verkleinern (Tab rückwärts) Verschiebt alle Zeilen des markierten Bereichs bis zum vorherigen Tabstop. Haltepunkt ein/aus (F9) Setzt oder entfernt einen Haltepunkt für das Debuggen in der aktuellen Zeile. Block auskommentieren Fügt Kommentarzeichen am Zeilenanfang eines markierten Textbereichs ein. Auskommentierung des Blocks aufheben Entfernt Kommentarzeichen am Zeilenanfang eines markierten Textbereichs. Lesezeichen setzen/zurücksetzen Aktiviert bzw. deaktiviert ein Lesezeichen für die aktive Zeile im Code-Fenster. Nächstes Lesezeichen Setzt den Fokus auf das nächste Lesezeichen in der Lesezeichenliste. Vorheriges Lesezeichen Verschiebt den Fokus auf das vorherige Lesezeichen in der Lesezeichenliste. Alle Lesezeichen löschen Löscht alle Lesezeichen. Bearbeiten-Symbolleiste 31 Modellbasiertes Logistikmanagement A.2.4.3 Direkter und indirekter Aufruf des Code-Fensters Alle nicht über Formulare eingegebenen Programme werden direkt gespeichert und lassen sich auch direkt aufrufen: die Excel-Objekte, die Standardmodule oder die Klassenmodule. Für den Programm-Code, der den Ablauf von Benutzeroberflächen (UserForms) regelt, wird das Code-Fenster innerhalb des logisch übergeordneten FormularDesigners aufgerufen, indem auf ein Steuerelement geklickt wird. A.2.4.4 Anlegen eines neuen Modules Die Excel-Objekte sind immer schon über die gewöhnliche Excel-Umgebung vorgegeben. Falls aber noch keine Standard- bzw. Klassenmodule vorhanden sein sollten, müssen diese zunächst angelegt werden, bevor Programm-Code eingegeben werden kann. Für das Anlegen eines neuen Standardmodules [Klassenmodules] gibt es folgende Möglichkeiten: • Man wählt in der Entwicklungsumgebung aus dem Menü Einfügen den Befehl Modul [Klassenmodul]. • Man wählt in der Symbolleiste Voreinstellung das Drop-down-Symbol und dann Modul [Klassenmodul]. • Rechtsklick im Projekt-Explorer auf den Projektnamen Einfügen Modul [Klassenmodul]. In jedem Fall öffnet sich ein noch leeres, jetzt editierbares Code-Fenster. Projekt-Explorer A.2.4.5 Aufruf eines vorhandenen Modules Zum Öffnen eines bereits vorhandenen Programmtextes klickt man im ProjektExplorer doppelt auf den Namen des Modules, das diesen Text enthält oder wählt – wie oben erwähnt - das gewünschte Makro über die Registerkarte Entwicklertools mit Klick auf das Symbol Makros. 32 Crash-Kurs in Excel VBA Für jedes vorhandene Modul kann ein eigenes Code-Fenster geöffnet werden. Auf diese Weise kann Programm-Code zwischen unterschiedlichen Modulen und Fenstern verschoben oder kopiert werden. Makros A.2.4.6 Anlegen einer neuen Prozedur Nachdem das Code-Fenster geöffnet ist, bietet die Entwicklungsumgebung Hilfestellung bei der Eingabe einer neuen Prozedur (im alten Sprachgebrauch: eines Makros). Dazu gibt es folgende Möglichkeiten: • Man wählt in der Entwicklungsumgebung aus dem Menü Einfügen den Befehl Prozedur. • Man wählt in der Symbolleiste Voreinstellung das Drop-down-Symbol (Prozedur einfügen) und dann Prozedur. Abbildung: Prozedur hinzufügen Es öffnet sich das obige Fenster, indem dann einer der drei möglichen ProzedurTypen (SUB, FUNCTION, PROPERTY) sowie der Gültigkeitsbereich der Prozedur festgelegt werden. 33 Modellbasiertes Logistikmanagement VBA unterscheidet zwischen vier Gültigkeitsbereichen für Prozeduren, Objekte, Variablen und Konstante: • PUBLIC: Öffentliche Ebene, d.h. alle Prozeduren in allen Modulen • PUBLIC und Option Private –Anweisung für ein Modul: Projektebene, d.h. alle Prozeduren in allen Modulen des zugehörigen Projektes, aber nicht darüber hinaus. • PRIVATE: Modulebene, alle Prozeduren in dem Modul der so deklarierten Prozedur • STATIC: Prozedurebene und bedeutet, dass die zugehörigen lokalen Variablen nach dem Aufruf der Prozedur ihren Wert beibehalten und nicht standardmäßig gelöscht werden. Für Prozeduren in Klassenmodulen (und nur hier) gibt es dazu noch den optionalen Zusatz FRIEND. Dadurch sind diese Prozeduren auch in bestimmten anderen Klassen des Projektes aufrufbar, den sogenannten befreundeten Klassen. In jedem genannten Fall erzeugt die Entwicklungsumgebung dann das Gerüst innerhalb der VBA-Syntax, welches anschließend durch weiteren Programm-Code ergänzt werden kann. Erstellen einer Prozedur A.2.5 Debugging/Fehlersuche In der Entwicklungsumgebung werden unter dem Menü Debuggen verschiedene Werkzeuge aufgeführt, die bei der Diagnose und dem Auffinden von Fehlern behilflich sein können. A.2.5.1 Zeilenweise Abarbeitung einer Prozedur Eine zeilenweise Abarbeitung, bei der jeder einzelne Schritt bestätigt werden muss, ist über das Menü Debuggen Einzelschritt oder die F8-Taste möglich. Eine weitere 34 Möglichkeit besteht darin, den Lauf des Makros mit Hilfe der Crash-Kurs in Excel VBA Tastenkombination STRG + F8 an einer mit dem Cursor markierten Position zu unterbrechen. Verfolgen der Ausführung des Codes A.2.5.2 Verwendung von Haltepunkten in einer Prozedur Über das Menü Debuggen Haltepunkt ein/aus oder mit der F9-Taste können entsprechende Haltepunkte eingefügt und mit der Tastenkombination STRG + UMSCHALT + F9 wieder gelöscht werden. Setzen und Löschen eines Haltepunktes A.2.5.3 Verwendung von Überwachungsausdrücken in einer Prozedur Darüber hinaus können über das Menü Debuggen Überwachung hinzufügen benutzerdefinierte Überwachungsausdrücke festgelegt werden, die das Verhalten eines Ausdrucks beobachten und im Überwachungsfenster angezeigt werden. Sobald die Anwendung in den Haltemodus wechselt, können die einzelnen Werte überprüft werden. Hinzufügen eines Überwachungsausdrucks A.2.6 Standarddialoge Excel bietet eine Vielzahl an Standarddialogen für Interaktionen mit dem Anwender. Diese werden z. B. dazu verwendet, Hinweise zu geben, Dateien auszuwählen oder Einstellung von Optionen vorzunehmen. Grundsätzlich lassen sich zwei Arten von Dialogfenstern (Dialoge) unterscheiden: • Vordefinierte VBA-Dialoge, wie z. B. MsgBox, InputBox • Integrierte Excel-Dialoge. 35 Modellbasiertes Logistikmanagement Generell basieren alle Dialoge auf dem UserForm-Objekt. Die Standard-Dialoge können über die Application-Eigenschaft Dialogs aufgerufen werden und mit der Methode Show angezeigt und ausgeführt werden. Listen der integrierten Dialogfeldargumente A.2.6.1 Die Funktion MsgBox MsgBox ist eine sehr häufig genutzte Funktion, die den Programmablauf unterbricht, in einem Dialogfeld eine Meldung anzeigt und auf die Auswahl einer Schaltfläche wartet. Es wird ein Wert vom Typ Integer zurückgegeben, der anzeigt, auf welche Schaltfläche der Benutzer geklickt hat. MsgBox(Prompt[, Buttons] [, Title] [, Helpfile, HelpContextId]) Parameter: Prompt Erforderlich. Eine Kette von max. 1024 Zeichen, die als Meldung im Dialogfeld erscheint. Buttons Optional mit Standardwert 0. Numerischer Ausdruck mit einem kombinierten Wert, der Anzahl und Typ der anzuzeigenden Schaltflächen entspricht, die Art des zu verwendenden Symbols sowie die Standardschaltfläche und die Bindung des Dialogfeldes angibt. Title Optional mit Anwendungsname als Standardwert. Ein Zeichenfolgenausdruck, der in der Titelleiste des Dialogfeldes angezeigt wird. Helpfile Nur in Verbindung mit HelpContextId: Ein Zeichenfolgenausdruck, der die Hilfedatei mit der kontextbezogenen Hilfe für das Dialogfeld angibt. HelpContextId Optional. Ein numerischer Ausdruck mit der Hilfekontextkennung für 36 Crash-Kurs in Excel VBA das entsprechende Hilfethema. Beispiele ohne Berücksichtigung eines Rückgabewertes: (Keine Klammern!) MsgBox “Weitermachen ?“ MsgBox “Der eingegebene Wert“ + Chr(13) + “ist unzulässig!“ MsgBox “Ldistanz: “ & 27 & “ km“ Bei einem Rückgabewert müssen Klammern gesetzt werden: Antwort = MsgBox(Mldg, Stil, Titel, Hilfe, Ktxt) MsgBox-Funktion, MsgBox-Funktion (Beispiel) A.2.6.2 Die Funktion InputBox VBA stellt für Benutzereingaben die Funktion InputBox zur Verfügung. Sie zeigt eine Eingabeaufforderung in einem Dialogfeld an, wartet auf die Eingabe eines Textes oder auf das Klicken auf eine Schaltfläche und gibt einen Wert vom Typ String zurück, der den Inhalt des Textfeldes angibt. InputBox(prompt [, Title] [, Default] [, [, Helpfile, HelpContextId]) Left] [, Top] _ Parameter: Default optional: Zeichenfolge als Vorbelegung für das Eingabefeld, Standardwert ist leer. Left optional: Numerischer Ausdruck für die x-Position des Dialogfeldes, der horizontale Abstand des linken Rands des Dialogfeldes vom linken Rand des Bildschirms in Points gemessen. Das Dialogfeld wird standardmäßig horizonal zentriert. Top optional: Numerischer Ausdruck für die y-Position des Dialogfeldes, der vertikale Abstand des oberen Rands des Dialogfeldes zum oberen Rand des Bildschirms in Points gemessen. Das Dialogfeld wird 37 Modellbasiertes Logistikmanagement standardmäßig 1/3 vom oberen Bildrand positioniert. Die anderen Parameter sind wie bei der Funktion MsgBox definiert. Wenn außer dem ersten benannten Argument weitere Argumente angeben werden sollen, muss InputBox in einem Ausdruck verwendet werden. Wenn einige Parameter mit einer Position am Anfang nicht angeben werden sollen, muss dennoch das entsprechende Komma als Trennzeichen angeben werden, so dass der Sinn von eingegebenen Parametern ersichtlich wird. Für komplett ausgelassene Parameter am Listenende gilt das also nicht. Beispiele Eingabe = InputBox( “Anzahl eingeben“, “Übersicht“, 0, 830, 950) Eingabe = InputBox( , , , 830, 950) InputBox-Funktion, InputBox-Funktion (Beispiel) A.2.6.3 Die Methode InputBox Neben der Funktion InputBox gibt es auch noch die Application-Methode mit gleichem Namen. Der Unterschied zur Funktion besteht darin, dass bei der Methode auch noch der Typ des eingegebenen Wertes definiert werden kann. Objekt.InputBox(Prompt [, Title] [, Default] [, Left] [, Top] _ [, HelpFile, HelpContextId][, Type]) Parameter (sonst wie bei der Funktion InputBox): Type optional: Gibt den Datentyp des Rückgabewertes an. Wenn dieses Argument nicht angegeben wird, gibt das Dialogfeld Text zurück. Ohne Angabe des Objekts geht VBA von der InputBox-Funktion aus und liefert bei der Type-Angabe eine Fehlermeldung. Wird Type nicht als Argument angegeben, so wird der Eingabewert je nach Form als Zahl, Text Boolscher Wert oder Formel interpretiert. Werte, die im Argument Type übergeben werden können: 38 Crash-Kurs in Excel VBA Wert Bedeutung 0 Formel 1 Zahl 2 Text (Zeichenfolge) 4 Wahrheitswert (True oder False) 8 Zellbezug, z. B. ein Range-Objekt 16 Fehlerwert, z. B. #NV 64 Wertearray Beispiele ZahlEingabe = Application.InputBox( “Bitte Anzahl eingeben“) ZellenEingabe =Application.InputBox( Prompt:=“Bitte Zelle markieren“, Type:=8) Application.InputBox-Methode A.2.7 Erstellen einer User-Form Neben den nicht veränderbaren Standard-Dialogen gibt es die benutzerdefinierten Dialoge, die sogenannten UserForms. Sie dienen der Realisierung einer anwenderfreundlichen Lösung und können mit individuellen Steuerelementen bestückt und automatisiert werden. Zu den Steuerelementen gehören folgende Elemente: • Eingabe- und Textfelder • Listenfelder • Kombinationslistenfelder • Optionsschaltflächen • Kontrollkästchen. Vorgehensweise: Erstellen eines benutzerdefinierten Dialogfelds A.2.7.1 Benutzerformular erstellen 39 Modellbasiertes Logistikmanagement UserForms können über das Menü Einfügen ausgewählt werden und öffnen einen Formular-Designer mit zugehörigen Werkzeugen (s. nachfolgende Abbildung). Abbildung: UserForm-Eingabe A.2.7.2 Steuerelemente einfügen Diese Werkzeuge ermöglichen es dem Benutzer, unterschiedliche Steuerelemente in die UserForm einzufügen. Standardmäßig sind folgende Elemente enthalten: Elemente markieren. Texte einfügen. Eingabefeld einfügen. Kombinationsfeld einfügen. Mit einem Klick auf das Pfeilsymbol gibt es weitere Auswahlmöglichkeiten. Werte können hier auch manuell durch den Benutzer eingetragen werden. Listenfeld einfügen. Da mehrere Einträge gleichzeitig angezeigt werden, benötigt das Listenfeld mehr Platz. Kann die UserForm nicht alle Einträge anzeigen, wird dynamisch eine vertikale Steuerungsleiste eingebunden. Rahmen einfügen. Einzelne Elemente können mit Hilfe des Rahmenelementes gruppiert werden. 40 Crash-Kurs in Excel VBA Kontrollkästchen einfügen. Bei der Verwendung von Kontrollkästchen innerhalb einer Gruppe können ein aber auch mehrere Kontrollkästchen aktiviert werden. Optionsfeld einfügen. Bei der Verwendung von Kontrollkästchen innerhalb einer Gruppe kann immer nur ein Kontrollkästchen aktiviert sein. Umschaltfeld einfügen. Mit Hilfe des Umschaltfeldes können zwei Funktionen in einem Steuerelement untergebracht werden, wie z.B. Gitternetz ein/ Gitternetz aus. Befehlsschaltfläche einfügen. Die Befehlsschaltflächen können später mit Makros bestückt werden. Register einfügen. Inhaltlich zusammenhängende Steuerelemente in Gruppen können mit jeweils unterschiedlichen Informationen zusammengestellt und angezeigt werden. Multiseiten einfügen. Größere Mengen an Information, die zu unterschiedlichen Kategorien gehören, können eingegeben werden. Bildlaufleiste einfügen. Dieses Steuerelement wird verwendet, wenn die UserForm so groß ist, dass bestimmte Elemente nur mit Hilfe von Bildlaufleisten angezeigt werden können. Drehfeld einfügen. Mit Hilfe dieses Symbols können z.B. Zahlen schrittweise erhöht werden. Meist wird dieses Steuerelement zusammen mit einem Textfeld verwendet, in dem das Ergebnis schrittweise angepasst werden kann. Grafiken, Logos oder Bilder einfügen. Einen Bereich über ein Eingabefeld markieren bzw. eigene Texte eingeben und an die UserForm übergeben. Tabelle: Steuerelemente einer UserForm Zusätzlich können über einen Rechtsklick auf die Werkzeugsammlung weitere Steuerelemente hinzugefügt werden. Ebenso können bereits ausgewählte Werkzeuge aus der Ansicht gelöscht werden. A.2.7.3 Steuerelementeigenschaften festlegen Steuerelemente können zusätzlich noch durch weitere Eigenschaften beschrieben werden. Diese sind über einen Rechtsklick Eigenschaften auf das entsprechende Steuerelement zugänglich. Beschriftung 41 Modellbasiertes Logistikmanagement Beim Einfügen der Steuerelemente wird standardmäßig eine Beschriftung eingefügt. Diese kann in einem weiteren Schritt den Anforderungen entsprechend abgeändert werden. Dazu auf die Standard-Beschriftung klicken und die neue Beschriftung einfügen. Positionierung Mit der StartupPosition-Eigenschaft ist es möglich, den Startwert festzulegen, an welcher Stelle auf dem Bildschirm der Dialog erscheinen soll. Da diese Eigenschaft nicht im Objektkatalog aufgeführt ist, werden hier die vier Einstellungen erläutert: EINSTELLUNG WERT BESCHREIBUNG Manual 0 Für den Dialog wird keine Anfangseinstellung festgelegt. CenterOwner 1 Dialog wird auf dem Element zentriert, zu dem das UserForm-Objekt gehört (Defaulteinstellung). CenterScreen 2 Dialog wird anhand des Bildschirms zentriert. Windows Default 3 Dialog erscheint in der linken oberen Ecke des Bildschirms. Tabelle: UserForm positionieren Unabhängig von StartupPosition können Dialoge manuell positioniert werden. Dazu werden die Eigenschaften Left und Top in der UserForm_ActivateEreignisprozedur eingestellt. Aktivierreihenfolge Bei der Erstellung von UserForms sollte die Aktivierreihenfolge beachtet werden, anhand derer die einzelnen Steuerelemente ausgeführt werden. Dies kann in Bezug auf ein Springen mit der Tab-Taste interessant für den Benutzer sein. Mit einem Rechtsklick auf die UserForm kann im Menü-Fenster die Reihenfolge ausgewählt werden: 42 Crash-Kurs in Excel VBA Abbildung: Aktivierreihenfolge UserForm programmieren Nachdem Steuerelemente in die UserForm eingefügt wurden, können diese auch mit Funktionen versehen werden. Steuerelemente können zur Laufzeit initialisiert werden, indem der VBA-Code in einer Prozedur verwendet wird. Dazu müssen dann auch Prozeduren/Makros erstellt werden, welche die UserForm aufrufen, um Eingaben zu tätigen. Die eingegebenen Daten müssen dafür in einer Tabelle gespeichert werden. Zum Schluss muss die UserForm wieder beendet werden. A.2.7.4 Steuerelement-Eigenschaften initialisieren Mit Hilfe des Initialize-Ereignisses können Anfangswerte für das Steuerelement festgelegt werden. Der Vorteil hier besteht darin, dass der Initialisierungscode im Formular bleibt und dadurch in andere Projekte kopiert werden kann. Mit Hilfe der Show-Methode, mittels der das Dialogfeld angezeigt werden kann, können die Steuerelemente initialisiert werden. Außerdem können Steuerelemente zur Laufzeit initialisiert werden, indem VBA-Code in einem Makro verwendet wird. Initialisieren von Steuerelement-Eigenschaften A.2.7.5 Steuerelement- und Dialogfeldereignisse erstellen UserForms besitzen einen vordefinierten Ereignissatz, d.h. dass z. B. eine Befehlsschaltfläche ein Click-Ereignis oder UserForms-Objekte ein Initializie-Ereignis besitzen. 43 Modellbasiertes Logistikmanagement Um Ereignisprozeduren für ein Steuerelemente bzw. ein Formular zu schreiben, muss das Steuerelement bzw. das Formular mit einem Doppelklick geöffnet werden und aus dem Drop-down-Listenfeld bzw. über Einfügen Prozedur eine Prozedur ausgewählt werden. Dann erst kann der Code der Ereignisprozedur hinzugefügt werden. A.2.7.6 UserForm anzeigen Um eine UserForm über VBA-Code anzuzeigen, muss sie zunächst als Objekt geladen und dann mit der Show-Methode angezeigt werden. Load UserFormName Load-Anweisung UserFormName.Show UserForm Objekt Soll eine erstellte UserForm getestet werden, so kann die Ausführung über Ausführen Sub/ Formular ausführen oder über die F5-Taste angestoßen werden. A.2.7.7 Steuerelemente während der Code-Ausführung verwenden Während der Code-Ausführung besteht die Möglichkeit, einige der SteuerelementeEigenschaften festzulegen und zurückzugeben. Daten, die in ein Formular eingegeben wurden, gehen beim Schließen des Fensters verloren. Daher müssen die eingegebenen Daten in Variablen der Modulebene gespeichert werden, während das Formular noch ausgeführt wird. Verwenden von Steuerelementen während der Code-Ausführung 44 Crash-Kurs in Excel VBA A.2.7.8 Besonderheiten beim Dialogende Durch den X-Button des Dialogfelds in der rechten oberen Ecke kann ein Dialog geschlossen werden. Ist dies nicht gewünscht, so muss das QueryClose-Ereignis mit dem Parameter CloseMode ausgewertet werden. Dieses Ereignis kann verschiedene Zustände haben: EINSTELLUNG WERT BESCHREIBUNG vbFormControlMenu 0 Der Benutzer hat auf der UserForm im Systemmenü den Befehl Schließen gewählt. VbFormCode 1 Die Unload-Anweisung wird durch Code aufgerufen. VbAppWindows 2 Die aktuelle Windows-Betriebsumgebungssitzung wird beendet. VbAppTaskManager 3 Die Anwendung wird vom Windows-Task-Manager geschlossen. Tabelle: QueryClose-Ereignis Dieses Ereignis kann über das Argument Cancel gesteuert werden. Durch Festlegen des Arguments auf einen Wert ungleich 0 wird das QueryClose-Ereignis in allen geladenen Benutzerformularen beendet. So wird verhindert, dass die UserForm und die Anwendung geschlossen werden. Private Sub UserForm_QueryClose(Cancel%, CloseMode%) If CloseMode = vbFormControlMenu Then Cancel = True End Sub 45 Modellbasiertes Logistikmanagement A.2.8 Internet Links für Hilfestellungen zur VBA Programmierung Einige geeignete Portale und Medien sind im Folgenden aufgeführt: BEREICH / ANBIETER INTERNETLINK / BEGRIFF Wikibooks VBA in Excel http://de.wikibooks.org/wiki/VBA_in_Excel Galileo Computing Einstieg in Visual Basic 2010 http://openbook.galileocomputing.de/einstieg_vb_2010/ VBA-Programmierung http://www.vba-wordwelt.de/ Visual Basic Online Seminar http://www.vb-seminar.de/ Excel Standard und Excel VBA http://www.online-excel.de/ Microsoft Developer Network http://msdn.microsoft.com/dede/library/office/ee814737(v=office.14).aspx Youtube Suchbegriff: VBA Tutorial Office Forum http://www.office-loesung.de/viewforum10_0_0.php Excel-Formel-Übersetzer http://de.excel-translator.de/ Tabelle: Hilfestellungen über das Internet 46 Crash-Kurs in Excel VBA A.3 Die Syntax von VBA Das folgende Kapitel sind die wichtigsten Sprachelemente von VBA zusammengefasst. Zusätzliche Erläuterungen liefert grundsätzlich das Visual-Basic Sprachverzeichnis in der Excel-Hilfe für Entwickler A.3.1 . Kommentare und Schreibkonventionen Eingefügte Kommentare und Übersichtlichkeit im Schriftbild sind wesentliche Merkmale guter Programmierung. Sie sind unabdingbar, um ein Programm auch nach längerer Zeit schnell wieder verstehen zu können. • Ein Kommentarbereich (nicht notwendig am Anfang einer Zeile) beginnt mit einem Hochkomma und endet am Zeilenende. • Eine Kommentarzeile beginnt mit der klassischen Anweisung Rem (für Remark). • Für eine bessere Übersichtlichkeit können Texte eingerückt werden. • Längere Anweisungen können auf mehrere Zeilen verteilt werden, indem ein Unterstrich mit vorangehendem Leerzeichen gesetzt wird. • Mehrere Anweisungen innerhalb einer Zeile werden durch Doppelpunkt getrennt. Rem Das ist ein Kommentar. ‘ Dies ist ebenfalls eine Kommentarzeile. ‘ Es folgt eine Anweisung über drei Zeilen. i = MsgBox("Dies ist ein sehr langer Text.", _ vbOKOnly, _ "Achtung! Achtung!") ‘ Es folgen drei Anweisungen in einer Zeile x=y: u=w: a=b A.3.2 Standardkonventionen für die Namensgebung Eine Reihe von Sprachelementen in VBA muss zur Unterscheidung einen Namen erhalten, z. B. Variablen, Konstante, Prozeduren, Objekte, Formulare, etc. 47 Modellbasiertes Logistikmanagement Hierbei ist folgende Standardkonvention zu beachten: • Das erste Zeichen muss ein Buchstabe sein, • jedes weitere Zeichen eine Ziffer, ein Buchstabe oder ein Sonderzeichen, • Sonderzeichen wie #, %, &, ! , ? sowie mathematischen Zeichen und Leerzeichen sind nicht erlaubt, • maximal 255 Zeichen, • kein VBA Schlüsselwort. A.3.3 Prozeduren Eine Prozedur ist eine Folge von gemeinsam ausgeführten Anweisungen. In VBA unterscheidet man die Prozedurtypen Sub, Function und Property. Jede Prozedur muss mit einem eindeutigen Namen versehen werden. Prozeduren sind standardmäßig Public, wenn sie nicht explizit mit Public oder Private deklariert werden. Auf eine solche Prozedur kann von allen anderen Prozeduren in allen Modulen zugegriffen werden. Bei Verwendung in einem Modul mit einer Option Private-Anweisung kann auf die Prozedur nur innerhalb des Projekts zugegriffen werden. A.3.3.1 Sub-Prozeduren [Private | Public] [Static] Sub Name [(ArgListe)] [Anweisungen] [Exit Sub] [Anweisungen] End Sub ArgListe ist eine Variablenliste mit den Argumenten, die an die Sub-Prozedur beim Aufruf übergeben werden. Mehrere Variablen werden durch Kommata getrennt. Dabei wird die folgende Syntax verwendet: 48 Crash-Kurs in Excel VBA [Optional][ByVal | ByRef] [ParamArray] VarName[()] [As Typ][=Standardwert] Mit folgenden Bedeutungen: • Optional, dass ein Argument nicht erforderlich ist. Alle daran anschließenden Argumente müssen ebenfalls optional sein. • ByVal, dass das Argument als Wert übergeben wird. • ByRef, dass das Argument als Referenz zur Speicheradresse übergeben wird (Standard in VBA) • ParamArray ist nur als letztes Argument in ArgListe zulässig und gibt an, dass das letzte Element ein als Optional deklariertes Datenfeld mit VariantElementen ist. ParamArray erlaubt die Angabe einer variablen Anzahl von Argumenten und darf nicht in Kombination mit den Schlüsselwörtern ByVal, ByRef oder Optional benutzt werden. Sub-Anweisung Aufruf einer Sub-Prozedur Call ProzedurName[(ArgListe)] bzw. ProzedurName[ArgListe] Mit folgenden Bedeutungen: • Call ist dabei ein optionales Schlüsselwort. Wird es angegeben, so MUSS ArgListe in Klammern stehen. • ArgListe ist die durch Kommata getrennte Liste der Variablen, die an die Prozedur übergeben werden sollen. Wird das Schlüsselwort Call NICHT verwendet, darf ArgListe NICHT in Klammern stehen. Call-Anweisung 49 Modellbasiertes Logistikmanagement A.3.3.2 Function-Prozeduren [Public | Private | Friend] [Static] Function Name [(ArgListe)] [As Typ] [Anweisungen] [Name = Ausdruck] [Exit Function] [Anweisungen] [Name = Ausdruck] End Function Function-Prozeduren sind standardmäßig Public, wenn sie nicht explizit mit Public, Private oder Friend deklariert werden. Für ArgListe gelten die gleichen Regeln, wie sie unter Sub-Prozeduren aufgeführt wurden. Aufruf einer Function-Prozedur Der Aufruf einer Function-Prozedur innerhalb eines Ausdrucks erfolgt durch Angabe des Funktionsnamens gefolgt von der Argumentliste in Klammern. Beispiel: d = LuftDist(x_a, y_A, x_B, y_B, -1) Wird die Funktion nur aufgerufen ohne den Rückgabewert zuzuordnen, so wird die Funktion wie eine Sub-Prozedur behandelt. Beispiel: MsgBox “Weitermachen?“ Call MsgBox(“Weitermachen?“) Function-Anweisung A.3.3.3 Property-Prozeduren Über Property-Prozeduren können benutzerdefinierte Eigenschaften in UserForms, Standardmodulen und Klassenmodulen erstellt und bearbeitet werden. Sie werden damit zu einer Eigenschaft des Moduls, das die Prozedur enthält. 50 Crash-Kurs in Excel VBA [Public | Private] [Static] Property {Get | Let | Set} Eigenschaftsname [(Argumente)] [As Typ] Anweisungen End Property Schreiben einer Property-Prozedur A.3.4 Konstante, Variable und Datenfeldern Das Speichern von Daten läuft auch in VBA über Konstante und Variable, die durch Namen unterschieden werden. Hinsichtlich des Speicherbedarfes werden die üblichen unterschiedlichen Datentypen betrachtet. Bei der Deklaration von Konstanten, Variablen oder Datenfeldern wird dann deren individueller Speicherbedarf festgelegt. A.3.4.1 Standard-Datentypen WERT DATENTYP Byte Ganze Zahlen Integer Long Single Reelle Zahlen Double Currency WERTEBEREICH/ SPEICHERBEDARF Wertebereich: 0. . . 255, 1 Byte Speicherbedarf Integer Wertebereich: -32 768. . . 32 767, 2 Byte Speicherbedarf Wertebereich: -2 147 483 648. . . 2 147 483 647, 4 Byte Speicherbedarf Fließkommazahl mit 8 Stellen Genauigkeit, 4 Byte Speicherbedarf Fließkommazahl mit 16 Stellen Genauigkeit, 8 Byte Speicherbedarf Festkommazahlen mit 15 Stellen Genauigkeit vor und 4 Stellen hinter dem Komma; Speicherbedarf: 8 Byte KÜRZEL DEFTYP kein DefByte % DefInt & DefLng ! DefSng # DefDbl @ DefCur 51 Modellbasiertes Logistikmanagement WERT WERTEBEREICH/ DATENTYP Zeichenketten String Wahrheitswerte Boolean SPEICHERBEDARF Speicherbedarf: 10 Byte und 2 Byte pro Zeichen; Länge nur durch RAM begrenzt Datentyp, der nur zwei Werte annehmen kann (True, False); Speicherbedarf: 2 Byte Nimmt je nach Bedarf einen der obigen Datentypen an; Speicherbedarf: mindestens 16 Byte, bei Zeichenketten 22 Byte plus 2 Byte pro Zeichen KÜRZEL DEFTYP $ DefStr kein DefBool kein DefVar VariantDatentyp Variant Datum/Zeit Date 8 Byte Speicherbedarf Kein DefDate Objekte Object Verweis auf ein Objekt 4 Byte Speicherbedarf kein DefObj Tabelle: Standard-Datentypen in VBA Datentypen A.3.4.2 Benutzerdefinierte Datentypen Neben den Standard-Datentypen kann man als Benutzer aber auch noch eigene Datensätze mittels der Type-Anweisung definieren. Die Type-Anweisung kann nur auf Modulebene verwendet werden. Nach der Deklaration eines solchen benutzerdefinierten Typs kann eine Variable oder ein Datenfeld dieses Typs innerhalb des Gültigkeitsbereiches dieser Type-Deklaration deklariert werden. [Private | Public] Type TypName AttributName1 [([Indizes])] As Typ [AttributName2 [([Indizes])] As Typ] ... End Type 52 Crash-Kurs in Excel VBA Beispiel: Type Lkw Hersteller As String = “MAN“ Gewicht As Double = 34.12 Stellplaetze As Integer = 100 End Type Lkw.Hersteller = “Mercedes“ Type-Anweisung A.1.1 Aufzähl-Typen Enum-Typen werden mit konstanten Werten initialisiert, die zur Laufzeit nicht verändert werden. Sie werden für die Deklaration von Variablen und Parameter mit klar definiertem diskretem Wertebereich verwendet und beschränken diese auf den angegebenen Wertebereich. Die Enum-Anweisung kann nur auf Modulebene verwendet werden. Enum-Typen sind standardmäßig Public. Im Falle von Private ist der Typ nur in dem Modul sichtbar, in dem er definiert wurde. [Private | Public] Enum EnumName ElementName1 [= Konstantenausdruck] [ElementName2 [= Konstantenausdruck]] ... End Enum Enum-Anweisung A.3.4.3 Deklarieren von Konstanten Konstanten können innerhalb oder außerhalb des Anweisungsblocks einer Prozedur (also zwischen Sub Name() … End Sub) definiert werden. In Sub-, Function- oder Property-Prozeduren deklarierte Konstanten gelten als lokal innerhalb dieser Prozedur. Eine Konstante, die außerhalb einer Prozedur deklariert wurde, ist für das 53 Modellbasiertes Logistikmanagement gesamte umgebende Modul definiert. Konstanten können an allen Stellen verwendet werden, an denen auch ein Ausdruck zulässig ist. [Public | Private] Const Name [ As Datentyp ] = Ausdruck Beispiel: Const conAlter As Integer = 34 Die optionalen Schlüsselworte Private und Public dürfen nicht innerhalb von Prozeduren benutzt werden, sondern nur außerhalb auf Modulebene. Die Deklaration muss dann also vor dem Schlüsselwort Sub erfolgen. Private bedeutet dabei, dass die Konstante nur innerhalb desjenigen Moduls zur Verfügung steht, in dem sie deklariert wurde, Public dagegen, dass sie allen Prozeduren in allen Modulen zur Verfügung steht. Innerhalb von Klassenmodulen dürfen Konstante nicht als Public deklariert werden. Deklarieren von Konstanten Es gibt vielfältige innerhalb von VBA bereits vordefinierte Konstante, um die Programmierung zu erleichtern, sie sind in der Excel-Hilfe unter erläutert. 54 • CallType-Konstanten • Compiler-Konstanten • Dateiattribut-Konstanten • Dateieingabe/-ausgabe-Konstanten • Datumsformat-Konstanten • Datumskonstanten • Dir-, GetAttr- und SetAttr-Konstanten • DriveType-Konstanten • Farbkonstanten • Formularkonstanten • IMEStatus-Konstanten • Kalender-Konstanten Konstanten Crash-Kurs in Excel VBA • MsgBox-Konstanten • QueryClose-Konstanten • Shell-Konstanten • SpecialFolder-Konstanten • StrConv-Konstanten • Systemfarben-Konstanten • Tasten-Code-Konstanten • Tristate-Konstanten • VarType-Konstanten • Vergleichskonstanten • Verschiedene Konstanten A.3.4.4 Deklarieren von Variablen Wenn in den Editor-Einstellungen Variablendeklaration erforderlich aktiviert wurde oder wenn die Anweisung Option Explicit im Modul verwendet wird, erfolgt für jede nicht deklarierte Variable eine Fehlermeldung. Ohne zwingende Variablendeklaration wird jede nicht deklarierte Variable als Variant-Typ behandelt. Variablen sind Speicherplätze für Zeichenfolgen (Strings), Werte und Objekte. Ihre Gültigkeit und die Lebensdauer ihrer Werte sind abhängig vom Ort und der Art ihrer Deklaration. • Deklaration innerhalb einer Prozedur Die Variable ist lokal, hat ihre Gültigkeit also ausschließlich für diese Prozedur und kann nicht aus anderen Prozeduren angesprochen werden. • Deklaration im Modulkopf Die Variable gilt für alle Prozeduren dieses Moduls, eine Weitergabe als Parameter ist nicht notwendig. • Deklaration im Modulkopf eines Standardmoduls als Public Die Variable gilt für alle Prozeduren der Arbeitsmappe, soweit das die Prozedur enthaltene Modul nicht als Private deklariert ist. Public-Variablen und Variablen auf Modulebene sollte man eigentlich tunlichst vermeiden, da man nicht immer schnell feststellen kann, wann diese öffentlichen 55 Modellbasiertes Logistikmanagement Variablen ihren Wert verlieren oder wo er geändert wird. Die sauberste Lösung ist die Deklaration innerhalb der Prozeduren und die Weitergabe als Parameter. 1 GÜLTIGKEITSBEREICH UND LEBENSDAUER DEKLARATION EINER VARIABLEN Öffentlich (alle Prozeduren in allen Modulen (des Projektes)) Privat (nur in den Prozeduren des Moduls) Lokal vergänglich (Prozedurebene, Wert wird gelöscht) Lokal statisch (Prozedurebene, Wert wird beibehalten) Deklaration vor der Sub-Zeile mit Public-Anweisung z. B.: Public Variable As Datentyp Deklaration vor Sub-Zeile mit Private-Anweisung z. B.: Private Variable As Datentyp Deklaration nach der Sub-Zeile mit Dim-Anweisung Deklaration nach der Sub-Zeile mit Static-Anweisung: z. B.: Static Variable As DatenTyp Tabelle: Gültigkeitsbereiche und Lebensdauer von Variablen in VBA Public-Anweisung, Private Anweisung, Dim-Anweisung, Static-Anweisung A.3.4.5 Deklarieren von Variablen innerhalb einer Prozedur Die Deklaration von Variablen innerhalb einer Prozedur kann unter VBA auf drei Arten erfolgen. Die klassische Variante verwendet den expliziten Datentyp, die kürzere Variante lediglich ein Kurzzeichen direkt an den Namen gehängt. Mit der DefTyp-Anweisung kann man darüber hinaus auch noch Variablentypen für Variablennamen festlegen, deren Name mit einem Buchstaben innerhalb eines gewissen Bereiches beginnt. Innerhalb einer Prozedur sollte man die DimAnweisung in der Regel an den Anfang der Prozedur stellen. Die Datentyp-Kürzel und DefTyp-Bezeichnungen entnehme man der obigen Tabelle zu den Standard-Datentypen. 1 Vergl. http://de.wikibooks.org/wiki/VBA_in_Excel/_G%C3%BCltigkeit_von_Variablen_und_Konstanten#Dekla ration_auf_Prozedurebene 56 Crash-Kurs in Excel VBA Dim Name1 As Datentyp1[, Name2 As Datentyp2[, …]] Dim Name1DatentypKürzel1[, Name2DatentypKürzel2[, …]] DefTyp Buchstabenbereich1[, Buchstabenbereich2[, …]] Beispiel: Dim AnzPers As Integer, LkwGew As Double Dim AnzPers%, Curr$ DefInt A-K, P-R Deklarieren von Variablen DefTyp Anweisung A.3.4.6 Deklarieren von Datenfeldern innerhalb einer Prozedur Datenfelder sind Variablen mit einer zusätzlichen Dimensionsangabe. Deklarieren von Datenfeldern: Dim Name (Dimension1[, Dimension2[,…]]) As Datentyp Beispiel: Dim Distanz(10,20) As Double Ob ein Datenfeld mit 0 oder 1 beginnend indiziert ist, hängt von der Einstellung der Option Base-Anweisung ab. Wenn Option Base 1 nicht angegeben ist, beginnen alle Datenfelder mit dem Index Null. Das obige Beispiel wäre dann also eine 11x21Matrix. Festlegen der Startindizes: Option Base {0 | 1} Die Dim-Anweisung kann auch in Kombination mit einem leeren Klammernpaar zur Deklaration eines dynamischen Datenfelds verwendet werden. Nach einer solchen 57 Modellbasiertes Logistikmanagement Deklaration kann man mit der nachfolgenden ReDim-Anweisung innerhalb des Programmablaufes die Anzahl der Dimensionen und Elemente in dem Datenfeld neu definieren. Gleiches gilt für bereits vorher festgelegte Werte der Indizes: Dynamisches Datenfeld erzeugen: Dim Name() Neudimensionierung von Datenfeldern: Redim [Preserve] Name (Dimension1 [, Dimension2 [,…]]) As Datentyp Das Preserve rettet dabei – soweit möglich – vorhandene Daten, während die nachfolgende Anweisung das Datenfeld neu initialisiert: Neuinitialisierung von Datenfeldern: Erase Name Neben den Datenfeldern mit dem durch Option Base vorgegebenen Startindex lassen sich aber auch noch Datenfelder mit einem bestimmtem Indexbereich festlegen. Deklarieren von Datenfeldern mit festgelegtem Indexbereich: Dim Name (Indizes1[, Indizes2[,…]]) As Datentyp Beispiel: Dim LuftDistanz(5 To 10,10 To 20, 30) As Double Wenn keine Untergrenze angegeben ist, wird die Vorgabe durch Option Base vorausgesetzt. 58 Crash-Kurs in Excel VBA Deklarieren von Datenfeldern A.3.5 Operatoren VBA verwendet die üblichen arithmetischen, Vergleichs-, Verkettungs- und logischen Operatoren. Operatoren (Zusammenfassung) A.3.5.1 Arithmetische Operatoren zum Durchführen mathematischer Berechnungen = , + , - , * , / ,^ , \ , Mod. Arithmetische Operatoren A.3.5.2 Vergleichsoperatoren zum Durchführen von Vergleichen = , > , >= , < , <= , <> , Like (Mustervergleich bei Zeichenketten), Is (vergleicht Objekt-Variable). Vergleichsoperatoren A.3.5.3 Verkettungsoperatoren zum Aneinanderhängen von Zeichenfolgen & (Aneinanderhängen von Zeichenketten), + (Addition oder Verkettung zweier Ausdrücke). Verkettungsoperatoren A.3.5.4 Logische Operatoren zum Durchführen logischer Operationen And; Or; Xor; Not;. Eqv (logische Äquivalenz); Imp (logische Implikation). Logische Operatoren 59 Modellbasiertes Logistikmanagement A.3.6 Kontrollstrukturen Der folgende Abschnitt listet die Syntax zu den üblichen Kontrollstrukturen einer Programmiersprache. A.3.6.1 IF-Verzweigung Verzweigungen können mit Hilfe von Bedingungen bestimmte Zustände abfragen. Bei der If-Verzweigung wird zwischen zwei Formen unterschieden werden: Normale Syntax: If Bedingung Then Aktion1 Else Aktion2 Block Syntax: ‘ Version 1 If Bedingung Then Anweisungsblock1 Else Anweisungsblock2 End If ‘ Version 2 If Bedingung1 Then Anweisungsblock1 ElseIf Bedingung2 Anweisungsblock2 Else Anweisungsblock3 End If Mit Hilfe von Verschachtelungen können mit der Blockform mehrere Bedingungen nacheinander durchgeführt werden. Das End If ist dabei zwingend erforderlich. If …Then…Else-Anweisung A.3.6.2 60 IIF-Verzweigung Crash-Kurs in Excel VBA Die IIf-Verzweigung ist eine abgewandelte Form der If-Verzweigung. Diese wertet einen Ausdruck aus und gibt entweder den Wert für die korrekte oder für die falsche Auswertung zurück. IIf(Ausdruck, korrekt, falsch) Iif-Funktion A.3.6.3 For-Next-Schleife Mit Hilfe der For-Next-Schleife kann ein Block von Anweisungen eine unbestimmte Anzahl an Wiederholungen durchlaufen werden. Dabei wird eine Zählervariable verwendet, die sich bei jedem Durchlauf erhöht oder verringert. For Zähler = Anfang To Ende Anweisung [Exit For] [Anweisung] Next [Zähler] For…Next-Anweisung A.3.6.4 For-Each-Next-Schleife Die For-Each-Next-Schleife wiederholt eine Gruppe von Anweisungen für jedes Element in einem Datenfeld oder in einer Auflistung (von Objekten). For Each Element In Gruppe [Anweisung] [Exit For] [Anweisung] Next [Element] 61 Modellbasiertes Logistikmanagement For Each…Next-Anweisungen A.3.6.5 Do-Until-Loop-Schleife Durch die Do-Until-Loop-Schleife wird ein Block von Anweisungen solange wiederholt, bis eine Bedingung den Status True erhält. Diese Bedingung wird jeweils am Ende eines Durchlaufs geprüft. Do Until Bedingung Anweisung [Exit Do] [Anweisung] Loop Do…Loop-Anweisung A.3.6.6 Do-While-Loop-Schleife Diese Schleife funktioniert analog zur Do-Until-Loop-Schleife. Jedoch wird die Bedingung immer zu Beginn der Schleife abgefragt. Do While Bedingung Anweisung [Exit Do] [Anweisung] Loop Do…Loop-Anweisung A.3.6.7 Select Case-Anweisung Die Select Case-Anweisung überprüft einen Ausdruck nach möglichen Werten und führt anschließend eine oder mehrere Anweisungen durch. 62 Crash-Kurs in Excel VBA Select Case Ausdruck Case Auswahlwert1 [Anweisungsblock1] Case Auswahlwert2 [Anweisungsblock2] … [Case Else Anweisungsblock x] End Select Select Case-Anweisung 63 Modellbasiertes Logistikmanagement A.4 Verwendung der verschiedenen Funktions-Arten in ExcelVBA 1 A.4.1 Die verschiedenen Funktions-Arten in Excel-VBA In Excel-VBA gibt es drei Arten von Funktionen: • die benutzerdefinierte VBA-Funktionen, also die Function Prozeduren innerhalb der VBA Syntax, • bereits vorinstallierte VBA-Funktionen, die dem kompletten Office-Paket und damit auch Excel zur Verfügung stehen, • sowie die Excel-Funktionen, die innerhalb der Tabellenkalkulation aufgerufen werden können und die im Register Formeln aufgelistet sind. A.4.2 A.4.2.1 Benutzerdefinierte VBA-Funktionen Verwendung in VBA-Prozeduren Wenn bestimmte Berechnungen häufig wiederholt werden, ist es sinnvoll, dafür spezielle Funktionen zu definieren, in logistischen Anwendungen beispielsweise für die Entfernungsberechnung nach Luftlinie zwischen zwei Orten auf einer Landkarte oder auf dem Globus. Function dPythagoras(xA As Double, yA As Double, _ xB As Double, yB As Double) As Double dPythagoras = Sqr((xA - xB) ^ 2 + (yA - yB) ^ 2) End Function Man beachte im Beispiel, dass die Parameter der Funktion in der FunctionAnweisung per Kommata getrennt werden. Im Sinne eines guten Programmierstils ist übrigens immer auf eine saubere Dimensionierung zu achten, für die Funktionen selbst, deren Parameter sowie die in den Funktionen verwendeten Variablen. 1 Für eine ausgezeichnete Darstellung siehe http://de.wikibooks.org/wiki/VBA_in_Excel/_Funktionen#Einsatz_von_benutzerdefinierten_Funktionen _.28UDF.29 (Fassung vom 25.7.2013). 64 Crash-Kurs in Excel VBA A.4.2.2 Verwendung in Arbeitsblättern Nachdem man innerhalb der Entwicklungsumgebung eine Funktion in ein Modul eingegeben hat, steht diese Excel als benutzerdefinierte Funktion zur Verfügung. Function Mult7(x As Integer) As Integer Mult7 = 7 * x End Function Klickt man im Register Formeln auf Funktion einfügen oder alternativ die Shift + F3-Taste und wählt die Kategorie Benutzerdefiniert, so erhält man beispielsweise: Abbildung: Einfügen einer benutzerdefinierten Funktion Hier ist darauf zu achten, dass für den Funktionsnamen keine in Excel belegten Namen verwendet werden, im oberen Beispiel etwa würde der Name X7 zu einer Fehlermeldung führen wegen des Konfliktes mit der gleichnamigen Zelle. Besitzt eine Funktion mehrere Parameter, so werden diese beim Aufruf im Tabellenblatt in der deutschsprachigen Excel Version nicht per Komma, sondern mit Semikolon getrennt! 65 Modellbasiertes Logistikmanagement Abbildung: Aufruf einer benutzerdefinierten Funktion mit mehreren Parametern A.4.3 A.4.3.1 Vorinstallierte VBA-Funktionen Verwendung in VBA-Prozeduren Vorinstallierte Funktionen lassen sich - ob mit oder ohne Parameter – direkt in Prozeduren aufrufen. ‘ ‘ ohne Parameter ‘ Sub PathAct() MsgBox CurDir End Sub ‘ ‘ mit Parameter ‘ Sub TypeAct() MsgBox TypeName(ActiveSheet) End Sub In jeder neuen Excel-Version kommen neue VBA-Funktionen hinzu. Für eine gewollt abwärtskompatible Anwendung ist deshalb zunächst zu prüfen, ab wann die Funktion für VBA zur Verfügung gestellt wurde. A.4.3.2 Verwendung in Arbeitsblättern Unter anderem wegen der unterschiedlichen Sprachversionen lassen sich VBAFunktionen nicht direkt in Arbeitsblättern aufrufen. Schreibt man beispielsweise 66 Crash-Kurs in Excel VBA = sqr(2) in eine Zelle des Arbeitsblattes, so führt das zu der Fehlermeldung „#NAME?“. Dieses Problem kann man damit umgehen, dass man die VBA-Funktion in einer benutzerdefinierten Funktion „kapselt“ und damit so wie oben im Beispiel dPythagoras das Ergebnis ins Tabellenblatt überträgt. Function UmgebungsVariable() UmgebungsVariable = Environ("Path") End Function Hat eine VBA-Funktion den gleichen Namen wie eine Excel-Funktion, so kann man sie ohne Fehlermeldung in die Zellen eines Arbeitsblattes eingetragen werden, wobei mehrere Parameter wieder anstatt per Komma per Semikolon getrennt werden. Doch hier ist Vorsicht geboten: Trotz Namensgleichheit können Excel- und VBAFunktionen zu unterschiedlichen Ergebnissen führen (siehe z. B. die Trim-Funktion). A.4.4 Excel-Funktionen A.4.4.1 Besonderheiten von Excel-Funktionen Sprachversion Excel-Funktionen werden unabhängig von der Sprachversion1 intern von Excel immer in ihre englischsprachige Originalversion übertragen und so verarbeitet. Die deutschen Funktionsnamen werden also intern immer übersetzt, aus einem Trennsemikolon bei Parameteraufzählungen wird ein Komma, ein Dezimalkomma bei unseren Zahlenangaben zu einem angelsächsischen Dezimalpunkt, usw. Eine Gegenüberstellung eines Teils der deutschen und englischen Begriffe befindet sich im Installationsverzeichnis von Office in der Datei VBAListe.xls. Sehr hilfreich ist für diesen Zweck im Internet der Excel-Formel-Übersetzer unter http://de.exceltranslator.de. Absolute oder relative Bezugsart 1 Hier wird grundsätzlich von einer deutschsprachigen Excel-Version ausgegangen. 67 Modellbasiertes Logistikmanagement Eine weitere Besonderheit der Excel-Funktionen, dass ihre Parameter mit absolutem oder relativem Bezug zur aktuellen Cursor-Position eingegeben werden können. Standardmäßig werden die Spalten der Arbeitsblätter von Excel mit Buchstaben A, B, …, Z, AA, AB, …usw. sowie die Zeilen sowie die Zeilen mit Nummern 1, 2, 3, … usw. bezeichnet. Für Programmierzwecke ist es aber praktischer, wenn sowohl die Zeilen als auch die Spalten durchnummeriert sind. Dafür hat Excel das Z1S1-Bezugssystem in der deutschen Version bzw. das R1C1-Bezugssystem in der englischsprachigen Originalversion. Unter der Registerkarte Datei Optionen Formeln kann man diese Bezugsart übrigens einstellen. REFERENZ REFERENZ (DEUTSCH) (ENGL.) BEDEUTUNG Ein relativer Bezug auf die Zelle, die sich in derselben Spalte zehn Zeilen über der aktiven Zelle befindet. Ein relativer Bezug auf die Zelle, die sich zehn Zeilen unter und fünf Spalten rechts von der aktiven Zelle befindet. Ein absoluter Bezug auf die Zelle, die sich in der zehnten Zeile und in der fünften Spalte befindet. Z(-10)S R[-10]C Z(10)S(5) R[10]C[5] Z10S5 R10C5 Z(-1) R[-1] Ein relativer Bezug auf die gesamte Zeile oberhalb der aktiven Zelle. Z R Ein absoluter Bezug auf die aktuelle Zeile. Tabelle: Relative und absolute Positionsangaben im Z1S1- bzw. R1S1-Bezugssystem Z1S1-Bezugsart A.4.4.2 Verwendung in VBA-Prozeduren Die Excel-Tabellenfunktionen können in ihrer englischen Originalbezeichnung auch in VBA eingesetzt werden. Dazu muss man sie zunächst aber als solche kenntlich machen, indem ihnen ein Application oder ein WorksheetFunction voranstellt wird. 68 Crash-Kurs in Excel VBA Bei der Verwendung von WorksheetFunction bietet der Editor Hilfestellungen für die Auswahl der Funktionen und deren Argumente an. Application ist vorteilhaft für den Zweck der Abwärtskompatibilität von ExcelVersionen und für die Rückgabe von Fehlerwerten. ‘ ohne Editierhilfe Public Sub Average_Beispiel1() Dim Bereich As Range Set Bereich = Sheets("Tabelle1").Range("A1:A10") MsgBox Application.Average(Bereich) End Sub ‘ mit Editierhilfe Public Sub Average_Beispiel2() Dim Bereich As Range Set Bereich = Sheets("Tabelle1").Range("A1:A9") MsgBox WorksheetFunction.Average(Bereich) End Sub Public Sub Average_Beispiel3() Dim Bereich As Range Set Bereich = Sheets("Tabelle1").Range("A1:A8") MsgBox Application.WorksheetFunction.Average(Bereich) End Sub A.4.4.3 VBA-Befehle für die Zellenbelegung in Arbeitsblättern Value: Eintrag eines absoluten Wertes ‘ Die Zelle B1 erhält den Wert der Funktion Sub Average_Value() Dim Bereich As Range Set Bereich = Sheets("Tabelle1").Range("A1:A10") Cells(1,2).Value = WorksheetFunction.Average(Bereich) End Sub Formula: Eintrag einer Formel mit absolutem Zellbezug ‘ Die Zelle B2 erhält die Formel =MITTELWERT(A1:A10) ‘ Die Bereichsangabe erfolgt absolut Sub Average_AbsoluteFormel() Range("B2").Formula = "=AVERAGE(A1:A10)" End Sub 69 Modellbasiertes Logistikmanagement FormulaR1C1: Eintrag einer Formel mit relativem Zellbezug ‘ Die Zelle B3 erhält die Formel =MITTELWERT(A1:A10) ‘ Die Bereichsangabe erfolgt relativ zu B3 Sub Average_RelativeFormelA() Range("B3").Select Range("B3").FormulaR1C1 = "=AVERAGE(R[-1]C[-1]:R[7]C[-1])" End Sub Der relative Bezug wird in eckigen Klammern bei den Rows und Columns angegeben. Im folgenden Beispiel treten relativer und absoluter Zellbezug auf. ‘ Die Zelle B4 erhält die Formel =MITTELWERT(A$1:A$10) ‘ Die Bereichsangabe erfolgt relativ und absolut zu B4 Sub Average_RelativeFormelB() Range("B4").Select Range("B4").FormulaR1C1 = "=AVERAGE(R1C[-1]:R10C[-1])" End Sub Der absolute Bezug wird ohne Klammern bei den Rows und Columns angegeben. FormulaLocal: Eintrag einer Formel in deutscher Syntax Möchte man nicht auf die deutsche Syntax verzichten, so kann man die FormulaLocal-Eigenschaft verwenden. Damit ist es möglich, Tabellenfunktionen so anzugeben, wie man es von der Standardoberfläche gewohnt ist. ‘ Die Zelle C2 erhält die Formel =MITTELWERT(A1:A10) ‘ Die Formel wird in deutscher Syntax eingegeben. ‘ Die Bereichsangabe erfolgt absolut zu C2 Sub Average_AbsoluteFormelLocal() Range("C2").FormulaLocal = "=MITTELWERT(A1:A10)" End Sub FormulaLocalR1C1: Eintrag einer Formel in deutscher Syntax mit relativem Zellbezug 70 Crash-Kurs in Excel VBA ‘ Die Zelle C3 erhält die Formel =MITTELWERT(A1:A10) ‘ Die Formel wird in deutscher Syntax eingegeben. ‘ Die Bereichsangabe erfolgt relativ zu C3 Sub Average_RelativeFormelALocal() Range("C3").Select Range("C3").FormulaR1C1Local = "=MITTELWERT(Z(-2)S(-2):Z(7)S(-2))" End Sub Man beachte in der FormulaR1C1Local-Schreibweise die runden anstelle der eckigen Klammern für die relativen Bezüge sowie die Zeilenangabe „Z“ anstelle von „C“ bzw. die Spaltengabe „S“ anstelle von „C“. Im nachfolgenden Beispiel treten relativer und absoluter Zellbezug gemeinsam auf: ‘ Die Zelle C4 erhält die Formel =MITTELWERT(A$1:A$10) ‘ Die Formel wird in deutscher Syntax eingegeben. ‘ Die Bereichsangabe erfolgt relativ und absolut zu C4 Sub Average_RelativeFormelBLocal() Range("C4").Select Range("C4").FormulaR1C1Local = "=MITTELWERT(Z1S(-2):Z10S(-2))" End Sub Grundsätzlich sollte mit Formula gearbeitet und FormulaLocal gemieden werden, um problemlos Makros austauschen zu können. A.5 Verwendung von Objekten in Excel-VBA Objekte bilden das Gerüst der Office-Anwendungen. Sie stellen die wichtigen Elemente einer Anwendung dar, bei Excel: Tabellen, Zellbereiche, einzelne Zellen, Diagramme, Eingabeformulare oder Reports/Berichte, aber auch Fenster, Module, Steuerelemente, Statusleisten, Menüelemente etc. In Excel-VBA steht eine unübersichtlich anmutende Vielzahl von Objekten zur Verfügung. Vollständige Auflistungen mit Details und Beispielen zu den aktuell gültigen Objekten findet man im Objektkatalog und in der Excel-Hilfe Excel2010-Entwicklerreferenz Excel-Objektmodellreferenz. Wir werden hier nur die wesentlichen Aspekte des Excel Objektmodells behandeln. 71 Modellbasiertes Logistikmanagement A.5.1 Begriffsklärung Im Rahmen der objektorientierten Programmierung sind Objekte Abstraktionen von Dingen der realen Welt. Einem Objekt ordnet man Eigenschaften, Methoden, Ereignisse sowie Unterobjekte zu. Eigenschaften (auch Attribute) sind die Merkmale eines Objektes. Sie werden durch Zustandsvariablen ausgedrückt. Werden Eigenschaften verändert, so ändert sich das Verhalten oder das Erscheinungsbild. Sobald ein Objekt eine konkrete Ausprägung erhalten hat, (es instanziiert wurde), können die Eigenschaften abgefragt und ggf. festgelegt werden. Einige Eigenschaften sind schreibgeschützt und können daher nur gelesen, aber nicht geändert werden. Methoden (engl. methods) beschreiben einen Vorgang bzw. eine Tätigkeit, die mit einem Excel-Objekt ausgeführt werden kann, um dessen Eigenschaften zu ermitteln oder zu verändern. Wenn man Objekte als Substantive und Eigenschaften als Adjektive in einem Satz sieht, sind Methoden die Verben, mit denen ausgedrückt werden kann, was das Substantiv macht. Klassen sind die Zusammenfassung der Eigenschaften und Methoden von Objekten. Sie stellen damit also einen Objekttyp dar, der sich von anderen Objekttypen durch die Menge und die Art seiner Eigenschaften und Methoden unterscheidet. Die Begriffe Objekt und Klasse werden bei Microsoft teilweise leider synonym verwendet, was manchmal zur Verwirrung beiträgt. In Rahmen der objektorientierten Programmierung wäre eine Klasse aber eine Vorlage, sozusagen ein Bauplan, oder eine Schablone, für die Erstellung eines konkreten Objekts mit konkreten Eigenschaften. Dieses konkrete Objekt besitzt dann alle grundsätzlichen Eigenschaften und Methoden der Klasse. Man spricht bei einer solchen Konkretisierung auch von einer Instanz der Klasse und nennt den Prozess Instanzierung 1. Ereignisse sind Zustandsbeschreibungen eines Objektes, auf die mit bestimmten Programmabläufen, den Ereignisprozeduren reagiert wird. Die Ereignisse können 1 Man findet auch die Schreibweise Instanziierung. Dem wird hier Instanzierung im Sinne der neuen Rechtschreibung vorgezogen. 72 Crash-Kurs in Excel VBA durch systemexterne Aktionen (Mausklicks, Tastatureingaben, etc.) oder systeminterne Aktionen (Variablen erhalten bestimmte Werte) ausgelöst werden. Das kann im Rahmen der Excel Objekthierarchie auf den drei Ebenen Application, Workbook und Worksheet geschehen. Welche Ereignisse für diese Ebenen verfügbar sind, kann im Objektkatalog nachgeschlagen werden. Ereignisse sind entweder auf eine einzige Ebene begrenzt oder sind auf mehreren Ebenen verfügbar. A.5.2 Schreibweisen Zur ausführlichen Bezeichnung eines Objektes, einer Methode, einer Eigenschaft oder eines Ereignisses benutzt man die Schreibweise: Objekt[.Unterobjekt…][.Methode | .Eigenschaft | .Ereignis ] Bei dieser Schreibweise muss in Excel VBA aber nicht immer die vollständige Auflistung mit dem Objektbezeichner erfolgen, wenn aus dem Zusammenhang klar ist, worauf man sich bezieht oder wenn Grundeinstellungen (Default-Werte) genutzt werden. Befindet man sich beispielsweise in der Prozedur eines Eingabeformulars mit dem Namen UserForm1, so ist die Standardeinstellung für die Eigenschaft einer TextBox „Text“. Dann kann man alternativ schreiben: Beispiel UserForm1.TextBox1.Text = „Das ist ein Eingabefeld!“ TextBox1.Text = „Das ist ein Eingabefeld!“ TextBox1 = „Das ist ein Eingabefeld!“ Oft kommt es in Prozeduren vor, dass mehrere Elemente eines Objektes hintereinander verarbeitet werden. Dann kann man folgende Schreibweise benutzen: 73 Modellbasiertes Logistikmanagement With Objektname .Eigenschaft1 = Wert .Eigenschaft2 = Wert .Eigenschaft3 = Wert … .Methode1([Parameterliste1] .Methode2([Parameterliste2] .Methode3([Parameterliste3] … End With A.5.3 Objektlisten Microsoft unterscheidet grundsätzlich zwischen Auflistungen von Objekten und den Objekten an sich. Objekte kann man in Auflistungen verwalten und werden traditionell in Listen ablegen, die den Namen des Objekts tragen, gefolgt von einem Plural-„s“, z. B. Workbooks für die Workbook-Objekte oder Worksheets bei den Worksheet-Objekten. Innerhalb dieser Auflistungen können Objekte über einen Namen oder einen Index angesprochen werden. Im nachfolgenden Beispiel wird das erste Fenster in der Arbeitsmappe „Tourenplan“ genannt und diese Bezeichnung dann als Index in der Windows-Auflistung verwendet. ActiveWorkbook.Windows(1).Caption = "Tourenplan" ActiveWorkbook.Windows("Tourenplan").ActiveSheet.Calculate Solche Objektlisten lassen sich auch für eigene Objekte mithilfe der Klasse Collection erstellen. Collection (innerhalb der VBA Bibliothek) A.5.4 Objektvariablen Mit der Dim-Anweisung kann Variablen der Datentyp Objekt zugewiesen werden. 74 Crash-Kurs in Excel VBA Dim Objektvariable As Objekt Die Zuweisung von Objekten an Variable geschieht nicht über „=“ sondern über die Set-Anweisung: Set Objektvariable = Objektausdruck Für Objektvariablen kann man Bezeichnungen wählen, die in der Schreibweise z.T. wesentlich kürzer sind als die Objekte unter Excel, mit denen sie referieren. Damit kann man Schreibarbeit ersparen. Set myObject = ActiveWorkbook MsgBox myObject.Sheets(2).Name A.5.5 Das Excel Objektmodell Programmierobjekte werden in der Hierarchie des Objektmodells der Anwendung organisiert und spiegeln so grob die Programmoberfläche wider. Range Application Worksheet [...] Workbook [...] [...] [...] [...] [...] Abbildung: Excel Objektmodell Dabei bedeutet: 75 Modellbasiertes Logistikmanagement • Application Object die gesamte Excel-Anwendung • Workbook Object die Excel-Arbeitsmappe • Worksheet Object ein Tabellenblatt • Range Object ein Zellenbereich bestehend aus einer oder mehreren Zellen A.5.5.1 Das Application-Objekt Das Application-Objekt stellt die Excel-Anwendung selbst dar und somit die höchste Ebene der Excel-Objekthierarchie. Neben zahlreichen Informationen über die laufende Anwendung (die derzeit geöffneten Benutzer-Objekte) werden Einstellungen und Optionen zur Verfügung gestellt, die sich auf die gesamte Anwendung auswirken, ebenfalls Methoden, die Objekte der obersten Ebene zurückgeben. Viele Eigenschaften und Methoden des Application-Objekts sind global. Bei der Schreibweise muss deshalb nicht der Objektbezeichner Application mit angegeben werden. Gleiches gilt für Eigenschaften und Methoden, die gängige Objekte der Benutzeroberfläche zurückgeben (z.B. ActiveCell, ActiveSheet). Application-Object Um Excel von „außen auf zu rufen“, wird die Activate-Eigenschaft hinsichtlich eines Window oder Workbook-Objektes verwendet: Application.Windows("VBATest.xlsx").Activate 'oder Application.Workbooks("VBATest.xlsx ").Activate A.5.5.2 Das Workbook-Objekt Mit dem Workbook-Objekt wird auf eine einzelne Arbeitsmappe zugegriffen, also die gespeicherte Excel-Datei. Soll ein Workbook-Objekt aus der Liste der Workbooks 76 Crash-Kurs in Excel VBA ausgewählt werden, so geschieht das in der Regel durch die Angabe des Dateinamens. Workbooks(“VBATest.xlsx”).Activate Workbook-Objekt, Workbooks-Objekt A.5.5.3 Das Worksheet-Objekt Worksheet-Objekte sind die einzelnen Tabellenblätter einer Excel-Anwendung. Sie können über die Worksheets-Auflistungen per Name oder Index aufgerufen werden: Worksheets("Tabelle1").Activate ‘oder Worksheets(1).Activate Worksheet-Objekt; Worksheets-Objekt A.5.5.4 Das Range-Objekt Das Range-Objekt ist die wichtigste Abstraktion eines Worksheet-Objekts. Mit diesem Objekt werden einzelne Zellen, Zeilen, Spalten oder allgemeine (zusammenhängende oder nicht zusammenhängende) Zellbereiche dargestellt, wobei eines oder mehrere Arbeitsblätter angesprochen werden können. Als spezielle Zellbereiche werden Zeilen mit Rows bezeichnet, Spalten mit Columns. Ein Cell-Object gibt es übrigens nicht in der Excel-Objekthierarchie, dafür kann man aber die Cells-Eigenschaft des Range-Objektes nutzen. Range-Objekt, Ranges-Objekt 77 Modellbasiertes Logistikmanagement A.5.6 Spezielle Verwendungen des Excel Objektmodells In diesem Abschnitt werden auf der Grundlage von Excel-Objekten ein paar wichtige praktische Vorgehensweisen für die Ablaufsteuerung und die Navigation innerhalb von Tabellen zusammengefasst. Eine umfangreichere Übersicht über die wichtigsten Excel-Objekte liefert Anhang D. A.5.6.1 Positionierung in Range-Objekten Im Excel A1-Standardformat (max. 65536 Zeilen als Zahlen 1, 2, 3, …; max. 256 Spalten als Buchstaben A, B, C, …) wird: • eine einzelne Zelle durch ihre Adresse in der Form “B3“ dargestellt, • ein einzelner Zellbereich durch per Doppelpunkt getrennte Angabe der Adresse links oben und der Adresse rechts unten, z.B. “D4:F14“ oder • ein allgemeiner Zellbereich durch eine per Kommata getrennte Liste mehrerer Adressen und/oder Zellbereiche wie “B3, D4:F14, X12, G20:T40“ Die Bezeichnung ist dabei immer in Hochkommata eingeschlossen. Für die Positionierung mit obiger Zellbereichs-Angabe gibt es zwei SyntaxVersionen: Objekt.Range(Zellbereich) Objekt.Range(Zellbereich1, Zellbereich2) Die erste Syntax-Version arbeitet mit einem einzigen Zellbereich, der im Standardformat angegeben ist. Bei der zweiten Syntax-Variante stellt Zellbereich1 die linke obere Ecke und Zellbereich2 die rechte untere Ecke des Bereiches dar. Zellbereich1 und 2 können Adressen von Einzelzellen oder allgemeine Zellbereiche sein. Bei Überschneidung wird die Vereinigungsmenge genommen. 78 Crash-Kurs in Excel VBA Worksheets(“Tabelle1“.Range(“B1“,“D3“) Worksheets(“Tabelle1“.Range(“B1:C3“,“C1:E5“) Die erste Anweisung arbeitet mit dem Bereich B1:D3, die zweite mit B1:E5. A.5.6.2 Positionierung mit der Cells-Eigenschaft So wie das R1C1-Format bei den Funktionen ist es für die Berechnung von Zelladressen und für die Benutzung von Variablen für Zelladressen vorteilhaft, für die Zeilen und Spalten eines Tabellenblattes Zahlen zu verwenden. Mit der Cells-Eigenschaft von Range-Objekten gibt es dann folgende SyntaxVarianten: Objekt.(Cells(Row1,Column1), Cells(Row2,Column2)) Objekt.Cells(Row,Column) Objekt.Cells In der ersten Variante ist wieder die obere linke Ecke bis zur unteren rechten Ecke gemeint, in der zweiten das angegebene Element. Die dritte Variante gibt alle Zellen des Tabellenblattes an. A.5.6.3 Cursorposition feststellen ActiveCell ist eine Eigenschaft des Application-Objekts, die eine Range-Objekt zurück gibt. ActiveSheet gibt als Eigenschaft von Application den Namen der aktiven Tabelle zurück oder legt ihn fest. Damit kann man die aktuelle Cursorposition ermitteln: • ActiveCell.Address Adresse der aktiven Zelle des aktiven Tabellenblattes 79 Modellbasiertes Logistikmanagement • ActiveCell.Row Zeilennummer der aktiven Zelle des aktiven Tabellenblattes • ActiveCell.Column Spaltennummer der aktiven Zelle des aktiven Tabellenblattes • ActiveCell.Parent.Name Name der Tabelle mit der aktiven Zelle des aktiven Tabellenblattes • ActiveSheet.Parent.Name Name der Arbeitsmappe des aktiven Tabellenblattes A.5.6.4 Zellen, Zellbereiche, Zeilen, Spalten gezielt auswählen Nachdem man ein Arbeitsblatt ausgewählt hat, können einzelne Zellen mit dem Range-Objekt über Activate markiert werden, also der Cursor gesetzt werden. Für Zellbereiche benutzt man Select, Zeilen und Spalten werden ebenfalls über Select markiert. Range(Zellbereich).Select Cells(RowIndex,ColumnIndex).Select Rows(RowIndex).Select Columns(ColumnIndex).Select Beispiele: Worksheets(“Tabelle1”).Activate Range(“C2:F14”).Select Range(“B2”).Activate Rows(17).Select Columns(19).Select A.5.6.5 80 Relatives Versetzen von Bereichen und Cursor Crash-Kurs in Excel VBA Offset ist eine Eigenschaft des Range-Objektes, das einen Bereich darstellt, der gegenüber dem angegebenen Bereich versetzt ist. Rangeobjekt.Offset(rowOffset,columnOffset) rowOffset (optional): Anzahl der (positiv), 0, oder bei negative Werten columnOffset (optional): Anzahl der (positiv), 0, oder bei negative Werten Versatzzeilen nach oben. Versatzspalten nach links. nach unten nach rechts Beispiel ‘ Cursor 4 nach unten und 2 nach links Worksheets(“Tabelle1”).Activate Range.Offset(rowOffset,columnOffset) ActiveCell.Offset(4,-2) ‘ oder ActiveCell.Offset(rowOffset:=4, columnOffset:=-2) A.5.6.6 Bereichsnamen vergeben mit Name-Eigenschaft Mithilfe der Namensvergabe an Zellenbereiche lässt sich die Schreibweise in vielen Fällen übersichtlicher gestalten. ‘ Namensvergabe Range(”A1”).Name = “Km_pro_Std” Range(Cell(1,2)).Name = “kWh” ‘Wertzuweisung Range(“km_pro_Std”) = 60 ‘ Löscht den Namen wieder: Range(”Km_pro_Std”).Name.Delete 81 Modellbasiertes Logistikmanagement A.5.6.7 Wertzuweisungen mit Value-Eigenschaft Range(”A1”).Value = “Die Antwort aller Fragen” ‘ auch: Range(”A1”) = “Die Antwort aller Fragen” ‘ Range(Cell(1,2)).Value = 42 ‘ auch: Range(Cell(1,2)) = 42 Als Default-Wert kann die Angabe „Value“ zu einem Range-Objekt entfallen. A.5.6.8 Formeln eintragen mit der Formula-Eigenschaft Range(”A1”).Formula = “= A2 + A3” ‘ Sheets(“Tabelle1”).Cells(1,1)).Formula = “= A2 + A3” ‘ auch: ActiveCell.Formula = “= A2 + A3” A.5.6.9 Formatierung von Zellbereichen Hinsichtlich der Zellformatierung können Schrifttypen, Rahmen und Farben vergeben werden. Die allgemeine Syntax lautet: ‘Schrifttypen Range.Font.Eigenschaft = Wert 'Rahmen Objekt.Borders Objekt.Borders(Index) 82 Crash-Kurs in Excel VBA ‘Hintergrundfarben Rahmenfarben Schriftfarben Range.Interior.ColorIndex = Wert Range.Borders.ColorIndex = Wert Range.Font.ColorIndex = Wert ‘oder mit Mischfarben Range.Interior.Color = RGB(Rotwert, Grünwert, Blauwert) Range.Borders.Color = RGB(Rotwert, Grünwert, Blauwert) Range.Font.Color = RGB(Rotwert, Grünwert, Blauwert) Für weitere Details siehe die entsprechenden Eigenschaften des Range Objektes A.5.6.10 Löschen von Zellbereichen Es gibt unterschiedliche Möglichkeiten, Zellen oder Zellinhalte zu löschen. Die einfachste Möglichkeit im angegeben Bereich alle Einträge und Formatierungen zu löschen geht über die Clear-Methode eines Range-Objektes: Range(Zellbereich).Clear A.5.7 Erstellung eigener Klassen A.5.7.1 Definition einer Klasse Für die Definition eigener Klassen wird in VBA das Klassenmodul verwendet. Dieses besondere Modul dient als Container für die Definition von Eigenschaften und Methoden einer Klasse. Der Name des Klassenmoduls lässt sich im Eigenschaftenfenster einstellen. Nach der Definition einer Klasse wird diese auch im Objektkatalog aufgeführt. Das Attribut Instancing ist standardmäßig auf Private gesetzt, so dass die Definitionen in dieser Klasse nur auf das Modul beschränkt sind. A.5.7.2 Eigenschaften 83 Modellbasiertes Logistikmanagement Die im Modulkopf einer Klasse deklarierten Variablen sind Eigenschaften der Klasse. Auf Private deklarierte Variable/Eigenschaften können nur Methoden der eigenen Klasse zugreifen. Eine mit Public deklarierte Variable/Eigenschaft kann von jedem Objekt und jeder Prozedur aus gelesen und verändert werden. Public Bereich As String Um Eigenschaftswerte nur auslesen aber nicht verändern zu können, kann man Public Functions benutzen: Public Function Bereich() As String Bereich = “A1:B10” End Function Eine weitere Möglichkeit zur Definition von Eigenschaften ist durch die schon dargestellten Property-Prozeduren gegeben, die beim Zugriff auf die Eigenschaft ausgeführt werden. Der Rumpf dieser Prozeduren wird beim Anlegen einer neuen Prozedur - wie ebenfalls schon beschrieben - automatisch erzeugt: [Public | Private] [Static] Property {Get | Let | Set} Eigenschaftsname [(Argumente)] [As Typ] Anweisungen End Property • Property Get: Eine Prozedur, die den Wert einer Eigenschaft zurückgibt • Property Let: Eine Prozedur, die den Wert einer Eigenschaft festlegt • Property Set: Eine Prozedur, die einen Verweis zu einem Objekt herstellt Property-Prozeduren treten normalerweise paarweise auf: Property Let mit Property Get und Property Set mit Property Get. Wird nur eine Property GetProzedur deklariert, so ist die Eigenschaft schreibgeschützt. 84 Crash-Kurs in Excel VBA Im Gegensatz zu Public-Variablen können Property-Prozeduren im Objektkatalog durch Texte beschrieben werden. In der Regel sollten Eigenschaften als Private deklariert werden. Zugriff auf Eigenschaften sollte nur durch als Public deklarierte Methoden möglich sein. A.5.7.3 Methoden Die Methoden der Klasse werden im Klassenmodul im Anschluss an die Eigenschaften als Sub- oder Function-Prozedur mit den Zugriffsmöglichkeit Public oder Private deklariert. Auf Private deklarierte Methoden kann nur innerhalb der eigenen Klasse zugegriffen werden, auf Public deklarierte Methoden von jedem Objekt und jeder Prozedur aus. A.5.7.4 Spezielle Ereignisprozeduren: Konstruktor und Destruktor Wählt man im Code-Fenster im Objekt-Feld den Eintrag Class, so erscheinen Programmgerüste für die Methode Class_Initialize(), den sogenannte Konstruktor, und für Class_Terminate(), den Destruktor. Diese beiden Methoden sind standardmäßig in jeder Klasse angelegt. Bei jeder Instanzierung eines Objektes dieser Klasse wird automatisch der Konstruktor gestartet, vor jeder Löschung eines Objektes dieser Klasse der Destruktor. Als Private-Prozeduren können sie nicht von außen aufgerufen werden. Im Konstruktor können Eigenschaften der Klasse auf Anfangswerte gesetzt werden, im Destruktor Aufräumarbeiten durchgeführt werden, beispielsweise dynamisch diejenigen Objekte gelöscht werden, die durch die Instanz erzeugt wurden. Private Sub Class_Initialize() End Sub Private Sub Class_Terminate() End Sub 85 Modellbasiertes Logistikmanagement A.5.8 Erzeugung neuer Objekte Um die angelegten Funktionalitäten einer Klasse nutzen zu können, müssen von der Klasse Instanzen, also die Objekte gebildet werden. Aus jeder Klasse können beliebig viele1 Instanzen erzeugt werden, die alle nebeneinander existieren. Mit dem Schlüsselwort New werden neue Instanzen einer Klasse gebildet. Beispielsweise in der Dim-Anweisung: Dim Objektvariable As New Klassenname Das Schlüsselwort New kann je nach Gültigkeitsbereich und Lebensdauer entsprechend auch im Zusammenhang mit Private, Public, Set und Static benutzt werden. New Das Objekt wird mit der Deklarationsanweisung noch nicht erzeugt.2 Erst der Zugriff auf irgendeine Eigenschaft oder Methode der Objektvariablen lässt das Objekt tatsächlich im Speicher entstehen. Greift man nicht auf das Objekt zu, wird auch keine Instanz erzeugt. Um die sofortige Objekterzeugung zu erzwingen3, kann man auch die Methode der frühen Bindung für die Instanzierung verwenden: Frühe Bindung: Dim Objektvariable As KlassenName Set Objektvariable As New KlassenName 1 Natürlich begrenzt durch den zur Verfügung stehenden Speicherplatz 2 Was aus Platzgründen manchmal als vorteilhaft erscheint. 3 Was aus Laufzeitgründen manchmal als vorteilhaft erscheint. 86 Crash-Kurs in Excel VBA Alternativ gibt es auch noch die Methode der späten Bindung. Der Objektvariable wird zunächst der allgemeine Datentyp Object zugewiesen und dann später der konkrete Objekttyp, also die Klasse zugewiesen: Späte Bindung: Dim Objektvariable As Object … … Set Objektvariable As New KlassenName Bei der frühen Bindung kann man als Programmierer den Vorteil von IntelliSense nutzen. Bei der späten Bindung kann man nutzen, dass die Variable jeden beliebigen Objekttyp aufnehmen kann, sogar unterschiedliche Typen nacheinander. A.5.9 Entfernen von Objekten In VBA muss ein Objekt nicht explizit gelöscht werden. Objekte in nicht als Static deklarierten Prozeduren werden automatisch aus dem Speicher entfernt. Gleiches gilt, falls keine Variable mehr auf das Objekt zeigt. Das ist beispielsweise dann der Fall, wenn mit dem Set-Befehl eine Objektvariable, die vorher dem betreffenden Objekt zugeordnet wurde, nun auf ein anderes Objekt zeigt oder den Wert „Nothing“ erhält. Dim Objektvariable As Object … Set Objektvariable As New KlassenName1 … Set Objektvariable As New KlassenName2 Set Objektvariable = Nothing A.5.10 Erstellung von Ereignisprozeduren A.5.10.1 Allgemeine Ereignisprozeduren 87 Modellbasiertes Logistikmanagement Ereignisprozeduren reagieren auf Ereignisse, die durch externe oder interne Programmaktionen ausgelöst werden. Sie sind für alle beliebigen geöffneten Blätter oder Arbeitsmappen verfügbar und machen nur in Klassen einen Sinn. Der Prozedurname setzt sich bei Microsoft traditionell aus dem Klassennamen verbunden mit dem Ereignisnamen über einen Unterstrich zusammen, z. B. Worksheet_Change. Man findet diese Ereignisprozeduren in dem Klassenmodul eines Tabellenblattes. Das erhält man durch Rechtsklick auf Tabellenreiter und Code anzeigen wählen. A.5.10.2 Eigene Ereignisprozeduren In Microsoft Excel können Ereignisprozeduren auf der Ebene von • Arbeitsblatt, • Diagramm, • Abfragetabelle, • Arbeitsmappe oder • Anwendung erstellt werden. Ereignisse können dabei auf mehreren Ebenen auftauchen. So tritt beispielsweise das Activate-Ereignis nur auf der Blattebene ein. Das SheetActivate-Ereignis ist dagegen sowohl auf der Arbeitsmappen- als auch auf der Anwendungsebene verfügbar: für eine Arbeitsmappe, wenn ein beliebiges Blatt der Arbeitsmappe aktiviert wird, auf der Anwendungsebene, wenn ein beliebiges Blatt in einer beliebigen Arbeitsmappe geöffnet wird. Die vorgenannten eingebauten Excel-Klassen können mit ihren Ereignissen in neue Klassen eingebunden werden. Sinnvoll ist dies beispielsweise, wenn eine Worksheet_Change-Ereignisprozedur allgemeingültig werden soll und sich so nicht nur auf die Arbeitsmappe beschränkt, in der sich der Code befindet. A.5.10.3 88 Objekt mit WithEvents erstellen Crash-Kurs in Excel VBA Um Ereignisprozeduren für ein Diagramm, eine QueryTable-Objekt oder ein Application-Objekt zu schreiben, muss unter Verwendung des Schlüsselwortes WithEvents in einem Klassenmodul zunächst ein neues Objekt erstellt werden: [Dim | Public | Private] WithEvents Objektvariable As Klassenname Das Schlüsselwort WithEvents gibt an, dass die Objektvariable auf Ereignisse reagieren kann, die von einem ActiveX-Objekt wie einer Befehlsschaltfläche oder einem Textfeld ausgelöst wurden. Eine solche Deklaration ist auf Klassenmodule beschränkt und die betreffende Klasse muss dabei natürlich Ereignisse auslösen. Mit WithEvents können beliebig viele Variablen deklarieren werden, jedoch keine Datenfelder. Instanzierung mit New kann nicht zusammen mit WithEvents verwendet werden. WithEvents A.5.10.4 Deklaration einer Objektvariablen vom Typ Application Das Application-Objekt bietet eine Vielzahl von Ereignissen der Excel-Anwendung an, die ausgewertet werden können. Bevor man jedoch ein Ereignis mit dem Application-Objekt verwenden kann, muss • ein Klassenmodul, beispielsweise mit dem Namen EventClassModule erstellt • und für Ereignisse ein Objekt, beispielsweise mit dem Namen App, vom Typ Application deklariert werden. Das neue Klassenmodul enthält dann den folgenden Code: Public WithEvents App As Application Das neue Objekt wird durch den VisualBasic Editor im Klassenmodul dann im Dropdown-Listenfeld Objekt angezeigt. Wählt man das neue Objekt App im Anzeigefeld Objekt aus, so werden die gültigen Ereignisse für dieses Objekt im Dropdown-Listenfeld Prozedur angezeigt. 89 Modellbasiertes Logistikmanagement A.5.10.5 Eingabe des Programmcodes für die Ereignisprozedur Nun können Ereignisprozeduren für das neue Objekt in Abhängigkeit von Ereignissen hinzugefügt werden. Mithilfe der EnableEvents-Eigenschaft können dabei Ereignisse gezielt aktiviert und deaktiviert werden. Beispielsweise führt das Speichern einer Arbeitsmappe mit der Save-Methode zum Auftreten des BeforeSave-Ereignisses. Das Aufrufen der zugehörigen Ereignisprozedur kann verhindert werden, indem die EnableEvents-Eigenschaft auf False gesetzt wird, bevor die Save-Methode aufgerufen wird. Beispiel Application.EnableEvents = False ActiveWorkbook.Save Application.EnableEvents = True A.5.10.6 Ausführen der Ereignisprozedur Bevor schließlich Prozeduren ausgeführt werden können, muss das deklarierte Objekt im Klassenmodul mit dem Application-Objekt verbunden werden. Dazu kann folgender Code verwendet werden: Dim X As New EventClassModule Sub InitializeApp() Set X.App = Application End Sub Nachdem die Prozedur InitializeApp ausgeführt wurde, zeigt das App-Objekt im Klassenmodul auf das Application-Objekt von Excel. Außerdem werden die Ereignisprozeduren im Klassenmodul ausgeführt, sobald ein Ereignis eintritt. 90 Übersicht über die vorinstallierten VBA-Funktionen B Übersicht über die vorinstallierten VBA-Funktionen Dieses Kapitel gibt eine Schnell-Übersicht zu den vorinstallierten VBA-Funktionen nach Sinnzusammenhängen. Die detaillierte Syntax zu den einzelnen Funktionen nebst Beispielen findet man in der Excel-Hilfe, Hilfe für Entwickler unter dem Visual Basic Sprachverzeichnis Funktionen. Datums- und Zeitfunktionen 1 B.1 FUNKTION BESCHREIBUNG CDate Wandelt eine Zeichenfolge in einen Datumswert um Date Gibt das aktuelle Systemdatum aus DateAdd Liefert einen Wert zurück, der ein Datum erhält, zu dem ein bestimmtes Zeitintervall addiert wurde DateDiff Gibt einen Wert zurück, der die Anzahl der Zeitintervalle zwischen zwei bestimmten Terminen angibt DatePart Liefert einen Wert zurück, der einen bestimmten Teil eines angegebenen Datums enthält DateSerial Liefert einen Wert zurück, der die angegebene Jahres-, Monats- und Tageszahl enthält DateValue Wandelt eine Zeichenfolge in einen gültigen Datumswert um Day Extrahiert den Tag als ganzzahligen Wert (1-31) aus einem Datumswert FileDateTime Liefert das Erstellungsdatum bzw. Änderungsdatum einer Datei zurück. FormatDateTime Formatiert Systemkonstanten in Datums um 1 Siehe Held(2004), Seite 91. 91 Modellbasiertes Logistikmanagement FUNKTION BESCHREIBUNG Hour Liefert die Stunde aus einem Datumswert (0-23) Minute Liefert die Minute auf dem Datumswert (0-59) Month Liefert den Monat aus dem Datumswert (1-12) MonthName Liefert die Zeichenfolge des Monats zurück Now Liefert das Systemdatum inklusive der Uhrzeit Second Gibt die Sekunden aus dem Datumswert zurück Timer Gibt einen Wert vom Typ Single zurück, der die Anzahl der seit Mitternacht vergangenen Sekunden angibt TimeSerial Setzt einen Datums-/Zeitwert aus Ganzzahlwerten (Sekunden, Minuten, Stunden) zusammen TimeValue Wandelt eine Zeichenfolge in einen gültigen Zeitwert um Weekday Gibt den Wochentag aus einem Datumswert zurück WeekdayName Gibt den Wochentag als Zeichenfolge aus einem Datumswert zurück Year Nummerischer Ausdruck, der einen Zeichenfolgenausdruck oder eine beliebige Kombination als Datum darstellen kann Tabelle: Datums- und Zeitfunktionen B.2 1 Textfunktionen 1 Siehe Held(2004), Seite 122. 92 Übersicht über die vorinstallierten VBA-Funktionen FUNKTION BESCHREIBUNG ASC Gibt einen Integer-Wert zurück, der den Zeichencode entsprechend dem ersten Buchstaben in einer Zeichenfolge darstellt Choose Wählt einen Wert aus einer Liste von Argumenten aus und gibt ihn zurück Chr Gibt einen Wert vom Typ String zurück, der das Zeichen enthält, das dem angegebenen Zeichen-Code zugeordnet ist InStr Gibt die Position des ersten Auftretens einer Zeichenfolge innerhalb einer anderen Zeichenfolge zurück InStrRev Gibt die Position einer Zeichenfolge in einer anderen Zeichenfolge von der hinteren Position an Join Gibt eine Zeichenfolge zurück, die sich aus der Kombination einer Reihe von untergeordneten Zeichenfolgen ergibt, die in einem Datenfeld enthalten sind LCase Wandelt Großbuchstaben in Kleinbuchstaben um Left Len Mid Replace Right Gibt einen Wert zurück, der eine bestimmte Anzahl von Zeichen ab dem ersten linken Zeichen einer Zeichenfolge enthält Gibt einen Wert vom Typ Long zurück, der die Anzahl der Zeichen in einer Zeichenfolge oder die zum Speichern erforderlichen Bytes enthält Gibt einen Wert vom Typ Variant zurück, der eine bestimmte Anzahl von Zeichen aus einer Zeichenfolge enthält Liefert Zeichenfolge, in der eine festgelegte, untergeordnete Zeichenfolge mit einer festgelegten Häufigkeit durch eine andere untergeordnete Zeichenfolge ersetzt wurde Gibt einen Wert zurück, der eine bestimmte Anzahl von Zeichen ab dem ersten rechten Zeichen einer Zeichenfolge enthält Space Liefert eine Zeichenfolge vom Typ Variant zurück, die aus einer angegebenen Anzahl von Leerzeichen besteht Spc Fügt in einer Textdatei eine bestimme Anzahl von Leerzeichen ein Split Gibt ein nullbasiertes, eindimensionales Datenfeld zurück, das eine festgelegte Anzahl an untergeordneten Zeichenfolgen enthält 93 Modellbasiertes Logistikmanagement FUNKTION BESCHREIBUNG Str Gibt einen Wert vom Typ Variant (String) zurück, der eine Zahl darstellt StrComp Gibt einen Wert vom Typ Variant (Integer) zurück, der das Ergebnis eines Zeichenfolgenergebnis anzeigt StrConv Gibt einen Wert vom Typ String zurück, der die angegeben umgewandelt wurde StrReverse Liefert eine Zeichenfolge, in der die Reihenfolge der Zeichen einer Zeichenfolge umgekehrt wurde String Liefert eine Zeichenfolge zurück, die ein sich wiederholendes Zeichen der angegebenen Länge enthält Switch Wertet eine Liste von Ausdrücken aus und gibt einen Wert vom Typ Variant oder einen Ausdruck zurück Trim Gibt eine Zeichenfolge zurück, die eine Kopie einer bestimmten Zeichenfolge enthält, die keine führenden und/oder nachgestellten Leerzeichen enthält UCase Wandelt Kleinbuchstaben in Großbuchstaben um Tabelle: Textfunktionen 94 Übersicht über die vorinstallierten VBA-Funktionen Dateifunktionen und Anweisungen 1 B.3 FUNKTION BESCHREIBUNG ChDir Wechselt das aktuelle Verzeichnis oder den aktuellen Ordner ChDrive Wechselt das aktuelle Laufwerk Close Beendet das Lesen aus und das Schreiben in eine Datei, die mit der Open-Anweisung geöffnet wurde CurDir Gibt einen Wert zurück, der den aktuellen Pfad darstellt Dir Gibt eine String-Zeichenfolge zurück, die den Namen einer Datei, eines Verzeichnisses oder eines Ordners darstellt Environ Gibt die mit einer Betriebssystem-Umgebungsvariablen verbundenen Zeichenfolge zurück EOF Liefert einen String, der den Boolean-Wert True enthält, wenn das Ende einer Datei die im Zugriffsmodus Random oder Input geöffnet wurde, erreicht worden ist FileAttr Gibt einen Wert vom Typ Long zurück, der den Zugriffsmodus für mit der Open-Anweisung geöffnete Dateien darstellt. FileCopy Kopiert eine Datei FileLen Gibt einen Wert vom Typ Long zurück, der die Länge einer Datei in Bytes angibt. FreeFile Gibt einen Wert vom Typ Integer zurück, der die nächste verfügbare Dateinummer darstellt, die die Open-Anweisung zum Öffnen einer Datei verwenden kann. Get Liest Daten aus einer geöffneten Datenträgerdatei in eine Variable ein. GetAttr Gibt einen Wert vom Typ Integer zurück, der die Attribute einer Datei, eines Verzeichnisses oder eines Ordners darstellt. Input Gibt einen Wert vom Typ String zurück, der Zeichen aus einer im Modus Input oder Binary geöffneten Datei enthält. 1 Siehe Held(2004), Seite 158. 95 Modellbasiertes Logistikmanagement FUNKTION BESCHREIBUNG Kill Löscht Dateien von einem Datenträger. Line Input Liest eine einzelne Zeile aus einer geöffneten sequentiellen Datei und weist sie einer Variablen vom Typ String zu. LOC Gibt einen Wert vom Typ Long zurück, der die aktuelle Schreib-/Leseposition innerhalb einer geöffneten Datei angibt. Lock/Unlock LSet Regelt die Zugriffsmöglichkeiten anderer Prozesse auf eine Datei (oder auf Teile einer Datei), die mit der OpenAnweisung geöffnet wurde. Richtet eine Zeichenfolge innerhalb einer Zeichenfolgenvariablen links aus oder kopiert eine Variable eines benutzerdefinierten Datentyps in eine Variable eines anderen benutzerdefinierten Datentyps. MkDir Erstellt ein neues Verzeichnis oder einen neuen Ordner. Name Umbenennen einer Datei Open Öffnet eine Datei für die Ein- bzw. Ausgabe Print Schreibt Daten, die für die Ausgabe formatiert sind, in eine sequentielle Datei. Put Schreibt Daten aus einer Variablen in eine Datenträgerdatei. Reset Schließt alle Datenträgerdateien, die mit der Open-Anweisung geöffnet wurden. RmDir Entfernt ein existierendes Verzeichnis oder einen existierenden Ordner. Seek Legt in einer mit der Open-Anweisung geöffneten Datei die Position für den nächsten Lese- oder Schreibvorgang fest. SetAttr Legt die Attribute für eine Datei fest. Shell Führt ein ausführbares Programm aus. Falls erfolgreich, gibt sie einen Wert vom Typ Variant (Double) zurück, der die Task-ID des Programms darstellt. Andernfalls wird Null zurückgegeben. 96 Übersicht über die vorinstallierten VBA-Funktionen FUNKTION Write BESCHREIBUNG Schreibt Daten in eine sequentielle Datei. Tabelle: Dateifunktionen und Anweisungen Mathematische Funktionen 1 B.4 FUNKTION BESCHREIBUNG Abs Gibt einen Wert zurück, der den gleichen Typ wie der übergebene Wert hat und den Absolutwert einer Zahl angibt. Atn Gibt einen Wert vom Typ Double zurück, der den Arcustangens einer Zahl angibt. Cos Gibt ein Bogenmaß vom Typ Double zurück, der den Cosinus eines Winkels im Bogenmaß angibt. DDB Gibt einen Wert vom Typ Double zurück, der die Abschreibung eines Vermögenswertes über einen bestimmten Zeitraum mit Hilfe der geometrisch degressiven Abschreibungsmethode oder einer von Ihnen ausgewählten Methode angibt. Exp Gibt einen Wert vom Typ Double zurück, der e (die Basis des natürlichen Logarithmus) potenziert mit einem Wert angibt. Fix Gibt den ganzzahligen Anteil einer Zahl zurück. FV Gibt einen Wert vom Typ Double zurück, der den zukünftigen Wert einer Annuität bei regelmäßigen, konstanten Zahlungsausgängen und einem konstanten Zinssatz angibt. Int Gibt den ganzzahligen Anteil einer Zahl zurück. IPmt Gibt einen Wert vom Typ Double zurück, der die Zinszahlung für einen bestimmten Zeitraum einer Annuität bei regelmäßigen, konstanten Zahlungen und einem konstanten Zinssatz angibt. 1 Siehe Held(2004), Seite 191 97 Modellbasiertes Logistikmanagement FUNKTION BESCHREIBUNG IRR Gibt einen Wert vom Typ Double zurück, der den internen Ertragssatz für eine Folge regelmäßiger Cash Flows (Ausund Einzahlungen) angibt. Log Gibt einen Wert vom Typ Double zurück, der den natürlichen Logarithmus einer Zahl angibt. NPer NPV Pmt PPmt PV Gibt einen Wert vom Typ Double zurück, der die Anzahl der Zeiträume für eine Annuität bei regelmäßigen, konstanten Zahlungen und einem konstanten Zinssatz angibt. Gibt einen Wert vom Typ Double zurück, der den NettoBarwert einer Investition bei regelmäßigen Cash Flows (Ausund Einzahlungen) und einem Diskontsatz angibt. Gibt einen Wert vom Typ Double zurück, der die Auszahlung für eine Annuität bei regelmäßigen konstanten Zahlungsausgängen und konstantem Zinssatz angibt. Gibt einen Wert vom Typ Double zurück, der den Kapitalanteil einer Auszahlung für einen bestimmten Zeitraum einer Annuität bei regelmäßigen konstanten Auszahlungen und einem konstanten Zinssatz angibt. Gibt einen Wert vom Typ Double zurück, der den Barwert einer Annuität bei zukünftig regelmäßig und konstant zu leistenden Zahlungsausgängen und einem konstanten Zinssatz angibt. Randomize Initialisiert den Zufallszahlengenerator. Rate Gibt einen Wert vom Typ Double zurück, der den Zinssatz einer Annuität pro Zeitraum angibt. Rnd Gibt einen Wert vom Typ Single zurück, der eine Zufallszahl darstellt. Round Gibt eine Zahl zurück, die auf eine festgelegte Anzahl an Dezimalpunkten gerundet wurde. Sgn Gibt einen Wert vom Typ Variant (Integer) zurück, der das Vorzeichen einer Zahl darstellt. Sin Gibt einen Wert vom Typ Double zurück, der den Sinus eines Winkels im Bogenmaß enthält. SLN Gibt einen Wert vom Typ Double zurück, der die arithmetische Abschreibung eines Vermögenswertes über einen bestimmten Zeitraum angibt. Sqr Gibt einen Wert vom Typ Double zurück, der die Quadratwurzel einer Zahl angibt. 98 Übersicht über die vorinstallierten VBA-Funktionen FUNKTION BESCHREIBUNG SYD Gibt einen Wert vom Typ Double zurück, der die Jahresabschreibung eines Vermögenswertes über einen bestimmten Zeitraum angibt. Tan Gibt einen Wert vom Typ Double wieder, der den Tangens eines Winkels im Bogenmaß angibt. Tabelle: Mathematische Funktionen 99 Modellbasiertes Logistikmanagement C Übersicht über die Excel-Funktionen Die zahlreichen in Excel implementierten Funktionen zur Tabellenkalkulation bilden die dritte Gruppe der unter Excel-VBA ansprechbaren Funktionen. Die detaillierte Syntax nebst Beispielen fast aller Funktionen 1 in der deutschsprachigen Version findet man in der Excel-Hilfe unter dem Visual-Basic Sprachverzeichnis unter Funktionsreferenz oder in der Excel2010-Entwicklerreferenz unter Elemente des Worksheet-Function-Objekts. C.1 Finanzmathematische Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG AMORDEGRK AMORDEGRC Gibt die Abschreibung für die einzelnen Abschreibungszeiträume mit Hilfe eines Abschreibungskoeffizienten zurück AMORLINEARK AMORLINC Gibt die Abschreibung für die einzelnen Abschreibungszeiträume zurück AUFGELZINSF ACCRINTM AUFGELZINS ACCRINT AUSZAHLUNG RECEIVED BW PV DIA SYD DISAGIO DISC 1 Gibt die aufgelaufenen Zinsen (Stückzinsen) eines Wertpapiers zurück, die bei Fälligkeit ausgezahlt werden Gibt die aufgelaufenen Zinsen (Stückzinsen) eines Wertpapiers mit periodischen Zinszahlungen zurück Gibt den Auszahlungsbetrag eines voll investierten Wertpapiers am Fälligkeitstermin zurück Gibt den Barwert einer Investition zurück Gibt die arithmetisch-degressive Abschreibung eines Wirtschaftsguts für eine bestimmte Periode zurück Gibt den in Prozent ausgedrückten Abzinsungssatz eines Wertpapiers zurück Bis auf die exotischen Add-in und Automatisierungsfunktionen, hier bleibt nur „googeln“, etwa: http://www.codematic.net/excel-development/excel-xll/excel-xll-register.htm 100 Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG DURATION DURATION Gibt die jährliche Duration eines Wertpapiers mit periodischen Zinszahlungen zurück EFFEKTIV EFFECT Gibt die jährliche Effektivverzinsung zurück GDA2 DB GDA DDB IKV IRR ISPMT ISPMT KAPZ PPMT KUMKAPITAL CUMPRINC KUMZINSZ CUMIPMT Berechnet die kumulierten Zinsen, die zwischen zwei Perioden zu zahlen sind KURSDISAGIO PRICEDISC Gibt den Kurs pro 100 € Nennwert eines unverzinslichen Wertpapiers zurück Gibt die geometrisch-degressive Abschreibung eines Wirtschaftsguts für eine bestimmte Periode zurück Gibt die Abschreibung eines Anlageguts für einen angegebenen Zeitraum unter Verwendung der degressiven Doppelraten-Abschreibung oder eines anderen von Ihnen angegebenen Abschreibungsverfahrens zurück Gibt den internen Zinsfuß einer Investition ohne Finanzierungskosten oder Reinvestitionsgewinne zurück Berechnet die während eines bestimmten Zeitraums für eine Investition gezahlten Zinsen Gibt die Kapitalrückzahlung einer Investition für eine angegebene Periode zurück Berechnet die aufgelaufene Tilgung eines Darlehens, die zwischen zwei Perioden zu zahlen ist Gibt den Kurs pro 100 € Nennwert eines Wertpapiers zurück, das Zinsen am Fälligkeitsdatum auszahlt Gibt den Kurs pro 100 € Nennwert eines Wertpapiers zurück, das periodisch Zinsen auszahlt KURSFÄLLIG PRICEMAT KURS PRICE LIA SLN Gibt die lineare Abschreibung eines Wirtschaftsguts pro Periode zurück MDURATION MDURATION Gibt die geänderte Dauer für ein Wertpapier mit einem angenommenen Nennwert von 100 € zurück 101 Modellbasiertes Logistikmanagement FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG NBW NPV Gibt den Nettobarwert einer Investition auf Basis periodisch anfallender Zahlungen und eines Abzinsungsfaktors zurück NOMINAL NOMINAL Gibt die jährliche Nominalverzinsung zurück Wandelt eine Notierung, die als Dezimalzahl ausgedrückt wurde, in einen Dezimalbruch um Wandelt eine Notierung, die als Dezimalbruch ausgedrückt wurde, in eine Dezimalzahl um Gibt den internen Zinsfuß zurück, wobei positive und negative Zahlungen zu unterschiedlichen Sätzen finanziert werden NOTIERUNGBRU DOLLARFR NOTIERUNGDEZ DOLLARDE QIKV MIRR RENDITEDIS YIELDDISC Gibt die jährliche Rendite eines unverzinslichen Wertpapiers zurück RENDITEFÄLL YIELDMAT Gibt die jährliche Rendite eines Wertpapiers zurück, das Zinsen am Fälligkeitsdatum auszahlt RENDITE YIELD Gibt die Rendite eines Wertpapiers zurück, das periodisch Zinsen auszahlt RMZ PMT Gibt die periodische Zahlung für eine Annuität zurück TBILLÄQUIV TBILLEQ Gibt die Rendite für ein Wertpapier zurück TBILLKURS TBILLPRICE Gibt den Kurs pro 100 € Nennwert eines Wertpapiers zurück TBILLRENDITE TBILLYIELD Gibt die Rendite für ein Wertpapier zurück UNREGER.KURS ODDFPRICE UNREGER.REND ODDFYIELD 102 Gibt den Kurs pro 100 € Nennwert eines Wertpapiers mit einem unregelmäßigen ersten Zinstermin zurück Gibt die Rendite eines Wertpapiers mit einem unregelmäßigen ersten Zinstermin zurück Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG Gibt den Kurs pro 100 € Nennwert eines Wertpapiers mit einem unregelmäßigen letzten Zinstermin zurück Gibt die Rendite eines Wertpapiers mit einem unregelmäßigen letzten Zinstermin zurück Gibt die degressive Abschreibung eines Wirtschaftsguts für eine bestimmte Periode oder Teilperiode zurück Gibt den internen Zinsfuß einer Reihe nicht periodisch anfallender Zahlungen zurück Gibt den Nettobarwert (Kapitalwert) einer Reihe nicht periodisch anfallender Zahlungen zurück UNREGLE.KURS ODDLPRICE UNREGLE.REND ODDLYIELD VDB VDB XINTZINSFUSS XIRR XKAPITALWERT XNPV ZINS RATE Gibt den Zinssatz pro Zeitraum einer Annuität zurück ZINSSATZ INTRATE Gibt den Zinssatz eines voll investierten Wertpapiers zurück ZINSTERMNZ COUPNCD Gibt das Datum des ersten Zinstermins nach dem Abrechnungstermin zurück ZINSTERMTAGE COUPDAYS ZINSTERMTAGNZ COUPDAYSNC ZINSTERMTAGVA COUPDAYBS ZINSTERMVZ COUPPCD Gibt das Datum des letzten Zinstermins vor dem Abrechnungstermin zurück ZINSTERMZAHL COUPNUM Gibt die Anzahl der Zinstermine zwischen Abrechnungs- und Fälligkeitsdatum zurück ZINSZ IPMT Gibt die Zinszahlung einer Investition für die angegebene Periode zurück FVSCHEDULE Gibt den aufgezinsten Wert des Anfangskapitals für eine Reihe periodisch unterschiedlicher Zinssätze zurück ZW2 Gibt die Anzahl der Tage der Zinsperiode zurück, die den Abrechnungstermin einschließt Gibt die Anzahl der Tage vom Abrechnungstermin bis zum nächsten Zinstermin zurück Gibt die Anzahl der Tage vom Anfang des Zinstermins bis zum Abrechnungstermin zurück 103 Modellbasiertes Logistikmanagement FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG ZW FV Gibt den zukünftigen Wert (Endwert) einer Investition zurück ZZR NPER Gibt die Anzahl der Zahlungsperioden einer Investition zurück Tabelle: Finanzmathematische Funktionen C.2 Logische Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG FALSCH FALSE Gibt den Wahrheitswert FALSCH zurück WENN IF Gibt einen logischen Test an, der durchgeführt werden soll NICHT NOT Kehrt die Logik der Argumente um ODER OR Gibt WAHR zurück, wenn ein Argument WAHR ist UND AND Gibt WAHR zurück, wenn alle zugehörigen Argumente WAHR sind WAHR TRUE Gibt den Wahrheitswert WAHR zurück IFERROR Wenn eine Formel mit einem Fehler ausgewertet wird, wird ein angegebener Wert zurückgegeben; anderenfalls wird das Ergebnis der Formel zurückgegeben. WENNFEHLER Tabelle: Logische Funktionen C.3 104 Textfunktionen Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG ASC ASC Wandelt lateinische Buchstaben voller Breite (Double-Byte-Zeichen) oder Katakana innerhalb einer Zeichenfolge in Zeichen halber Breite (Single-Byte-Zeichen) um BAHTTEXT BAHTTEXT Wandelt eine Zahl in einen Text im Währungsformat ß (Baht) um CODE CODE Gibt die Codezahl des ersten Zeichens in einem Text zurück DM DOLLAR Wandelt eine Zahl in einen Text im Währungsformat $ (Dollar) um ERSETZEN, ERSETZENB REPLACE, REPLACEB Ersetzt Zeichen in Text FEST FIXED Formatiert eine Zahl als Text mit einer festen Anzahl Dezimalstellen FINDEN, FINDENB FIND, FINDB Sucht einen in einem anderen Textwert enthaltenen Textwert (Groß-/Kleinschreibung wird beachtet) GLÄTTEN TRIM Entfernt Leerzeichen aus Text GROSS2 PROPER Schreibt den ersten Buchstaben aller Wörter in einem Textwert groß GROSS UPPER Wandelt Text in Großbuchstaben um IDENTISCH EXACT Überprüft, ob zwei Textwerte identisch sind JIS JIS Wandelt lateinische Buchstaben halber Breite (Single-Byte-Zeichen) oder Katakana innerhalb einer Zeichenfolge in Zeichen voller Breite (Double-Byte-Zeichen) um KLEIN LOWER Wandelt Text in Kleinbuchstaben um LÄNGE, LÄNGEB LEN, LENB Gibt die Anzahl Zeichen in einer Textzeichenfolge zurück 105 Modellbasiertes Logistikmanagement FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG LINKS, LINKSB LEFT, LEFTB Gibt die Zeichen ganz links aus einem Textwert zurück PHONETIC PHONETIC Extrahiert die phonetischen (Furigana)Zeichen aus einer Textzeichenfolge RECHTS, RECHTSB RIGHT, RIGHTB Gibt die Zeichen ganz rechts aus einem Textwert zurück SÄUBERN CLEAN Löscht alle nicht druckbaren Zeichen aus einem Text SUCHEN, SUCHENB SEARCH, SEARCH TEIL, TEILB MID, MIDB TEXT TEXT Formatiert eine Zahl und wandelt sie in Text um T T Wandelt die eigenen Argumente in Text um VERKETTEN CONCATENATE Verknüpft mehrere Textelemente zu einem Textelement WECHSELN SUBSTITUTE Ersetzt alten Text durch neuen Text in einer Textzeichenfolge WERT VALUE Wandelt ein Textargument in eine Zahl um WIEDERHOLEN REPT Wiederholt einen Text so oft wie angegeben ZEICHEN CHAR Gibt das der Codezahl entsprechende Zeichen zurück Sucht einen in einem anderen Textwert enthaltenen Textwert (Groß-/Kleinschreibung wird nicht beachtet) Gibt eine bestimmte Anzahl Zeichen aus einer Textzeichenfolge zurück, die an der angegebenen Stelle beginnt Tabelle: Textfunktionen C.4 106 Datums- und Uhrzeitfunktionen Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG Gibt die fortlaufende Zahl des Datums zurück, das vor oder nach einer bestimmten Anzahl von Arbeitstagen liegt. Dabei werden Parameter verwendet, um anzugeben, welche und wie viele Tage auf Wochenenden fallen. Gibt die fortlaufende Zahl des Datums vor oder nach einer bestimmten Anzahl von Arbeitstagen zurück Gibt die Anzahl der ganzen Tage zwischen Ausgangsdatum und Enddatum in Bruchteilen von Jahren zurück ARBEITSTAG. INTL WORKDAY.INTL ARBEITSTAG WORKDAY BRTEILJAHRE YEARFRAC DATUM DATE Gibt die fortlaufende Zahl eines bestimmten Datums zurück DATWERT DATEVALUE Wandelt ein Datum in Form von Text in eine fortlaufende Zahl um EDATUM EDATE Gibt die fortlaufende Zahl des Datums zurück, bei dem es sich um die angegebene Anzahl von Monaten vor oder nach dem Anfangstermin handelt HEUTE TODAY Gibt die fortlaufende Zahl des heutigen Datums zurück JAHR YEAR Wandelt eine fortlaufende Zahl in ein Jahr um JETZT NOW Gibt die fortlaufende Zahl des aktuellen Datums und der aktuellen Uhrzeit zurück KALENDER WOCHE WEEKNUM Wandelt eine fortlaufende Zahl in eine Zahl um, die angibt, in welche Woche eines Jahres das angegebene Datum fällt MINUTE MINUTE Wandelt eine fortlaufende Zahl in eine Minute um MONAT MONTH Wandelt eine fortlaufende Zahl in einen Monat um MONATSENDE EOMONTH Gibt die fortlaufende Zahl des letzten Tags des Monats vor oder nach einer festgelegten Anzahl von Monaten zurück 107 Modellbasiertes Logistikmanagement FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG NETTO ARBEITSTAGE. INTL NETWORKDAYS. INTL Gibt die Anzahl der vollen Arbeitstage zwischen zwei Datumsangaben zurück. Dabei werden Parameter verwendet, um anzugeben, welche und wie viele Tage auf Wochenenden fallen NETTO ARBEITSTAGE NETWORKDAYS Gibt die Anzahl der vollen Arbeitstage zwischen zwei Datumsangaben zurück SEKUNDE SECOND Wandelt eine fortlaufende Zahl in eine Sekunde um STUNDE HOUR Wandelt eine fortlaufende Zahl in eine Stunde um TAGE360 DAYS360 Berechnet die Anzahl der Tage zwischen zwei Datumsangaben ausgehend von einem Jahr, das 360 Tage hat TAG DAY Wandelt eine fortlaufende Zahl in den Tag des Monats um WOCHENTAG WEEKDAY Wandelt eine fortlaufende Zahl in den Tag der Woche um ZEIT TIME Gibt die fortlaufende Zahl einer bestimmten Uhrzeit zurück ZEITWERT TIMEVALUE Wandelt eine Uhrzeit in Form von Text in eine fortlaufende Zahl um Tabelle: Datums- und Zeitfunktionen C.5 Nachschlage- und Verweisfunktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG ADRESSE ADDRESS Gibt einen Bezug auf eine einzelne Zelle in einem Tabellenblatt als Text zurück BEREICH. VERSCHIEBEN OFFSET Gibt einen Bezug zurück, der einen Abstand zu einem angegebenen Bezug hat 108 Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BEREICHE AREAS BESCHREIBUNG Gibt die Anzahl der innerhalb eines Bezugs aufgeführten Bereiche zurück Erstellt eine Verknüpfung oder einen Sprung, über die ein auf einem Netzwerkserver, in einem Intranet oder im Internet gespeichertes Dokument geöffnet wird Verwendet einen Index, um einen Wert aus einem Bezug oder einem Array auszuwählen HYPERLINK HYPERLINK INDEX INDEX INDIREKT INDIRECT Gibt einen Bezug zurück, der von einem Textwert angegeben wird MTRANS TRANSPOSE Gibt die Transponierte einer Matrix zurück PIVOTDATEN ZUORDNEN GETPIVOTDATA Gibt die in einem PivotTable-Bericht gespeicherten Daten zurück RTD RTD Ruft Echtzeitdaten von einem Programm ab, das die COM-Automatisierung unterstützt SPALTE COLUMN Gibt die Spaltennummer eines Bezugs zurück SPALTEN COLUMNS Gibt die Anzahl der innerhalb eines Bezugs aufgeführten Spalten zurück SVERWEIS VLOOKUP Sucht in der ersten Spalte einer Matrix und dann zeilenweise, um den Wert einer Zelle zurückzugeben VERGLEICH MATCH Sucht Werte in einem Bezug oder in einer Matrix VERWEIS LOOKUP Sucht Werte in einem Vektor oder in einer Matrix WAHL CHOOSE Wählt einen Wert aus einer Liste mit Werten aus WVERWEIS HLOOKUP Sucht in der obersten Zeile einer Matrix und gibt den Wert der angegebenen Zelle zurück 109 Modellbasiertes Logistikmanagement FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG ZEILE ROW Gibt die Zeilennummer eines Bezugs zurück ZEILEN ROWS Gibt die Anzahl der innerhalb eines Bezugs aufgeführten Zeilen zurück Tabelle: Nachschlage- und Verweisfunktionen C.6 Mathematische und trigonometrische Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG ABRUNDEN ROUNDDOW Rundet einer Zahl in Richtung Null ab N ABS ABS Gibt den Absolutwert einer Zahl zurück AGGREGAT AGGREGAT E Gibt ein Aggregat in einer Liste oder Datenbank zurück ARCCOS ACOS Gibt den Arcuscosinus einer Zahl zurück ARCCOSHYP ACOSH Gibt den umgekehrten hyperbolischen Cosinus einer Zahl zurück ARCSIN ASIN Gibt den Arcussinus einer Zahl zurück ARCSINHYP ASINH Gibt den umgekehrten hyperbolischen Sinus einer Zahl zurück ARCTAN2 ATAN2 Gibt den Arcustangens von x- und yKoordinaten zurück ARCTAN ATAN Gibt den Arcustangens einer Zahl zurück 110 Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG ARCTANHYP ATANH Gibt den umgekehrten hyperbolischen Tangens einer Zahl zurück AUFRUNDEN ROUNDUP Rundet eine Zahl von Null aus auf BOGENMASS RADIANS Wandelt Grad in Bogenmaß (Radiant) um COS COS Gibt den Cosinus einer Zahl zurück COSHYP COSH Gibt den hyperbolischen Kosinus einer Zahl zurück EXP EXP Potenziert die Basis e (EULERsche Zahl) mit der als Argument angegebenen Zahl FAKULTÄT FACT Gibt die Fakultät einer Zahl zurück GANZZAHL INT Rundet eine Zahl auf die nächste Ganzzahl ab GERADE EVEN Rundet eine Zahl auf die nächste gerade ganze Zahl auf GGT GCD Gibt den größten gemeinsamen Teiler zurück GRAD DEGREES Wandelt Bogenmaß (Radiant) in Grad um ISO.OBERGRENZE ISO.CEILING Gibt eine Zahl zurück, die auf die nächste Ganzzahl oder auf das kleinste Vielfache von Schritt gerundet wurde KGV LCM Gibt das kleinste gemeinsame Vielfache zurück KOMBINATIONEN COMBIN Gibt die Anzahl der Kombinationen für eine bestimmte Anzahl von Objekten zurück TRUNC Schneidet die Kommastellen der Zahl ab und gibt als Ergebnis eine ganze Zahl zurück KÜRZEN 111 Modellbasiertes Logistikmanagement FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG LN LN Gibt den natürlichen Logarithmus einer Zahl zurück LOG10 LOG10 Gibt den Logarithmus einer Zahl zur Basis 10 zurück LOG LOG Gibt den Logarithmus einer Zahl zur angegebenen Basis zurück MDET MDETERM Gibt die Determinante einer Matrix zurück MINV MINVERSE Gibt die Inverse einer Matrix zurück MMULT MMULT Gibt das Produkt zweier Matrizen zurück OBERGRENZE. GENAU CEILING. PRECISE Rundet eine Zahl auf die nächste Ganzzahl oder auf das kleinste Vielfache von Schritt. Die Zahl wird unabhängig von ihrem Vorzeichen aufgerundet. OBERGRENZE CEILING Rundet eine Zahl auf die nächste Ganzzahl oder auf das kleinste Vielfache von Schritt PI PI Gibt den Wert von Pi zurück POLYNOMIAL MULTINOMI AL Gibt den Polynomialkoeffizienten einer Gruppe von Zahlen zurück POTENZ POWER Gibt als Ergebnis eine potenzierte Zahl zurück POTENZREIHE SERIESSUM Gibt die Summe von Potenzen (zur Berechnung von Potenzreihen und dichotomen Wahrscheinlichkeiten) zurück PRODUKT PRODUCT Multipliziert die zugehörigen Argumente QUADRATE SUMME SUMSQ Gibt die Summe der quadrierten Argumente zurück QUOTIENT QUOTIENT Gibt den ganzzahligen Anteil einer Division zurück 112 Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG REST MOD Gibt den Rest einer Division zurück RÖMISCH ROMAN Wandelt eine arabische Zahl in eine römische Zahl als Text um RUNDEN ROUND Rundet eine Zahl auf eine bestimmte Anzahl von Dezimalstellen SIN SIN Gibt den Sinus eines angegebenen Winkels zurück SINHYP SINH Gibt den hyperbolischen Sinus einer Zahl zurück SUMME SUM Addiert die zugehörigen Argumente SUMMEN PRODUKT SUMPRODU CT Gibt die Summe der Produkte entsprechender Matrixkomponenten zurück SUMMEWENN SUMIF Addiert Zellen, die mit den Suchkriterien übereinstimmen SUMMEWENNS SUMIFS Addiert die Zellen in einem Bereich, die mehrere Kriterien erfüllen Gibt die Summe der Differenz von Quadraten entsprechender Werte in zwei Matrizen zurück Gibt die Summe der Summe von Quadraten entsprechender Werte in zwei Matrizen zurück Gibt die Summe der Quadrate von Differenzen entsprechender Werte in zwei Matrizen zurück SUMMEX2MY2 SUMX2MY2 SUMMEX2PY2 SUMX2PY2 SUMMEXMY2 SUMXMY2 TAN TAN Gibt den Tangens einer Zahl zurück TANHYP TANH Gibt den hyperbolischen Tangens einer Zahl zurück TEILERGEBNIS SUBTOTAL Gibt ein Teilergebnis in einer Liste oder Datenbank zurück 113 Modellbasiertes Logistikmanagement FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG ODD Rundet eine Zahl auf die nächste ungerade ganze Zahl auf UNTERGRENZE.GEN AU FLOOR.PRE CISE Rundet eine Zahl auf die nächste Ganzzahl oder auf das kleinste Vielfache von Schritt ab. Die Zahl wird unabhängig von ihrem Vorzeichen abgerundet. UNTERGRENZE FLOOR Rundet eine Zahl in Richtung Null ab VORZEICHEN SIGN Gibt das Vorzeichen einer Zahl zurück VRUNDEN MROUND Gibt eine auf das gewünschte Vielfache gerundete Zahl zurück WURZEL SQRT Gibt die Quadratwurzel einer Zahl zurück WURZELPI SQRTPI Gibt die Wurzel aus der mit Pi multiplizierten Zahl zurück ZUFALLSBEREICH RANDBETW EEN Gibt eine ganze Zufallszahl aus dem festgelegten Bereich zurück ZUFALLSZAHL RAND Gibt eine Zufallszahl zwischen 0 und 1 zurück ZWEIFAKULTÄT FACTDOUBL E Gibt die Fakultät zu Zahl mit Schrittlänge 2 zurück UNGERADE Tabelle: Mathematische und trigonometrische Funktionen C.7 Statistische Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) ACHSEN ABSCHNITT 114 INTERCEPT BESCHREIBUNG Gibt den Schnittpunkt der linearen Regressionsgeraden zurück Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG ANZAHL2 COUNTA Zählt die Anzahl der Werte in der Liste mit Argumenten ANZAHL COUNT Zählt die Anzahl der Zahlen in der Liste mit Argumenten ANZAHL LEEREZELLEN COUNTBLANK Gibt die Anzahl der leeren Zellen in einem Bereich an BESTIMMTHEITS MASS RSQ BETA.INV BETA.INV BETA.VERT BETA.DIST BINOM.INV BINOM.INV BINOM.VERT BINOM.DIST CHI-QHI.VERT.RE CHI-QHI.VERT.RE CHIQU.INV.RE CHISQ.INV.RT CHIQU.INV CHISQ.INV CHIQU.TEST CHISQ.TEST CHIQU.VERT.RE CHISQ.DIST.RT EXPON.VERT EXPON.DIST Gibt das Quadrat des PEARSONschen Korrelationskoeffizienten zurück Gibt Quantile der kumulierten Verteilungsfunktion für eine bestimmte Betaverteilung zurück Gibt die Werte der kumulierten Betaverteilungsfunktion zurück Gibt den kleinsten Wert zurück, für den die kumulierten Wahrscheinlichkeiten der Binomialverteilung kleiner oder gleich einer Grenzwahrscheinlichkeit sind Gibt Wahrscheinlichkeiten einer binominalverteilten Zufallsvariablen zurück Gibt die kumulative BetaWahrscheinlichkeitsdichtefunktion zurück Gibt Quantile der Verteilungsfunktion (1-Alpha) der Chi-Quadrat-Verteilung zurück Gibt die kumulative BetaWahrscheinlichkeitsdichtefunktion zurück Gibt die Teststatistik eines Unabhängigkeitstests zurück Gibt Werte der Verteilungsfunktion (1-Alpha) einer Chi-Quadratverteilten Zufallsgröße zurück Gibt Wahrscheinlichkeiten einer exponentialverteilten Zufallsvariablen zurück 115 Modellbasiertes Logistikmanagement FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG F.INV.RE F.INV.RT Gibt Quantile der F-Verteilung zurück F.INV F.INV Gibt Quantile der F-Verteilung zurück F.TEST F.TEST Gibt die Teststatistik eines F-Tests zurück Gibt Werte der Verteilungsfunktion (1-Alpha) einer F-verteilten Zufallsvariablen zurück Gibt Werte der Verteilungsfunktion (1-Alpha) einer F-verteilten Zufallsvariablen zurück F.VERT.RE F.DIST.RT F.VERT F.DIST FISHER FISHER Gibt die Fisher-Transformation zurück FISHERINV FISHERINV Gibt die Umkehrung der FisherTransformation zurück GAMMA.INV GAMMA.INV Gibt Quantile der Gammaverteilung zurück GAMMA.VERT GAMMA.DIST Gibt Wahrscheinlichkeiten einer gammaverteilten Zufallsvariablen zurück GAMMALN.GENAU GAMMALN.PRECISE Gibt den natürlichen Logarithmus der Gammafunktion zurück, Γ(x) GAMMALN GAMMALN Gibt den natürlichen Logarithmus der Gammafunktion zurück, Γ(x) GEOMITTEL GEOMEAN Gibt das geometrische Mittel zurück GESTUTZTMITTEL TRIMMEAN GTEST ZTEST HARMITTEL HARMEAN 116 Gibt den Mittelwert einer Datengruppe zurück, ohne die Randwerte zu berücksichtigen Gibt den einseitigen Wahrscheinlichkeitswert für einen Gaußtest (Normalverteilung) zurück Gibt das harmonische Mittel zurück Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG FREQUENCY Gibt eine Häufigkeitsverteilung als einspaltige Matrix zurück HYPGEOM.VERT HYPGEOM.DIST Gibt Wahrscheinlichkeiten einer hypergeometrisch-verteilten Zufallsvariablen zurück KGRÖSSTE LARGE Gibt den k-größten Wert einer Datengruppe zurück KKLEINSTE SMALL Gibt den k-kleinsten Wert einer Datengruppe zurück KONFIDENZ. NORM CONFIDENCE.NOR M KONFIDENZ.T CONFIDENCE.T KORREL CORREL KOVARIANZ.P COVARIANCE.P KOVARIANZ.S COVARIANCE.S KURT KURT Gibt die Kurtosis (Exzess) einer Datengruppe zurück LOGNORM.INV LOGNORM.INV Gibt Perzentile der Lognormalverteilung zurück HÄUFIGKEIT LOGNORM.VERT LOGNORM.DIST MAXA MAXA Gibt das 1-Alpha Konfidenzintervall für den Erwartungswert einer Zufallsvariablen zurück Gibt das Konfidenzintervall für den Erwartungswert einer Zufallsvariablen zurück, wobei der Studentsche T-Test verwendet wird Gibt den Korrelationskoeffizienten zweier Reihen von Merkmalsausprägungen zurück Gibt die Kovarianz zurück, den Mittelwert der für alle Datenpunktpaare gebildeten Produkte der Abweichungen Gibt die Kovarianz einer Stichprobe zurück, d. h. den Mittelwert der für alle Datenpunktpaare gebildeten Produkte der Abweichungen Gibt Werte der Verteilungsfunktion einer lognormalverteilten Zufallsvariablen zurück Gibt den größten Wert in einer Liste mit Argumenten zurück. Dazu zählen Zahlen, Text und Wahrheitswerte 117 Modellbasiertes Logistikmanagement FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG MAX MAX Gibt den größten Wert in einer Liste mit Argumenten zurück MEDIAN MEDIAN Gibt den Median der angegebenen Zahlen zurück MINA MINA Gibt den kleinsten Wert in einer Liste mit Argumenten zurück. Dazu zählen Zahlen, Text und Wahrheitswerte MIN MIN Gibt den kleinsten Wert in einer Liste mit Argumenten zurück MITTELABW AVEDEV MITTELWERTA AVERAGEA MITTELWERT AVERAGE MITTELWERT WENN AVERAGEIF MITTELWERT WENNS AVERAGEIFS MODUS.EINF MODE.SNGL MODUS.VIELF MODE.MULT NEGBINOM.VERT NEGBINOM.DIST NORM.INV NORM.INV 118 Gibt die durchschnittliche absolute Abweichung von Datenpunkten von ihrem Mittelwert zurück Gibt den Mittelwert der zugehörigen Argumente zurück. Dazu gehören Zahlen, Text und Wahrheitswerte Gibt den Mittelwert der zugehörigen Argumente zurück Gibt den Durchschnittswert (arithmetisches Mittel) für alle Zellen in einem Bereich, die einem angegebenen Kriterium entsprechen, zurück Gibt den Durchschnittswert (arithmetisches Mittel) aller Zellen zurück, die mehreren Kriterien entsprechen Gibt den am häufigsten vorkommenden Wert in einer Datengruppe zurück Gibt ein vertikales Array der am häufigsten vorkommenden oder wiederholten Werte in einem Array oder Datenbereich zurück Gibt Wahrscheinlichkeiten einer negativbinomialverteilten Zufallsvariablen zurück Gibt Quantile der Normalverteilung zurück Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) NORM.S.INV NORM.S.INV BESCHREIBUNG Gibt Quantile der Standardnormalverteilung zurück Gibt Wahrscheinlichkeiten einer standardnormalverteilten Zufallsvariablen zurück Gibt Wahrscheinlichkeiten einer normalverteilten Zufallsvariablen zurück NORM.S.VERT NORM.S.DIST NORM.VERT NORM.DIST PEARSON PEARSON Gibt den Pearsonschen Korrelationskoeffizienten zurück POISSON.VERT POISSON.DIST Gibt Wahrscheinlichkeiten einer Poisson-verteilten Zufallsvariablen zurück PROGNOSE PROGNOSE Gibt einen Wert zurück, der sich aus einem linearen Trend ergibt QUANTIL.EXKL PERCENTILE.EXC Gibt das k-Quantil von Werten in einem Bereich zurück, wobei k im Bereich von 0..1 ausschließlich liegt QUANTIL.INKL PERCENTILE.INC Gibt das k-Quantil von Werten in einem Bereich zurück QUANTILSRANG. EXKL QUANTILSRANG. EXKL QUANTILSRANG. INKL QUANTILSRANG. INKL QUARTILE.EXKL QUARTILE.EXC QUARTILE.INKL QUARTILE.INC RANG.GLEICH RANK.EQ RANG.MITTELW RANK.AVG Gibt den prozentualen (0..1 ausschließlich) Rang (Alpha) eines Werts in einem Datenset zurück Gibt den prozentualen Rang (Alpha) eines Werts in einer Gruppe von Daten zurück Gibt die Quartile eines Datensets zurück, basierend auf Perzentilwerten von 0..1 ausschließlich Gibt die Quartile einer Datengruppe zurück Gibt den Rang zurück, den eine Zahl innerhalb einer Liste von Zahlen einnimmt Gibt die durchschnittliche Rangzahl zurück, den eine Zahl innerhalb einer Liste von Zahlen einnimmt 119 Modellbasiertes Logistikmanagement FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG RGP LINEST Gibt die Parameter eines linearen Trends zurück RKP LOGEST Gibt die Parameter eines exponentiellen Trends zurück SCHIEFE SKEW Gibt die Schiefe einer Verteilung zurück STABW.N STDEV.P Berechnet die Standardabweichung auf der Grundlage der Grundgesamtheit STABW.S STDEV.S Schätzt die Standardabweichung ausgehend von einer Stichprobe Schätzt die Standardabweichung ausgehend von einer Stichprobe, die Zahlen, Text und Wahrheitswerte enthält Berechnet die Standardabweichung auf der Grundlage der Grundgesamtheit, die Zahlen, Text und Wahrheitswerte enthält STABWA STDEVA STABWNA STDEVPA STANDARDISIERUNG STANDARDIZE Gibt einen standardisierten Wert zurück STEIGUNG SLOPE Gibt die Steigung der linearen Regressionsgeraden zurück STFEHLERYX STEYX Gibt den Standardfehler der geschätzten y-Werte für alle xWerte der Regression zurück SUMQUADABW DEVSQ Gibt die Summe von quadrierten Abweichungen zurück T.INV.2S T.INV.2T Gibt die zweiseitigen Quantile der (Student) t-Verteilung zurück T.INV T.INV Gibt den t-Wert der Student-TVerteilung als Funktion der Wahrscheinlichkeit und der Freiheitsgrade zurück T.TEST T.TEST Gibt die Teststatistik eines Student'schen t-Tests zurück 120 Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG Gibt die Prozentpunkte (Wahrscheinlichkeit) für die (Student) t-Verteilung für zwei Endflächen zurück Gibt Werte der Verteilungsfunktion (1-Alpha) einer (Student) tverteilten Zufallsvariablen zurück Gibt die Prozentpunkte (Wahrscheinlichkeit) für die (Student) t-Verteilung zurück T.VERT.2S T.DIST.2T T.VERT.RE T.DIST.RT T.VERT T.DIST TREND TREND Gibt Werte zurück, die sich aus einem linearen Trend ergeben VAR.P VAR.P Berechnet die Varianz auf der Grundlage der Grundgesamtheit VAR.S VAR.S Schätzt die Varianz auf der Grundlage einer Stichprobe VARIANZA VARA VARIANZENA VARPA VARIATIONEN PERMUT VARIATION GROWTH WAHRSCHBEREICH PROB WEIBULL.VERT WEIBULL.DIST ZÄHLENWENN COUNTIF ZÄHLENWENNS COUNTIFS Schätzt die Varianz ausgehend von einer Stichprobe, die Zahlen, Text und Wahrheitswerte enthält Berechnet die Varianz auf der Grundlage einer Grundgesamtheit, die Zahlen, Text und Wahrheitswerte enthält Gibt die Anzahl der Permutationen für eine bestimmte Anzahl von Objekten zurück Gibt Werte zurück, die sich aus einem exponentiellen Trend ergeben Gibt die Wahrscheinlichkeit für ein von zwei Werten eingeschlossenes Intervall zurück Gibt Wahrscheinlichkeiten einer Weibull-verteilten Zufallsvariablen zurück Die Zellen eines Bereichs, deren Inhalte mit den Suchkriterien übereinstimmen, werden gezählt Die Zellen eines Bereichs, deren Inhalte mit mehreren Kriterien übereinstimmen, werden gezählt Tabelle: Statistische Funktionen 121 Modellbasiertes Logistikmanagement C.8 Konstruktionsfunktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG BESSELI BESSELI Gibt die geänderte Besselfunktion In(x) zurück BESSELJ BESSELJ Gibt die Besselfunktion Jn(x) zurück BESSELK BESSELK Gibt die geänderte Besselfunktion Kn(x) zurück BESSELY BESSELY Gibt die Besselfunktion Yn(x) zurück Wandelt eine binäre Zahl (Dualzahl) in eine dezimale Zahl um Wandelt eine binäre Zahl (Dualzahl) in eine hexadezimale Zahl um BININDEZ BIN2DEC BININHEX BIN2HEX BININOKT BIN2OCT Wandelt eine binäre Zahl (Dualzahl) in eine oktale Zahl um DELTA DELTA Überprüft, ob zwei Werte gleich sind DEZINBIN DEC2BIN Wandelt eine dezimale Zahl in eine binäre Zahl (Dualzahl) um DEZINHEX DEC2HEX Wandelt eine dezimale Zahl in eine hexadezimale Zahl um DEZINOKT DEC2OCT Wandelt eine dezimale Zahl in eine oktale Zahl um GAUSSF.GENAU ERF.PRECISE Gibt die Fehlerfunktion zurück GAUSSFEHLER ERF Gibt die Fehlerfunktion zurück GAUSSFKOMPL.GENA ERFC.PRECISE U 122 Gibt das Komplement zur GAUSZschen Fehlerfunktion integriert zwischen x und Unendlichkeit zurück Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG GAUSSFKOMPL ERFC Gibt das Komplement zur GAUSZschen Fehlerfunktion zurück GGANZZAHL GESTEP Überprüft, ob eine Zahl größer als ein gegebener Schwellenwert ist HEXINBIN HEX2BIN Wandelt eine hexadezimale Zahl in eine binäre Zahl (Dualzahl) um HEXINDEZ HEX2DEC Wandelt eine hexadezimale Zahl in eine dezimale Zahl um HEXINOKT HEX2OCT Wandelt eine hexadezimale Zahl in eine Oktalzahl um IMABS IMABS Gibt den Absolutbetrag (Modulo) einer komplexen Zahl zurück IMAGINÄRTEIL IMAGINARY Gibt den Imaginärteil einer komplexen Zahl zurück IMAPOTENZ IMPOWER Potenziert eine komplexe Zahl mit einer ganzen Zahl IMARGUMENT IMARGUMENT Gibt das Argument Theta zurück, einen Winkel im Bogenmaß IMCOS IMCOS Gibt den Cosinus einer komplexen Zahl zurück IMDIV IMDIV Gibt den Quotienten zweier komplexer Zahlen zurück IMEXP IMEXP Gibt die algebraische Form einer in exponentieller Schreibweise vorliegenden komplexen Zahl zurück IMKONJUGIERTE IMCONJUGATE Gibt die konjugierte komplexe Zahl zu einer komplexen Zahl zurück IMLN IMLN Gibt den natürlichen Logarithmus einer komplexen Zahl zurück IMLOG10 IMLOG10 Gibt den Logarithmus einer komplexen Zahl zur Basis 10 zurück 123 Modellbasiertes Logistikmanagement FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG IMLOG2 IMLOG2 Gibt den Logarithmus einer komplexen Zahl zur Basis 2 zurück IMPRODUKT IMPRODUCT Gibt das Produkt von 2 bis 255 komplexen Zahlen zurück IMREALTEIL IMREAL Gibt den Realteil einer komplexen Zahl zurück IMSIN IMSIN Gibt den Sinus einer komplexen Zahl zurück IMSUB IMSUB Gibt die Differenz zwischen zwei komplexen Zahlen zurück IMSUMME IMSUM Gibt die Summe von komplexen Zahlen zurück IMWURZEL IMSQRT Gibt die Quadratwurzel einer komplexen Zahl zurück KOMPLEXE COMPLEX Wandelt den Real- und Imaginärteil in eine komplexe Zahl um OKTINBIN OCT2BIN Wandelt eine oktale Zahl in eine binäre Zahl (Dualzahl) um OKTINDEZ OCT2DEC Wandelt eine oktale Zahl in eine dezimale Zahl um OKTINHEX OCT2HEX Wandelt eine oktale Zahl in eine hexadezimale Zahl um UMWANDELN CONVERT Wandelt eine Zahl von einem Maßsystem in ein anderes um Tabelle: Konstruktionsfunktionen C.9 124 Cubefunktionen Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG Gibt den Wert einer Elementeigenschaft im Cube zurück. Wird verwendet, um zu überprüfen, ob ein Elementname im Cube vorhanden ist, und um die für dieses Element angegebene Eigenschaft zurückzugeben. Gibt ein Element oder ein Tuple in einem Cube zurück. Wird verwendet, um zu überprüfen, ob das Element oder Tuple im Cube vorhanden ist. Gibt die Eigenschaft eines Key Performance Indicators (KPI) zurück und zeigt den KPI-Namen in der Zelle an. Ein KPI ist ein quantifizierbares Maß, wie z. B. der monatliche Bruttogewinn oder die vierteljährliche Mitarbeiterfluktuation, mit dessen Hilfe das Leistungsverhalten eines Unternehmens überwacht werden kann. Definiert eine berechnete Menge Elemente oder Tupeln durch Senden eines Mengenausdrucks an den Cube auf dem Server, der die Menge erstellt und an Microsoft Office Excel zurückgibt CUBEELEMENT EIGENSCHAFT CUBEMEMBER PROPERTY CUBEELEMENT CUBEMEMBER CUBEKPI ELEMENT CUBEKPIMEMBER CUBEMENGE CUBESET CUBE MENGENANZAHL CUBESETCOUNT Gibt die Anzahl der Elemente in einer Menge zurück CUBE RANGELEMENT CUBE RANKEDMEMBER Gibt das n-te oder n-rangige Element in einer Menge zurück. Wird verwendet, um mindestens ein Element in einer Menge zurückzugeben, wie z. B. bester Vertriebsmitarbeiter oder 10 beste Kursteilnehmer. CUBEWERT CUBEVALUE Gibt einen Aggregatwert aus dem Cube zurück Tabelle: Cubefunktionen 125 Modellbasiertes Logistikmanagement C.10 Informationsfunktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG FEHLER.TYP ERROR.TYPE Gibt eine Zahl zurück, die einem Fehlertyp entspricht INFO INFO Gibt Informationen zur aktuellen Betriebssystemumgebung zurück ISTBEZUG ISREF Gibt WAHR zurück, wenn der Wert ein Bezug ist ISTFEHLER ISERROR Gibt WAHR zurück, wenn der Wert ein beliebiger Fehlerwert ist ISTFEHL ISERR Gibt WAHR zurück, wenn der Wert ein beliebiger Fehlerwert außer #NV ist ISTGERADE ISEVEN Gibt WAHR zurück, wenn die Zahl gerade ist ISTKTEXT ISNONTEXT Gibt WAHR zurück, wenn der Wert kein Text ist ISTLEER ISBLANK Gibt WAHR zurück, wenn der Wert leer ist ISTLOG ISLOGICAL Gibt WAHR zurück, wenn der Wert ein Wahrheitswert ist ISTNV ISNA Gibt WAHR zurück, wenn der Wert der Fehlerwert #NV ist ISTTEXT ISTEXT Gibt WAHR zurück, wenn der Wert ein Text ist ISTUNGERADE ISODD Gibt WAHR zurück, wenn die Zahl ungerade ist ISTZAHL ISNUMBER Gibt WAHR zurück, wenn der Wert eine Zahl ist N N Gibt einen Wert zurück, der in eine Zahl umgewandelt wurde 126 Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG NV NA Gibt den Fehlerwert #NV zurück TYP TYPE Gibt eine Zahl zurück, die den Datentyp eines Werts angibt ZELLE CELL Gibt Informationen zur Formatierung, zur Position oder zum Inhalt einer Zelle zurück Tabelle: Informationsfunktionen C.11 Datenbankfunktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG DBANZAHL2 DCOUNTA Zählt nicht leere Zellen in einer Datenbank DBANZAHL DCOUNT Zählt die Zellen mit Zahlen in einer Datenbank DBAUSZUG DGET Extrahiert aus einer Datenbank einen einzelnen Datensatz, der den angegebenen Kriterien entspricht DBMAX DMAX Gibt den größten Wert aus ausgewählten Datenbankeinträgen zurück DBMIN DMIN Gibt den kleinsten Wert aus ausgewählten Datenbankeinträgen zurück DBMITTELWERT DAVERAGE Gibt den Mittelwert der ausgewählten Datenbankeinträge zurück DBPRODUKT DPRODUCT DBSTDABW DSTDEV Multipliziert die Werte in einem bestimmten Feld mit Datensätzen, die den Kriterien in einer Datenbank entsprechen Schätzt die Standardabweichung auf der Grundlage einer Stichprobe aus ausgewählten Datenbankeinträgen 127 Modellbasiertes Logistikmanagement DBSTDABWN DSTDEVP DBSUMME DSUM DBVARIANZEN DVARP DBVARIANZ DVAR Berechnet die Standardabweichung auf der Grundlage der Grundgesamtheit ausgewählter Datenbankeinträge Addiert die Zahlen in der Feldspalte mit Datensätzen in der Datenbank, die den Kriterien entsprechen Berechnet die Varianz auf der Grundlage der Grundgesamtheit ausgewählter Datenbankeinträge Schätzt die Varianz auf der Grundlage ausgewählter Datenbankeinträge Tabelle: Datenbankfunktionen C.12 Kompatibilitätsfunktionen Es handelt sich hier um Funktionen, die aus Gründen der Kompatibilität mit früheren Excel-Versionen noch implementiert sind. FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG BETAINV BETAINV Gibt Quantile der kumulierten Verteilungsfunktion für ein bestimmte Betaverteilung zurück BETAVERT BETADIST Gibt die Werte der kumulierten Betaverteilungsfunktion zurück BINOMVERT BINOMDIST CHIINV CHIINV CHITEST CHITEST CHIVERT CHIDIST EXPONVERT EXPONDIST 128 Gibt Wahrscheinlichkeiten einer binominalverteilten Zufallsvariablen zurück Gibt Quantile der Verteilungsfunktion (1-Alpha) der Chi-Quadrat-Verteilung zurück Gibt die Teststatistik eines Unabhängigkeitstests zurück Gibt Werte der Verteilungsfunktion (1-Alpha) einer Chi-Quadratverteilten Zufallsgröße zurück Gibt Wahrscheinlichkeiten einer exponentialverteilten Zufallsvariablen zurück Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG FINV FINV Gibt Quantile der F-Verteilung zurück FTEST FTEST Gibt die Teststatistik eines F-Tests zurück FVERT FDIST Gibt Werte der Verteilungsfunktion (1-Alpha) einer F-verteilten Zufallsvariablen zurück GAMMAINV GAMMAINV Gibt Quantile der Gammaverteilung zurück GAMMAVERT GAMMADIST GTEST ZTEST HYPGEOMVERT HYPGEOMDIST KONFIDENZ CONFIDENCE KOVAR COVAR KRITBINOM CRITBINOM LOGINV LOGINV LOGNORMVERT LOGNORMDIST MODALWERT MODE Gibt Wahrscheinlichkeiten einer gammaverteilten Zufallsvariablen zurück Gibt den einseitigen Wahrscheinlichkeitswert für einen GAUSZtest (Normalverteilung) zurück Gibt Wahrscheinlichkeiten einer hypergeometrisch-verteilten Zufallsvariablen zurück Gibt das 1-Alpha Konfidenzintervall für den Erwartungswert einer Zufallsvariablen zurück Gibt die Kovarianz zurück, den Mittelwert der für alle Datenpunktpaare gebildeten Produkte der Abweichungen Gibt den kleinsten Wert zurück, für den die kumulierten Wahrscheinlichkeiten der Binomialverteilung kleiner oder gleich einer Grenzwahrscheinlichkeit sind Gibt Perzentile der Lognormalverteilungsfunktion zurück Gibt Werte der Verteilungsfunktion einer lognormalverteilten Zufallsvariablen zurück Gibt den am häufigsten vorkommenden Wert in einer Datengruppe zurück 129 Modellbasiertes Logistikmanagement FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG NEGBINOMVERT NEGBINOMDIST Gibt Wahrscheinlichkeiten einer negativbinomialverteilten Zufallsvariablen zurück NORMINV NORMINV Gibt Quantile der Normalverteilung zurück NORMVERT NORMDIST NORMSVERT NORMSDIST POISSON POISSON QUANTIL PERCENTILE Gibt das k-Quantil von Werten in einem Bereich zurück QUANTILSRANG PERCENTRANK Gibt den prozentualen Rang (Alpha) eines Werts in einer Gruppe von Daten zurück QUARTILE QUARTILE Gibt die Quartile einer Datengruppe zurück RANG RANK Gibt den Rang zurück, den eine Zahl innerhalb einer Liste von Zahlen einnimmt STABW STDEV Schätzt die Standardabweichung ausgehend von einer Stichprobe STABWN STDEVP Berechnet die Standardabweichung auf der Grundlage der Grundgesamtheit STANDNORMINV NORMSINV Gibt Quantile der Standardnormalverteilung zurück TINV TINV Gibt Quantile der (Student) tVerteilung zurück TTEST TTEST Gibt die Teststatistik eines Studentschen t-Tests zurück TDIST Gibt Werte der Verteilungsfunktion (1-Alpha) einer (Student) tverteilten Zufallsvariablen zurück TVERT 130 Gibt Wahrscheinlichkeiten einer normalverteilten Zufallsvariablen zurück Gibt Wahrscheinlichkeiten einer standardnormalverteilten Zufallsvariablen zurück Gibt Wahrscheinlichkeiten einer Poisson-verteilten Zufallsvariablen zurück Übersicht über die Excel-Funktionen FUNKTION FUNCTION (DEUTSCH) (ENGL.) BESCHREIBUNG VARIANZEN VARP Berechnet die Varianz auf der Grundlage der Grundgesamtheit VARIANZ VAR Schätzt die Varianz auf der Grundlage einer Stichprobe WEIBULL WEIBULL Gibt Wahrscheinlichkeiten einer Weibull-verteilten Zufallsvariablen zurück Tabelle: Kompatibilitätsfunktionen C.13 Add-ins und Automatisierung FUNKTION FUNCTION (DEUTSCH) (ENGL.) AUFRUFEN CALL EUROCONVERT EUROCONVERT REGISTER REGISTER REGISTER.KENNUMM ER REGISTER.ID SQL.REQUEST SQL.REQUEST BESCHREIBUNG Eine Prozedur in einer DLL (Dynamic Link Library) oder CodeRessource wird aufgerufen Wandelt eine Zahl in Euro oder von Euro in die Währung eines Mitgliedsstaats oder von der Währung eines EuroMitgliedsstaats in die Währung eines anderen Mitgliedsstaats um, indem der Euro als Zwischenwert verwendet wird (Triangulieren) Die REGISTER() XLM Funktion erzeugt einen definierten Namen und verweist darauf über eine externe dll basierte Funktion Gibt die Registrierkennung der angegebenen DLL bzw. der vorher registrierten Code-Ressource zurück Stellt Verbindung mit einer externen Datenquelle her und führt Abfrage aus, die sich auf einem Tabellenblatt befindet. Gibt das Ergebnis dann als Matrix zurück, ohne Makro Programmierung. Tabelle: Add-ins und Automatisierung 131 Modellbasiertes Logistikmanagement D Übersicht über die wichtigsten Excel-Objekte D.1 Die Das Application-Objekt detaillierte Syntax nebst Beispielen findet Objektmodellreferenz in der Excel-Hilfe für Entwickler D.1.1 man unter der Excel- Application-Object. Eigenschaften Es folgt eine Liste der wichtigsten Eigenschaften eines Application-Objekts: EIGENSCHAFT BESCHREIBUNG ActiveCell Gibt das Range-Objekt zurück, das die aktive Zelle darstellt. ActivePrinter Gibt den Namen des aktiven Druckers zurück oder legt ihn fest. ActiveSheet Gibt das aktuelle Sheet-Objekt zurück ActiveWindow Gibt ein Window-Objekt zurück, welches das aktive Fenster darstellt. ActiveWorkbook Gibt ein Workbook-Objekt zurück, das die Arbeitsmappe im aktiven Fenster darstellt. Cells Gibt ein Range-Objekt zurück, das alle Zellen des aktiven Arbeitsblattes darstellt. Dialogs Gibt eine Dialogs-Auflistung aller internen Dialogfelder zurück, z.B. Datei-öffnen, -speicher, -drucken. Name Gibt den Namen der Anwendung zurück. Names Gibt eine Names-Auflistung aller Namen (z.B. der benannten Zellen) der aktiven Arbeitsmappe zurück. Parent Gibt das übergeordnete Objekt zurück. 132 Übersicht über die wichtigsten Excel-Objekte EIGENSCHAFT BESCHREIBUNG Path Gibt den vollständigen Pfad der Anwendung zurück ohne das abschließende Trennzeichen und den Namen der Anwendung. Range Gibt ein Range-Objekt zurück, das eine Zelle oder einen Zellbereich des aktiven Arbeitsblatts darstellt. Sheets Gibt eine Sheets-Auflistung zurück, die alle Blätter in der aktiven Arbeitsmappe darstellt. Windows Gibt eine Windows-Auflistung aller Fenster zurück. Workbooks Gibt eine Workbooks-Auflistung zurück, die alle geöffneten Arbeitsmappen darstellt. Worksheets Gibt eine Worksheets-Auflistung zurück, die alle Arbeitsblätter der aktiven Arbeitsmappe darstellt. Tabelle: Eigenschaften des Application-Objekts D.1.2 Methoden Die wichtigsten Methoden eines Application-Objekts sind nachfolgend aufgelistet: METHODE BESCHREIBUNG Calculate Neue Berechnung aller geöffneten Arbeitsmappen, ein bestimmtes Arbeitsblatt oder einen bestimmten Zellbereich. CalculateFull Erzwingt eine vollständige Berechnung der Daten in allen geöffneten Arbeitsmappen. Tabelle: Methoden des Application-Objekts D.1.3 Ereignisse Die Ereignisse des Application-Objekts sind wie folgt: 133 Modellbasiertes Logistikmanagement EREIGNIS BESCHREIBUNG AfterCalculate Das AfterCalculate-Ereignis tritt auf, wenn alle ausstehenden Aktualisierungsvorgänge (synchron und asynchron) und alle sich daraus ergebenden Berechnungen abgeschlossen wurden. NewWorkbook Tritt auf, wenn eine neue Arbeitsmappe erstellt wird. ProtectedViewWindow Activate Tritt auf, wenn ein Fenster Geschützte Ansicht aktiviert wird. ProtectedViewWindow BeforeClose ProtectedViewWindow BeforeEdit Tritt unmittelbar vor dem Schließen eines Fensters Geschützte Ansicht oder einer Arbeitsmappe in einer geschützten Ansicht auf. Tritt unmittelbar vor dem Aktivieren der Bearbeitung für die Arbeitsmappe im angegebenen Fenster Geschützte Ansicht auf. ProtectedViewWindow Deactivate Tritt auf, wenn ein Fenster Geschützte Ansicht deaktiviert wird. ProtectedViewWindow Open Tritt auf, wenn eine Arbeitsmappe in einem Fenster Geschützte Ansicht geöffnet wird. ProtectedViewWindow Resize Tritt auf, wenn die Größe eines Fensters Geschützte Ansicht geändert wird. SheetActivate Tritt auf, wenn ein beliebiges Blatt aktiviert wird. SheetBefore DoubleClick Tritt auf, wenn vor der Standarddoppelklick-Aktion auf ein beliebiges Arbeitsblatt doppelgeklickt wird. SheetBefore RightClick SheetCalculate SheetChange Tritt auf, wenn vor der Standardrechtsklick-Aktion mit der rechten Maustaste auf ein beliebiges Arbeitsblatt geklickt wird. Tritt nach Neuberechnung jedes Arbeitsblatts auf oder wenn beliebige geänderte Daten in einem Diagramm gezeichnet werden. Tritt auf, wenn Zellen auf einem beliebigen Arbeitsblatt durch den Benutzer oder durch eine externe Verknüpfung geändert werden. SheetDeactivate Tritt auf, wenn ein beliebiges Blatt deaktiviert wird. SheetFollowHyperlink Tritt auf, wenn Sie in Microsoft Excel auf einen beliebigen Hyperlink klicken. Weitere Informationen zu Ereignissen auf Arbeitsblattebene finden Sie im Hilfethema zum Worksheet.FollowHyperlink-Ereignis. 134 Übersicht über die wichtigsten Excel-Objekte EREIGNIS BESCHREIBUNG SheetPivotTable AfterValueChange Tritt nach der Bearbeitung oder Neuberechnung (bei Zellen, die Formeln enthalten) einer Zelle oder eines Zellbereichs in einer PivotTable auf. SheetPivotTable BeforeAllocateChanges Tritt auf, bevor Änderungen auf eine PivotTable angewendet werden. SheetPivotTable BeforeCommitChanges Tritt auf, bevor für Änderungen an der OLAP-Datenquelle für eine PivotTable ein Commit ausgeführt wird. SheetPivotTable BeforeDiscardChanges Tritt auf, bevor Änderungen an einer PivotTable verworfen werden. SheetPivotTableUpdate Tritt auf, nachdem das Blatt des PivotTable-Berichts aktualisiert wurde. SheetSelectionChange Tritt auf, wenn sich die Markierung auf einem Arbeitsblatt ändert (tritt nicht auf, wenn sich die Markierung auf einem Diagrammblatt befindet). WindowActivate Tritt auf, wenn ein Arbeitsmappen-Fenster aktiviert wird. WindowDeactivate Tritt auf, wenn ein Arbeitsmappen-Fenster deaktiviert wird. WindowResize Tritt auf, wenn die Größe eines Arbeitsmappen-Fensters angepasst wird. WorkbookActivate Tritt auf, wenn eine Arbeitsmappe aktiviert wird. WorkbookAddinInstall Tritt auf, wenn eine Arbeitsmappe als Add-In installiert wird. WorkbookAddinUninstall Tritt auf, wenn eine Add-In-Arbeitsmappe deinstalliert wird. WorkbookAfterSave Tritt auf, nachdem die Arbeitsmappe gespeichert wurde. WorkbookAfterXmlExport WorkbookAfterXmlImport Tritt auf, nachdem von Microsoft Excel XML-Daten aus der angegebenen Arbeitsmappe gespeichert oder exportiert wurden. Tritt auf, nachdem eine bestehende XMLDatenverbindung aktualisiert wurde oder neue XMLDaten in eine geöffnete Microsoft Excel-Arbeitsmappe importiert wurden. 135 Modellbasiertes Logistikmanagement EREIGNIS BESCHREIBUNG WorkbookBeforeClose Tritt direkt vor dem Schließen einer geöffneten Arbeitsmappe auf. WorkbookBeforePrint Tritt auf, bevor eine Arbeitsmappe gedruckt wird. WorkbookBeforeSave Tritt auf, bevor eine geöffnete Arbeitsmappe gespeichert wird. Workbook BeforeXmlExport Workbook BeforeXmlImport Tritt auf, bevor XML-Daten aus der angegebenen Arbeitsmappe von Microsoft Excel gespeichert oder exportiert werden. Tritt auf, bevor eine bestehende XML-Datenverbindung aktualisiert wird oder neue XML-Daten in eine geöffnete Microsoft Excel-Arbeitsmappe importiert werden. WorkbookDeactivate Tritt auf, wenn eine geöffnete Arbeitsmappe deaktiviert wird. WorkbookNewChart Tritt auf, wenn in einer geöffneten Arbeitsmappe ein neues Diagramm erstellt wird. WorkbookNewSheet Tritt auf, wenn in einer geöffneten Arbeitsmappe ein neues Blatt erstellt wird. WorkbookOpen Tritt auf, wenn eine Arbeitsmappe geöffnet wird. WorkbookPivotTable CloseConnection Tritt auf, nachdem die Verbindung zu einem PivotTableBericht geschlossen wurde. WorkbookPivotTable OpenConnection Tritt auf, nachdem eine Verbindung eines PivotTableBerichts geöffnet wurde. WorkbookRowset Complete WorkbookSync Das WorkbookRowsetComplete-Ereignis tritt auf, wenn der Benutzer einen Drillthrough durch das Recordset ausführt oder die Rowset-Aktion für eine OLAPPivotTable aufruft. Tritt auf, wenn die lokale Kopie einer Arbeitsmappe, die Teil eines Dokumentarbeitsbereichs ist, mit der Kopie auf dem Server synchronisiert wird. Tabelle: Ereignisse des Application-Objekts 136 Übersicht über die wichtigsten Excel-Objekte D.2 Das Workbook-Objekt Die detaillierte Syntax nebst Beispielen findet Objektmodellreferenz in der Excel-Hilfe für Entwickler D.2.1 man unter der Excel- Workbook-Object. Eigenschaften Die wichtigsten Eigenschaften eines Workbook-Objekts sind wie folgt: EIGENSCHAFT BESCHREIBUNG ActiveSheet Gibt das aktuelle (aktive) Arbeitsblatt zurück. Name Gibt den Namen der Arbeitsmappe zurück oder legt ihn fest. Names Gibt eine Names-Auflistung aller Namen der Arbeitsmappe zurück, z. B. benannte Zellen. Parent Gibt das übergeordnete Objekt zurück (Application-Objekt). Path Gibt den vollständigen Pfad der Arbeitsmappe/ Datei zurück. Saved Hat den Zustand True, wenn die Arbeitsmappe seit dem letzten Speichern nicht geändert wurde. Sheets Gibt eine Sheets-Auflistung zurück, die alle Blätter der Arbeitsmappe darstellt (Tabellen und Diagramme). ThisWorkbook Gibt ein Workbook-Objekt zurück, das die aktuelle Arbeitsmappe darstellt. Worksheets Gibt eine Sheets-Auflistung zurück, die alle Blätter der Arbeitsmappe darstellt (Tabellen). Tabelle: Eigenschaften des Workbook-Objekts D.2.2 Methoden Die wichtigsten Methoden eines Workbook-Objekts sind wie folgt: 137 Modellbasiertes Logistikmanagement METHODE BESCHREIBUNG Activate Aktiviert eine einzelne Arbeitsmappe. Close Schließt eine einzelne Arbeitsmappe. PrintOut Druckt die Arbeitsmappe. Save Speichert die Änderungen der Arbeitsmappe. Tabelle: Methoden des Workbook-Objekts D.2.3 Ereignisse Die Ereignisse des Workbook-Objekts sind wie folgt: EREIGNIS BESCHREIBUNG Activate Tritt auf, wenn eine Arbeitsmappe, ein Arbeitsblatt, ein Diagrammblatt oder ein eingebettetes Diagramm aktiviert wird. AddinInstall Tritt auf, wenn die Arbeitsmappe als Add-In installiert wird. AddinUninstall Tritt auf, wenn die Arbeitsmappe als Add-In deinstalliert wird. AfterSave Tritt auf, nachdem die Arbeitsmappe gespeichert wurde. AfterXmlExport AfterXmlImport BeforeClose 138 Tritt auf, nachdem von Microsoft Excel XML-Daten aus der angegebenen Arbeitsmappe gespeichert oder exportiert wurden. Tritt auf, nachdem eine bestehende XML-Datenverbindung aktualisiert wurde oder neue XML-Daten in eine geöffnete Microsoft Excel-Arbeitsmappe importiert wurden. Tritt auf, bevor die Arbeitsmappe geschlossen wird. Wurde die Arbeitsmappe geändert, tritt dieses Ereignis ein, bevor der Benutzer gefragt wird, ob die Änderungen gespeichert werden sollen. Übersicht über die wichtigsten Excel-Objekte EREIGNIS BESCHREIBUNG BeforePrint Tritt auf, bevor die Arbeitsmappe (oder darin enthaltene Teile) gedruckt wird. BeforeSave Tritt auf, bevor die Arbeitsmappe gespeichert wird. BeforeXmlExport BeforeXmlImport Tritt auf, bevor XML-Daten aus der angegebenen Arbeitsmappe von Microsoft Excel gespeichert oder exportiert werden. Tritt auf, bevor eine bestehende XML-Datenverbindung aktualisiert wird oder neue XML-Daten in eine geöffnete Microsoft Excel-Arbeitsmappe importiert werden. Deactivate Tritt auf, wenn das Diagramm, das Arbeitsblatt oder die Arbeitsmappe deaktiviert wird. NewChart Tritt auf, wenn in einer Arbeitsmappe ein neues Diagramm erstellt wird. NewSheet Tritt auf, wenn in einer Arbeitsmappe ein neues Blatt erstellt wird. Open Tritt auf, wenn die Arbeitsmappe geöffnet wird. PivotTable CloseConnection Tritt auf, nachdem eine PivotTable ihre Verbindung zur Datenquelle geschlossen hat. PivotTable OpenConnection Tritt auf, nachdem eine PivotTable ihre Verbindung zur Datenquelle geöffnet hat. RowsetComplete Das Ereignis wird ausgelöst, wenn der Benutzer einen Drillthrough durch das Recordset ausführt oder die RowsetAktion für eine OLAP-PivotTable aufruft. SheetActivate Tritt auf, wenn ein beliebiges Blatt aktiviert wird. SheetBefore DoubleClick Tritt auf, wenn vor der Standarddoppelklick-Aktion auf ein beliebiges Arbeitsblatt doppelgeklickt wird. SheetBefore RightClick SheetCalculate Tritt auf, wenn vor der Standardrechtsklick-Aktion mit der rechten Maustaste auf ein beliebiges Arbeitsblatt geklickt wird. Tritt nach Neuberechnung jedes Arbeitsblatts auf oder wenn beliebige geänderte Daten in einem Diagramm gezeichnet werden. 139 Modellbasiertes Logistikmanagement EREIGNIS BESCHREIBUNG SheetChange Tritt auf, wenn Zellen auf einem beliebigen Arbeitsblatt durch den Benutzer oder durch eine externe Verknüpfung geändert werden. SheetDeactivate Tritt auf, wenn ein beliebiges Blatt deaktiviert wird. SheetFollow Hyperlink SheetPivotTable AfterValueChange SheetPivotTable Before AllocateChanges SheetPivotTable Before CommitChanges SheetPivotTable Before DiscardChanges Tritt auf, wenn Sie in Microsoft Excel auf einen beliebigen Hyperlink klicken. Weitere Informationen zu Ereignissen auf Arbeitsmappenebene finden Sie im Hilfethema zum Worksheet.FollowHyperlink-Ereignis. Tritt nach der Bearbeitung oder Neuberechnung (bei Zellen, die Formeln enthalten) einer Zelle oder eines Zellbereichs in einer PivotTable auf. Tritt auf, bevor Änderungen auf eine PivotTable angewendet werden. Tritt auf, bevor für Änderungen an der OLAP-Datenquelle für eine PivotTable ein Commit ausgeführt wird. Tritt auf, bevor Änderungen an einer PivotTable verworfen werden. SheetPivotTable ChangeSync Tritt nach Änderungen an einer PivotTable auf. SheetPivotTable Update Tritt auf, nachdem das Blatt des PivotTable-Berichts aktualisiert wurde. SheetSelection Change Tritt auf, wenn sich die Markierung auf einem Arbeitsblatt ändert (tritt nicht auf, wenn sich die Markierung auf einem Diagrammblatt befindet). Sync (veraltet) WindowActivate Tritt auf, wenn ein Arbeitsmappen-Fenster aktiviert wird. WindowDeactivate Tritt auf, wenn ein Arbeitsmappen-Fenster deaktiviert wird. WindowResize Tritt auf, wenn die Größe eines Arbeitsmappen-Fensters angepasst wird. Tabelle: Ereignisse des Workbook-Objekts 140 Übersicht über die wichtigsten Excel-Objekte D.3 Das Worksheet-Objekt Die detaillierte Syntax nebst Beispielen findet Objektmodellreferenz in der Excel-Hilfe für Entwickler D.3.1 man unter der Excel- Worksheet-Object. Eigenschaften Die wichtigsten Eigenschaften eines Worksheet-Objekts sind wie folgt: EIGENSCHAFT BESCHREIBUNG Application Wird der Objektkennzeichner nicht verwendet, gibt diese Eigenschaft ein Application-Objekt zurück, das die Anwendung Excel darstellt. Wird der Objektkennzeichner verwendet, wird ein ApplicationObjekt zurückgegeben, das den Ersteller des angegebenen Objekts darstellt. Dies kann z. B. beim Einsatz von OLEAutomatisierungsobjekten von Interesse sein. Cells Gibt ein Range-Objekt zurück, das alle Zellen auf dem Arbeitsblatt darstellt (nicht nur die derzeit verwendeten Zellen). Columns Gibt ein Range-Objekt zurück, das alle Spalten des aktiven Arbeitsblatts darstellt. Name Gibt den Namen der Tabelle zurück oder legt ihn fest. Names Gibt eine Names-Auflistung aller arbeitsblattspezifischen Namen (Namen mit dem Präfix "ArbeitsblattName!") zurück. Parent Gibt das übergeordnete Objekt zurück (Workbook-Objekt). Range Gibt ein Range-Objekt zurück, das eine Zelle oder einen Zellbereich darstellt (Zellenbereich innerhalb des Tabellenblatts). Rows Gibt ein Range-Objekt zurück, das alle Zeilen im aktiven Arbeitsblatt darstellt. UsedRange Gibt ein Range-Objekt zurück, das den verwendeten Bereich im aktiven Arbeitsblatt darstellt (benutzte Zellen). Tabelle: Eigenschaften des Worksheet-Objekts 141 Modellbasiertes Logistikmanagement D.3.2 Methoden Die wichtigsten Methoden eines Worksheet-Objekts sind wie folgt: METHODE BESCHREIBUNG Activate Aktiviert ein einzelnes Arbeitsblatt. Calculate Berechnet alle geöffneten Arbeitsmappen, ein bestimmtes Arbeitsblatt oder einen bestimmten Zellbereich neu. Select Markiert ein einzelnes Tabellenblatt. PrintOut Druckt das Tabellenblatt. Delete Löscht das Tabellenblatt aus der Arbeitsmappe Tabelle: Methoden des Worksheet-Objekts D.3.3 Ereignisse Die Ereignisse des Worksheet-Objekts sind wie folgt: EREIGNIS BESCHREIBUNG Activate Tritt auf, wenn eine Arbeitsmappe, ein Arbeitsblatt, ein Diagrammblatt oder ein eingebettetes Diagramm aktiviert wird. BeforeDoubleClick Tritt auf, wenn vor der Standarddoppelklick-Aktion auf ein Arbeitsblatt doppelgeklickt wird. BeforeRightClick Tritt auf, wenn vor Ausführung des Standardrechtsklicks mit der rechten Maustaste auf ein Arbeitsblatt geklickt wird. Calculate Tritt für das Worksheet-Objekt auf, nachdem das Arbeitsblatt neu berechnet wurde. Change Tritt auf, wenn Zellen des Arbeitsblatts durch den Benutzer oder durch eine externe Verknüpfung geändert werden. 142 Übersicht über die wichtigsten Excel-Objekte EREIGNIS Deactivate FollowHyperlink PivotTable AfterValueChange BESCHREIBUNG Tritt auf, wenn das Diagramm, das Arbeitsblatt oder die Arbeitsmappe deaktiviert wird. Tritt auf, wenn Sie auf einen beliebigen Hyperlink in einem Arbeitsblatt klicken. Weitere Informationen zu Ereignissen auf Anwendungs- und Arbeitsmappenebene finden Sie unter dem SheetFollowHyperlink-Ereignis und dem SheetFollowHyperlink Event-Ereignis. Tritt nach der Bearbeitung oder Neuberechnung (bei Zellen, die Formeln enthalten) einer Zelle oder eines Zellbereichs in einer PivotTable auf. PivotTable BeforeAllocateChanges Tritt auf, bevor Änderungen auf eine PivotTable angewendet werden. PivotTableBefore CommitChanges Tritt auf, bevor für Änderungen an der OLAP-Datenquelle für eine PivotTable ein Commit ausgeführt wird. PivotTableBefore DiscardChanges Tritt auf, bevor Änderungen an einer PivotTable verworfen werden. PivotTable ChangeSync Tritt nach Änderungen an einer PivotTable auf. PivotTableUpdate Tritt auf, nachdem ein PivotTable-Bericht für ein Arbeitsblatt aktualisiert wurde. SelectionChange Tritt auf, wenn sich die Markierung in einem Arbeitsblatt ändert. Tabelle: Ereignisse des Worksheet-Objekts 143 Modellbasiertes Logistikmanagement D.4 Das Range-Objekt Die detaillierte Syntax nebst Beispielen findet Objektmodellreferenz in der Excel-Hilfe für Entwickler D.4.1 man unter der Excel- Range-Object. Eigenschaften Die wichtigsten Eigenschaften eines Range-Objekts sind wie folgt: EIGENSCHAFT BESCHREIBUNG Address Gibt den Bezug eines Zellenbereichs zurück. Application Wird der Objektkennzeichner nicht verwendet, gibt diese Eigenschaft ein Application-Objekt zurück, das die Anwendung Excel darstellt. Wird der Objektkennzeichner verwendet, wird ein Application-Objekt zurückgegeben, das den Ersteller des angegebenen Objekts darstellt. Dies kann z. B. beim Einsatz von OLE-Automatisierungsobjekten von Interesse sein. Cells Gibt ein Range-Objekt zurück, relativ zum gewählten RangeObjekt. Column Gibt die erste Spalte am Anfang des angegebenen Bereichs als Zahl zurück. Count Gibt die Anzahl an Zellen im Range-Objekt zurück. Font Gibt ein Font-Objekt zurück, das die Schriftart des Range-Objekts darstellt. Formula Gibt die Formel des Range-Objekts zurück oder legt sie fest. Parent Gibt das übergeordnete Objekt zurück (Worksheet-Objekt). Row Gibt die erste Zeile am Anfang des angegebenen Bereichs zurück. Tabelle: Eigenschaften des Worksheet-Objekts 144 Übersicht über die wichtigsten Excel-Objekte D.4.2 Methoden Die wichtigsten Methoden eines Range-Objekts sind wie folgt: METHODE BESCHREIBUNG Activate Aktiviert eine einzelne Zelle, die sich innerhalb der aktuellen Markierung befindet. Calculate Berechnet alle geöffneten Arbeitsmappen, ein bestimmtes Arbeitsblatt oder einen bestimmten Zellbereich neu. Select Markiert eine Zelle oder einen Zellbereich. Tabelle: Methoden des Worksheet-Objekts D.4.3 Ereignisse Das Range-Objekt enthält keine Ereignisse. 145 Modellbasiertes Logistikmanagement Literaturverzeichnis Billo, Joseph E. (2007): Excel for Scientists and Engineers: Numerical Methods, John Wiley & Sons, New Jersey, ISBN 978-0-471-38734-3. Bloech, J.; Ihde, G.G. (1997): Vahlens Großes Logistiklexikon, Verlag Beck/Vahlen, München. Bourg, David M. (2006): Excel Scientific and Engineering Cookbook, O’Reilly Media, USA, ISBN 978-0-596-00879-6. Brambrink, Matthias (2009): Transportoptimierung und Tourenplanung unter Verwendung des Excel-Solvers, Diplomarbeit FB Wirtschaftsinformatik, Fachhochschule Dortmund. Brokamp, Oliver (2011): Heuristische Verfahren zur Tourenplanung mit Zeitfenstern unter Verwendung der Tabellenkalkulation, Bachelor Thesis, FB Wirtschaftsinformatik, Fachhochschule Dortmund. Can-Weber, Monika / Wendel, Tom (2010): Microsoft Excel 2010 Programmierung Das Handbuch - Entwicklung und Automatisierung mit VBA und XML, ISBN: 978-3-86645-460-6 Deininghaus, Julia; Holtkötter, Tobias; Paulsen, Björn (2012): Ein Crash Kurs in Excel VBA, Projektarbeit, Fachbereich Wirtschaftsinformatik, Fachhochschule Dortmund. Dijkstra, Edsger W. (1959): A note on two problems in connexion with graphs, Numerische Mathematik, 1:269-271. Domschke, Wolfgang (1997): Logistik: Transport, R. Oldenbourg Verlag, München, Wien, 5. Auflage. Domschke, Wolfgang (1985): Logistik: Rundreisen und Touren, R. Oldenbourg Verlag, München, Wien, 4. Auflage. Domschke, Wolfgang ; Drexl, Andreas (1996): Logistik: Standorte, R. Oldenbourg Verlag, München, Wien, 4. Auflage. 146 Übersicht über die wichtigsten Excel-Objekte Domschke, Wolfgang und Drexl, Andreas (2006): Einführung in Operations Research, 7. Auflage, Springer-Verlag, Berlin Heidelberg; ISBN 978-3-54070948-0. Domschke, W.; Drexl, A.; Klein, R.; Scholl, A. und Voß, S. (2002): Übungen und Fallbeispiele zum Operations Research, 4. Auflage, Springer-Verlag, Berlin Heidelberg; ISBN 3-540-43334-1. Feige, Dieter; Klaus, Peter (2008): Modellbasierte Entscheidungsunterstützung in der Logistik, Deutscher Verkehrs-Verlag, Hamburg. Gillett, B.E.; Miller, L.R. (1974): A Heuristic Algorithm for the Vehicle-Dispatch Problem, Operations Research 22, S. 340-349. Gogolok, Johannes (1999): VBA – Programmierung mit Excel: Grundlagen, Fernuniversität Hagen, Reihe: Integrierte Systeme. Held, Bernd (2004): Excel-VBA Die praktische Referenz, Markt + Technik Verlag, München, ISBN 978-3-8272-6745-0. Held, Bernd (2010a): Excel-VBA Kompendium, Markt + Technik Verlag, München, ISBN 978-3-8272-4534-2. Held, Bernd (2010b): Excel-VBA in 14 Tagen, Markt + Technik Verlag, München, ISBN 978-3-8272-4535-9. Kämper, Sabine (2009): Grundkurs Programmieren mit Visual Basic, Vieweg + Teubner Verlag, Wiesbaden (3. Auflage), ISBN 978-3-8348-0690-1. Müller-Mehrbach, Heiner (1971): Operations Research, Verlag Franz Vahlen, München (2. Auflage). Nahrstedt, Harald (2011): Excel + VBA für Maschinenbauer, Vieweg + Teubner Verlag, Wiesbaden (3. Auflage), ISBN 978-3-8348-1750-1. Nahrstedt, Harald (2012): Algorithmen für Ingenieure, Vieweg + Teubner Verlag, Wiesbaden (2. Auflage), ISBN 978-3-8348-1692-4. 147 Modellbasiertes Logistikmanagement Powell, Stephen G. / Baker, Kenneth R. (2007): The Art of Modeling with Spreadsheets: Management Science, Spreadsheet Engineering, and Modeling Craft, John Wiley & Sons, ISBN 0-470-03840-3, 2nd Edition. Ragsdale, Cliff.T. (2006): Spreadsheet Modeling and Decision Analysis, 5th Edition, South-Western College Publishing, ISBN 0-324-31256-3. Weicker, Karsten (2007): Evolutionäre Algorithmen, Vieweg Verlag, Wiesbaden (2. Auflage), ISBN 978-3-8351-0219-4. Wille, Christoph (2009): Operations Research mit Excel und VBA, VDM Verlag, Saarbrücken. Williams, H. Paul (1999): Model Building in Mathematical Programming; John Wiley & Sons; Chichester (4th Ed.). Winkels, Heinz-Michael (2012): Modellbasiertes Logistikmanagement mit Excel, Deutscher Verkehrs-Verlag, Hamburg, Edition Logistik Band 13; ISBN 978-3-87154-460-6. Winston, Wayne L.; Albright, S. Christian, (2006): Practical Management Science Spreadsheets Modeling and Applications, Duxberry Press, 3rd Edition. Die in dieser Arbeit verwendeten Landkarten sind unter Zuhilfenahme von „Google Maps“ entstanden. 148 Übersicht über die wichtigsten Excel-Objekte Stichwortverzeichnis A Anspruchsniveau ........................................................ 43 Arbeitsblatt ................................................................ 19 B Barrieren.................................................................... 73 Baum minimaler spannender Baum ............................... 488 spannender Baum ............................................... 488 Baustoffhandel ........................................................... 16 Beschränkung............................................................. 35 Bewertungsmatrix ...................................................... 33 Big-M ......................................................................... 48 Binärbedingung .......................................................... 40 binäre Optimierung .................................................... 42 Blockabstand.............................................................. 72 Bottleneck Transportmodell ..................................... 205 Bottleneck Zuordnungsmodell .................................. 305 Bound Bedingung ....................................................... 40 Breitengrad ................................................................ 64 Briefträgerproblem................................................... 588 gerichter Graph ................................................... 593 ungerichteter Graph ............................................ 593 Briefträgertour ......................................................... 594 C CALC/ OpenOffice..................................................... 658 Capacitated Chinese Postman Problem ..................... 587 Capacitated Vehicle Routing Problem ....................... 514 Capacitated Vehicle Routing Problem with Time Windows ............................................................. 567 Center 1-Center im Netzwerk.......................................... 381 1-Center-Problem der Ebene ............................... 426 Center im Netzwerk............................................. 381 p-Center in Netzwerken....................................... 396 p-Center-Problem im Koordinatensystem ............ 432 chemische Industrie ................................................... 16 Christofides .............................................................. 488 Covering Location Problem ....................................... 363 CVRP ........................................................................ 514 CVRPTW ................................................................... 568 D Decision Support System ............................................ 12 Dezimalgrad ............................................................... 64 Dijkstra-Algorithmus .................................. 187, 189, 562 direkte Entfernungsbestimmung ................................. 58 disjunktive Variablen .................................................. 49 Distanzmatrix ............................................................. 33 Dreiecksungleichung................................................... 72 Durchfahrtprobleme................................................. 445 E Entfernungen ............................................................. 58 Entscheidungsfindung .................................................. 1 Entscheidungshilfe ....................................................... 1 Entscheidungsvariable ................................................ 35 EULER-Weg .............................................................. 490 Evolutionsalgorithmus ................ 418, 419, 427, 434, 435 Extremwertaufgabe.................................................... 37 F Fixkosten-Transportmodell ....................................... 225 G GAMS......................................................................... 13 ganzzahlige Optimierung ............................................ 42 Ganzzahligkeitsbedingung .......................................... 40 General Routing-Problem ......................................... 618 Ges2Yyy ..................................................................... 21 Ges4Xxx ..................................................................... 20 Globalisierung .............................................................. 2 Google Earth .............................................................. 65 Google Maps .............................................................. 66 Graph......................................................................... 31 bewerteter Graph.................................................. 31 gemischter Graph .................................................. 31 gerichteter Graph .................................................. 31 H Heterogener Fuhrpark .............................................. 587 I Indikator .................................................................... 47 Innerbetriebliche Standortzuordnung ....................... 312 Intervallvariablen ....................................................... 51 K Kante ......................................................................... 31 kartesische Koordinatensysteme................................. 59 Knoten ....................................................................... 31 isolierter Knoten.................................................... 32 kombinatorische Optimierung .................................... 42 Kopfspalte.................................................................. 19 Kopfzeile .................................................................... 19 k-opt Verfahren 2-opt ................................................................... 505 3-opt ................................................................... 505 k-opt ................................................................... 505 Korrekturfaktoren ...................................................... 73 Kostenmatrix.............................................................. 33 Kreisverkehr ............................................................... 34 Kugeloberfläche ......................................................... 64 Kurier- Express- und Paketdienst............................... 134 Kurswinkel ............................................................... 470 kürzester Weg .......................................................... 172 von einem Knoten zu allen anderen ..................... 180 zwischen allen Knoten .................................. 187, 189 zwischen zwei Knoten................................... 173, 180 149 Modellbasiertes Logistikmanagement L O Lagerkosten................................................................ 56 Längengrad ................................................................ 64 Latitude...................................................................... 64 LE 56 Lebensmittelindustrie................................................. 15 lineare Optimierung ................................................... 39 logische Bedingungen ................................................. 46 Logistikeinheiten ........................................................ 56 Logistikkosten ............................................................ 56 logistische Versorgungskette ........................................ 2 Longitude ................................................................... 64 Lösungsgenerator....................................................... 12 Open Office .............................................................. 658 Optimierungskriterium ......................................... 35, 54 Optimum.................................................................... 35 M Matching.................................................................. 489 minimales Kosten Matching ................................. 489 mathematische Optimierung ...................................... 35 mathematisches Modell ............................................... 1 Matrixbezeichnung ..................................................... 20 Matrixminimum-Verfahren ....................................... 110 maximaler Fluss........................................................ 164 Maximum................................................................... 36 Maximum-Benefit-Briefträgerproblem ...................... 618 Maximum-Covering-Location-Problem ...................... 374 m-Briefträgerproblem .............................................. 618 Median 1.Median in der Ebene......................................... 403 1-Median im Netzwerk ........................................ 381 p-Median im Netzwerk ........................................ 383 p-Median-Problem im Koordinatensystem ........... 415 Mediane Mediane im Netzwerk ......................................... 381 Mehrdepotproblem.................................................. 586 Mehrperiodenproblem ............................................. 587 Miller-Tucker-Zemlin ................................................ 444 Mineralölindustrie ........................................................ 4 Minimum ................................................................... 36 MINV(A) ..................................................................... 29 MKM........................................................................ 489 MMULT(A,B) .............................................................. 28 Modellgenerator ........................................................ 12 MODI-Verfahren......................................................... 78 Monitoring ................................................................. 17 MS Excel 2003 .......................................................... 619 MS Excel 2010 .......................................................... 637 MSB ......................................................................... 489 MTRANS(A) ................................................................ 22 MTZ-Bedingung ........................................................ 444 verallgemeinert ................................................... 517 N Nachfolger ................................................................. 32 Nebenbedingung ........................................................ 35 Netz ........................................................................... 31 Netzflussmodell........................................................ 143 Netzwerk ................................................................... 31 nichtlineare Optimierung............................................ 42 Nicht-Negativitätsbedingung ...................................... 40 Nordwestecken-Regel............................................... 109 150 P Petal-Algorithmen .................................................... 555 Pfad ........................................................................... 32 Pfeil ........................................................................... 31 Polarwinkel .............................................................. 466 Premium-Solver........................................................ 649 MS-Excel 2003..................................................... 630 Prim-Algorithmus ..................................................... 489 Q Quadratischer Abstand ............................................... 72 Quelle ........................................................................ 32 R Reflexivität ................................................................. 72 Reportgenerator......................................................... 12 Repsol Butano ........................................................ 4, 18 Restriktion ................................................................. 35 Rural Postman Problem ............................................ 618 S Satz des Pythagoras .................................................... 67 Savings-Verfahren .................................................... 535 Senke ......................................................................... 32 Set-Covering-Location-Problem ................................ 363 Single-Source-Transportmodell ................................. 218 Small-L ....................................................................... 49 SOL .............................................................................. 7 Spaltenbezeichnung ................................................... 20 Spaltenindex .............................................................. 19 Spaltenminimum-Verfahren ..................................... 109 sphärische Trigonometrie ........................................... 68 Standard-Solver MS-Excel 2003..................................................... 625 MS-Excel 2010..................................................... 643 Standortoptimierung ................................................ 330 Standortplanung diskret................................................................. 330 kontinuierlich ...................................................... 330 Steiner-Weber-Modell .............................................. 403 Supply Chain ................................................................ 2 Sweep-Verfahren ..................................................... 549 Symmetrie ................................................................. 72 T T_XxxYyy .................................................................... 20 Tabelle ....................................................................... 19 Tourenplanung kapazitätsbeschränkt ........................................... 514 kapazitätsbeschränkt mit Zeitfenster ................... 567 Tourenplanungsprobleme Heuristiken.......................................................... 535 Transportkosten ......................................................... 56 Übersicht über die wichtigsten Excel-Objekte Transportmodell einstufig ................................................................ 76 Heuristiken.......................................................... 107 klassisches Transportmodell .................................. 76 kombiniert 1- oder 2-stufig .................................. 134 mehrstufig .......................................................... 143 zweistufig ............................................................ 124 Transportmodelle mit mehreren Gütern ................... 233 Transportoptimierung ................................................ 54 Travelling-Salesman-Problem.................................... 441 Heuristiken.......................................................... 466 Tripel-Algorithmus............................................. 187, 188 TSP........................................................................... 442 geschlossen......................................................... 445 offen ................................................................... 445 Warehouse Location Problem einstufig kapazitiert ............................................. 333 mehrstufig kapazitiert ......................................... 355 zweistufig kapazitiert ........................................... 340 Warehouse-Location-Probleme ................................ 333 Weg ........................................................................... 32 Windy Postman Problem .......................................... 618 Wirkkoeffizienten ..................................................... 198 WLP ......................................................................... 333 U Z Umschlagsmodell ..................................................... 124 Unimodularität ........................................................... 45 unproduktive Strecke ............................................... 589 Zeilenbezeichnung...................................................... 20 Zeilenindex................................................................. 19 Zeilenminimum-Verfahren........................................ 110 Zielfunktion ................................................................ 35 zulässiger Bereich ....................................................... 37 Zuordnungsmodell klassisch .............................................................. 278 quadratisch ......................................................... 312 symmetrisch........................................................ 296 verallgemeinert ................................................... 288 Zuordnungsoptimierung ........................................... 278 Zuordnungsproblem Heuristiken.......................................................... 324 V VARIGNONscher Apparat .......................................... 406 Vektor ........................................................................ 19 Spaltenvektor ........................................................ 19 Zeilenvektor .......................................................... 19 Vektoroptimierung ..................................................... 43 verbundene Variablen ................................................ 50 Verfahren der sukzessiven Einbeziehung ................... 480 Verfahren des besten Nachfolgers ............................ 477 Verfahren von Christofides ....................................... 488 VOGELsches Approximationsverfahren ..................... 111 Vorgänger .................................................................. 32 W 151