Projekte und Referenzen: Unterschied zwischen den Versionen
Pwania (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Pwania (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Category:vba-wiki]] | |||
== Voraussetzungen == | == Voraussetzungen == | ||
Zeile 5: | Zeile 6: | ||
== Projekte == | == Projekte == | ||
Analog zu anderen Programmiersprachen, mit denen selbständig laufende Programme erzeugt werden, werden sämtliche (Klassen-)Module, Formulare und | Analog zu anderen Programmiersprachen, mit denen selbständig laufende Programme erzeugt werden, werden sämtliche (Klassen-)Module, Formulare und projektbezogene Daten in Projekten zusammengefasst. | ||
Die Tatsache, dass Sie mit VBA jedoch keine eigenständige Programme, sondern die Erweiterung einer Office-Anwendung programmieren, führt dazu, dass Sie im VBA-Editor keine neuen Projekte anlegen und an einem beliebigen Ort ablegen können. Stattdessen ist jedes Projekt an ein (Word-)Dokument, eine (PowerPoint-)Präsentation oder eine (Excel-)Arbeitsmappe bzw. ein Add-In gebunden. | Die Tatsache, dass Sie mit VBA jedoch keine eigenständige Programme, sondern die Erweiterung einer Office-Anwendung programmieren, führt dazu, dass Sie im VBA-Editor keine neuen Projekte anlegen und an einem beliebigen Ort ablegen können. Stattdessen ist jedes Projekt an ein (Word-)Dokument, eine (PowerPoint-)Präsentation oder eine (Excel-)Arbeitsmappe bzw. ein Add-In gebunden. | ||
Zeile 119: | Zeile 120: | ||
Zusätzlich besteht die Möglichkeit, auch ohne Referenz direkt eine Prozedur in einem anderen Projekt aufzurufen. Hierzu müssen Sie jedoch absolut sicher gehen, dass das entsprechende Projekt (die Datei, welche die Programmierung enthält) geöffnet ist! | Zusätzlich besteht die Möglichkeit, auch ohne Referenz direkt eine Prozedur in einem anderen Projekt aufzurufen. Hierzu müssen Sie jedoch absolut sicher gehen, dass das entsprechende Projekt (die Datei, welche die Programmierung enthält) geöffnet ist! | ||
Application.Run "' | Application.Run "'Projektname'!Modul.Prozedur" | ||
;Regeln | |||
* Projektname bzw. Dateiname | |||
** Optional, sollte jedoch anegegeben werden, wenn die aufgerufene Prozedur sich in einem anderen Projekt befindet | |||
** Hier kann auch der Dateiname des Projektes angegeben werden | |||
** Bei Dateinamen mit Leerzeichen diesen in Hochkommas einschließen (siehe Beispiel oben) | |||
** Ansonsten sind die Hochkommas optional | |||
** Wenn das Projekt angegeben wird, wird es von einem '!' gefolgt | |||
* Modul | |||
** Optional | |||
** Sollte angegeben werden, wenn die Prozedur in mehreren Modulen auftritt | |||
* Prozedur | |||
** Notwendig | |||
** Name der Prozedur | |||
** '''Wichtig:''' Die Prozedur muss öffentlich sein! | |||
* Parameter | |||
** Optional: Richtet sich nach der Definition der Prozedur | |||
** Eventuelle Parameter werden durch Kommas getrennt nach dem Namen der Prozedur angegeben | |||
;Beispiele | |||
Diese Funktion liegt im Modul 'modText': | |||
<span style="Color:blue">Public Function </span>TestFunction<span style="Color:gray">(</span>Optional<span style="Color:blue"> ByVal </span>strMessage<span style="Color:blue"> As String</span><span style="Color:gray">)</span><span style="Color:blue"> As Boolean</span> | |||
<span style="Color:blue"> If </span>MsgBox<span style="Color:gray">(</span>strMessage<span style="Color:gray">)</span> <span style="Color:gray">=</span> vbOK<span style="Color:blue"> Then </span>TestFunction <span style="Color:gray">=</span><span style="Color:blue"> True | |||
End Function</span> | |||
Beispielhafte Aufrufe mit 'Application.Run': | |||
<span style="Color:blue">Private Sub </span>ApplicationRun<span style="Color:gray">()</span> | |||
<span style="Color:green">' Funktioniert nur dann, wenn die Prozedur 'TestFunction' in allen geladenen Projekten eindeutig ist.</span> | |||
<span style="Color:green">' Ansonsten wird die Prozedur mit diesem Namen aufgerufen, die in der Anwendungshierarchie am weitesten oben erscheint</span> | |||
<span style="Color:green">' (worauf wir keine Einsicht und keinen Einfluss haben!!)</span> | |||
Application<span style="Color:gray">.</span>Run <span style="Color:gray">"TestFunction"</span> | |||
<span style="Color:green">' Aufruf mit Angabe des optionalen Parameters 'strMessage'</span> | |||
Application<span style="Color:gray">.</span>Run <span style="Color:gray">"TestFunction",</span> <span style="Color:gray">"Test!"</span> | |||
<span style="Color:green">' Aufruf mit Angabe des Modules</span> | |||
Application<span style="Color:gray">.</span>Run <span style="Color:gray">"modTest.TestFunction",</span> <span style="Color:gray">"Test!"</span> | |||
<span style="Color:green">' Aufruf mit zusätzlicher Angabe des Projektes bzw. des Dateinamen (diesen bitte hier zum Testen anpassen!)</span> | |||
Application<span style="Color:gray">.</span>Run <span style="Color:gray">"'FileOrProject'!modTest.TestFunction",</span> <span style="Color:gray">"Test!"</span> | |||
<span style="Color:green">' Abfrage des Rückgabewertes der Funktion: Klammern nicht vergessen!</span> | |||
MsgBox <span style="Color:gray">"Rückgabewert: "</span> & Application<span style="Color:gray">.</span>Run<span style="Color:gray">("'Presentation1'!modTest.TestFunction",</span> <span style="Color:gray">"Test!")</span><span style="Color:blue"> | |||
End Sub |
Aktuelle Version vom 28. Januar 2023, 00:32 Uhr
Voraussetzungen
Kurzzusammenfassung: Wozu brauch ich das?
Projekte
Analog zu anderen Programmiersprachen, mit denen selbständig laufende Programme erzeugt werden, werden sämtliche (Klassen-)Module, Formulare und projektbezogene Daten in Projekten zusammengefasst.
Die Tatsache, dass Sie mit VBA jedoch keine eigenständige Programme, sondern die Erweiterung einer Office-Anwendung programmieren, führt dazu, dass Sie im VBA-Editor keine neuen Projekte anlegen und an einem beliebigen Ort ablegen können. Stattdessen ist jedes Projekt an ein (Word-)Dokument, eine (PowerPoint-)Präsentation oder eine (Excel-)Arbeitsmappe bzw. ein Add-In gebunden.
Wenn Sie also ein neues Projekt erstellen möchten, müssen Sie eine entsprechende Office-Datei erzeugen, und wenn Sie ein Projekt speichern, wird die Office-Datei gespeichert.
Wirkungsbereich von Projekten
Abhängig vom gewählten Dateityp kann der Inhalt eines Projektes generell oder gezielt zur Verfügung gestellt werden. Grundsätzlich gilt, dass die Programmierung direkt an die Datei gebunden ist und somit dann zur Verfügung steht, wenn die Datei geöffnet ist. Bitte beachten Sie dennoch folgende Tabelle, denn insbesondere bei den Vorlagen verhalten sich die Office-Anwendungen unterschiedlich.
Alle Angaben zu den Projekten gelten übrigens auch für die Anpassungen der Benutzeroberfläche.
Anwendung | Dateityp | Dateierweiterungen | Geltungsbereich | Einsatzzweck | Besonderheiten |
---|---|---|---|---|---|
Word | Dokument | doc, docm | Ausschließlich in diesem Dokument, solange es geöffnet ist. | Erweiterung eines bestimmten Dokumentes um spezielle Funktionalitäten. | |
Vorlage | dot, dotm | Ausschließlich in dieser Vorlage sowie allen Dokumenten, die von dieser Vorlage abgeleitet werden. | Erweiterung eines bestimmten Dokumenttyps um spezielle Funktionalitäten. |
| |
Globale Vorlage, Add-In | dot, dotm | Gilt anwendungsweit, sobald die globale Vorlage (bzw. das Add-In) geladen wurde, üblicherweise mit dem Start von Word. | Erweiterung der Anwendung um Werkzeuge und kundenspezifische Funktionalitäten, welche immer zur Verfügung stehen sollen. | ||
Excel | Arbeitsmappe | xls, xlsm | Ausschließlich in dieser Arbeitsmappe, solange diese geöffnet ist. | Erweiterung einer bestimmten Arbeitsmappe um spezielle Funktionalitäten. | |
Vorlage | xlt, xltm | Ausschließlich in dieser Vorlage. Programmierung wird in alle Arbeitsmappen kopiert, die von dieser Vorlage erstellt werden. | Erweiterung eines bestimmten Arbeitsmappentyps um spezielle Funktionalitäten. |
| |
Add-In | xla, xlam | Gilt anwendungsweit, sobald das Add-In geladen wurde, üblicherweise mit dem Start von Excel. | Erweiterung der Anwendung um Werkzeuge und kundenspezifische Funktionalitäten, welche immer zur Verfügung stehen sollen. | ||
PowerPoint | Präsentation | ppt, pptm | Ausschließlich in dieser Präsentation, solange diese geöffnet ist. | Erweiterung einer bestimmten Präsentation um spezielle Funktionalitäten. | |
Vorlage | pot, potm | Ausschließlich in dieser Vorlage. Programmierung wird in alle Präsentationen kopiert, die von dieser Vorlage erstellt werden. | Erweiterung eines bestimmten Präsentationstyps um spezielle Funktionalitäten. |
| |
Add-In | ppa, ppam | Gilt anwendungsweit, sobald das Add-In geladen wurde, üblicherweise mit dem Start von PowerPoint. | Erweiterung der Anwendung um Werkzeuge und kundenspezifische Funktionalitäten, welche immer zur Verfügung stehen sollen. | ||
Outlook | VBAProject | otm | Gilt anwendungsweit mit dem Start von Outlook. | Erweiterung der Anwendung um Werkzeuge und kundenspezifische Funktionalitäten, welche immer zur Verfügung stehen sollen. |
|
Referenzen
Mithilfe von Referenzen können vom aktuellen Projekt aus auf alle öffentlichen Inhalte eines referenzierten Projektes zugegriffen werden.
Eine Referenz wird über den Befehl 'Extras', 'Verweise' im VBA-Editor hinzugefügt.
Die Anwendung (Word, PowerPoint, Excel) sorgt dafür, dass die referenzierten Projekte zur Verfügung stehen, wenn Ihr Projekt geöffnet wird, solange diese im gleichen Umfeld zu finden sind (im selben Verzeichnis, einem Unterverzeichnis etc.).
Projektübergreifender Zugriff ohne Referenz
Zusätzlich besteht die Möglichkeit, auch ohne Referenz direkt eine Prozedur in einem anderen Projekt aufzurufen. Hierzu müssen Sie jedoch absolut sicher gehen, dass das entsprechende Projekt (die Datei, welche die Programmierung enthält) geöffnet ist!
Application.Run "'Projektname'!Modul.Prozedur"
- Regeln
- Projektname bzw. Dateiname
- Optional, sollte jedoch anegegeben werden, wenn die aufgerufene Prozedur sich in einem anderen Projekt befindet
- Hier kann auch der Dateiname des Projektes angegeben werden
- Bei Dateinamen mit Leerzeichen diesen in Hochkommas einschließen (siehe Beispiel oben)
- Ansonsten sind die Hochkommas optional
- Wenn das Projekt angegeben wird, wird es von einem '!' gefolgt
- Modul
- Optional
- Sollte angegeben werden, wenn die Prozedur in mehreren Modulen auftritt
- Prozedur
- Notwendig
- Name der Prozedur
- Wichtig: Die Prozedur muss öffentlich sein!
- Parameter
- Optional: Richtet sich nach der Definition der Prozedur
- Eventuelle Parameter werden durch Kommas getrennt nach dem Namen der Prozedur angegeben
- Beispiele
Diese Funktion liegt im Modul 'modText':
Public Function TestFunction(Optional ByVal strMessage As String) As Boolean If MsgBox(strMessage) = vbOK Then TestFunction = True End Function
Beispielhafte Aufrufe mit 'Application.Run':
Private Sub ApplicationRun() ' Funktioniert nur dann, wenn die Prozedur 'TestFunction' in allen geladenen Projekten eindeutig ist. ' Ansonsten wird die Prozedur mit diesem Namen aufgerufen, die in der Anwendungshierarchie am weitesten oben erscheint ' (worauf wir keine Einsicht und keinen Einfluss haben!!) Application.Run "TestFunction" ' Aufruf mit Angabe des optionalen Parameters 'strMessage' Application.Run "TestFunction", "Test!" ' Aufruf mit Angabe des Modules Application.Run "modTest.TestFunction", "Test!" ' Aufruf mit zusätzlicher Angabe des Projektes bzw. des Dateinamen (diesen bitte hier zum Testen anpassen!) Application.Run "'FileOrProject'!modTest.TestFunction", "Test!" ' Abfrage des Rückgabewertes der Funktion: Klammern nicht vergessen! MsgBox "Rückgabewert: " & Application.Run("'Presentation1'!modTest.TestFunction", "Test!") End Sub