Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Einführung
Einer der Vorteile der Verwendung von Object Oriented Programming (OOP) ist die Wiederverwendebarkeit von Code. Die typische Methode hierfür ist das Instanziieren eines Objekts einer bereits definierten Klasse mit der Syntax "Set variable = New ClassName ". VBA-Programmierer verwenden solche Objekte immer dann, wenn sie objekte innerhalb ihrer Anwendungsplattform verwenden. Beispiele hierfür sind das Arbeitsmappenobjekt in Excel, das Presentation-Objekt in PowerPoint oder das Document-Objekt in Word. Darüber hinaus verwenden VBA-Programmierer Benutzerformulare, bei denen es sich um Objekte handelt, die zu einer speziellen Art von Klasse gehören. Alle diese Objekte werden in Bibliotheken definiert, die sich außerhalb des VBA-Entwicklerprojekts befinden. Klicken Sie auf die | "Extras". Verweise... menü item to see the list of external libraries that the Visual Basic Editor (VBE) automatically establishes on behalf of the developer.
In diesem Tipp erfahren Sie, wie Sie auf eine benutzerdefinierte Klasse in einer von uns erstellten externen Bibliothek zugreifen. Während das unten verwendete Beispiel auf Excel 2003 basiert, gelten die Tipps für andere MS Office-Produkte, die VBA unterstützen, und gelten für Versionen 2000 oder höher.
Dies ist eine Mittlere/Fortgeschrittene-Ebene und es wird eine gewisse Komfortstufe mit VB(A)-Programmierung vorausgesetzt.
Es sind zwei unterschiedliche Einrichtungsschritte erforderlich, bevor ein VBA-Projekt auf ein Objekt zugreifen kann, das im Klassenmodul eines anderen VBA-Projekts deklariert ist. Der erste Satz macht das Klassenmodul außerhalb des Projekts verwendbar, in dem es deklariert wird, und stellt eine Möglichkeit bereit, mit der ein Objekt instanziiert werden kann. Der zweite Satz befasst sich mit der Verwendung dieser Klasse durch das Clientprojekt.
Einrichten des Projekts, das die Klassendefinition enthält
Standardmäßig ist für ein Klassenmodul die Eigenschaft "Instancing" auf "Privat" festgelegt. Das bedeutet, dass nur das Projekt, das die Definition der Klasse enthält, ein Objekt dieser Klasse instanziieren kann. Die einzige andere Auswahl, die VBA unterstützt, ist öffentlich, nicht erstellbar. Das bedeutet, dass ein externes Projekt ein Objekt dieser Klasse verwenden kann, es jedoch nicht instanziieren kann. Mag seltsam erscheinen, aber so ist es. Die Möglichkeit, die Eigenschaft aus dem Standardwert zu ändern, besteht darin, das Klassenmodul im VBE-Projekt-Explorer auszuwählen, das interessante Klassenmodul auszuwählen, auf das Eigenschaftenfenster zuzugreifen (falls erforderlich, F4 zu verwenden, um es sichtbar zu machen) und die Instancing-Eigenschaft in 2-PublicNotCreatable zu ändern.
Um dem Beispiel in diesem Tipp zu folgen, erstellen Sie ein Klassenmodul, nennen Sie es clsEmployee, ändern Sie seine Instancing-Eigenschaft, und fügen Sie den folgenden Code hinzu.
Option Explicit
Dim sName As String
Property Get Name() As String
Name = sName
End Property
Property Let Name(uName As String)
sName = uName
End Property
Da die Instancing-Eigenschaft der Klasse "PublicNotCreatable" ist, muss das Projekt eine Möglichkeit für einen Client zum Instanziieren des Objekts bereitstellen. Fügen Sie eine neue Funktion in einem Standardmodul hinzu:
Option Explicit
Public Function New_clsEmployee() As clsEmployee
Set New_clsEmployee = New clsEmployee
End Function
dabei ist "clsEmployee" der Name der interessanten Klasse. Außerdem sollte dies kein privates Modul sein.
Eine letzte Änderung wird das Leben ein wenig einfacher machen. Benennen Sie das Projekt vom VBAProject-Standardprojekt in "ClassProvider" um. Wählen Sie dazu das Projekt im VBE-Projekt-Explorer und dann tools | VBAProject-Eigenschaften... | Registerkarte "Allgemein" | und geben Sie im Feld "Projektname " "ClassProvider" ein.
Speichern Sie diese Datei beispielsweise als Class Provider.xls.
Fahren Sie als Nächstes mit dem Clientprojekt fort.
Einrichten des Projekts, das die exportierte Klasse verwendet
Das Clientprojekt verwendet die Klasse sehr ähnlich wie eine Klasse, die in einer anderen externen Bibliothek (z. B. einem Benutzerformular) definiert wäre – mit einem wichtigen Unterschied. Da es ein Objekt dieser Klasse nicht instanziieren kann, muss die oben deklarierte funktion New_clsEmployee() verwendet werden. Entscheiden Sie wie bei jeder anderen externen Bibliothek, ob eine frühe oder späte Bindung verwendet werden soll. Im folgenden Code wird beides veranschaulicht. Denken Sie daran, dass das Clientprojekt einen Verweis enthalten muss, um den frühen Bindungscode zu verwenden (Tools | Referenzen...) in die Datei "Class Provider.xls " ein.
Option Explicit
Sub UseExportedClass_EarlyBinding()
Dim anEmployee As ClassProvider.clsEmployee
Set anEmployee = ClassProvider.New_clsEmployee
anEmployee.Name = "Tushar Mehta"
MsgBox anEmployee.Name
End Sub
Sub UseExportedClass_LateBinding()
Dim anEmployee As Object
Set anEmployee = Application.Run("'g:\temp\class provider.xls'!new_clsEmployee")
anEmployee.Name = "Tushar Mehta"
MsgBox anEmployee.Name
End Sub
Abschließender Hinweis
Die externe Bibliothek muss keine normalerweise gespeicherte Datei sein. Es kann sich in einem anwendungsspezifischen Add-In befinden (z. B. in einer Datei, die mit dem Suffix XLA oder PPA gespeichert wurde). Denken Sie daran, dass ein solches Add-In nicht über die normale Datei geöffnet wird | Öffnen... -Methode, aber mit der Tools-| geladen Add-Ins... Befehl.