Generelle Objekte: Unterschied zwischen den Versionen

Aus VBA-wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „Generelle Objekte haben selbst keine Methoden und keine Eigenschaften, sie können jedoch eine beliebiges Anwendungs- bzw. Klassenobjekt entgegennehmen und des…“)
 
Keine Bearbeitungszusammenfassung
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Generelle Objekte haben selbst keine Methoden und keine Eigenschaften, sie können jedoch eine beliebiges Anwendungs- bzw. Klassenobjekt entgegennehmen und dessen Eigenschaften und Methoden aufnehmen. <span style="Color:blue">Dim </span>objApp<span style="Color:blue"> As </span>Object <span style="Color:blue">Set </span>objApp <span style="Color:gray">=</span> Application Debug<span style="Color:gray">.</span>Print objApp<span style="Color:gray">.</span>Name Das generelle Objekt objApp hat keine eigenen Eigenschaften, aber durch die Zuweisung der Anwendung kann die Eigenschaft 'Name' abgerufen werden. Hierfür wird jedoch vom VBA-Editor keine Hilfe angeboten, weil aus seiner Sicht das Objekt keine eigenen Eigenschaften hat.
[[Category:vba-wiki]]
Generelle Objekte haben selbst keine Methoden und keine Eigenschaften, sie können jedoch eine beliebiges Anwendungs- bzw. Klassenobjekt entgegennehmen und dessen Eigenschaften und Methoden aufnehmen.  
 
<span style="Color:blue">Dim </span>objApp<span style="Color:blue"> As </span>Object  
<span style="Color:blue">
Set </span>objApp <span style="Color:gray">=</span> Application  
Debug<span style="Color:gray">.</span>Print objApp<span style="Color:gray">.</span>Name
 
Das generelle Objekt objApp hat keine eigenen Eigenschaften, aber durch die Zuweisung der Anwendung kann die Eigenschaft 'Name' abgerufen werden. Hierfür wird jedoch vom VBA-Editor keine Hilfe angeboten, weil aus dessen Sicht das generelle Objekt keine eigenen Eigenschaften hat.


== Late Binding ==
== Late Binding ==
Zeile 7: Zeile 15:
=== Beispiel: Mehr-Anwendungen-Fähigkeit ===
=== Beispiel: Mehr-Anwendungen-Fähigkeit ===


Sie haben eine Lösung entwickelt, welche in mehreren Office-Anwendungen zur Verfügung stehen soll. Diese Lösung bezieht sich auf die aktuelle Datei. Da die aktuelle Datei in Word ein Dokument, in Excel eine Arbeitsmappe und in PowerPoint eine Präsentation ist, müssen Sie auf alle drei Anwendungen getrennt eingehen oder je nach Anwendung die nicht zutreffenden Schritte in Kommentar setzen. <span style="Color:blue">Public Function </span>ActiveFileFullName<span style="Color:gray">()</span><span style="Color:blue"> As String</span> <span style="Color:blue"> Dim </span>objApp<span style="Color:blue"> As </span>Object <span style="Color:green">' Application</span> <span style="Color:blue"> Dim </span>objFile<span style="Color:blue"> As </span>Object <span style="Color:green">' Workbook</span> <span style="Color:blue"> Set </span>objApp <span style="Color:gray">=</span> Application <span style="Color:blue"> Select Case </span>Application<span style="Color:gray">.</span>Name <span style="Color:blue"> Case </span><span style="Color:gray">"Microsoft Excel"</span> <span style="Color:blue"> Set </span>objFile <span style="Color:gray">=</span> objApp<span style="Color:gray">.</span>ActiveWorkbook <span style="Color:blue"> Case </span><span style="Color:gray">"Microsoft PowerPoint"</span> <span style="Color:blue"> Set </span>objFile <span style="Color:gray">=</span> objApp<span style="Color:gray">.</span>ActivePresentation <span style="Color:blue"> Case </span><span style="Color:gray">"Microsoft Word"</span> <span style="Color:blue"> Set </span>objFile <span style="Color:gray">=</span> objApp<span style="Color:gray">.</span>ActiveDocument <span style="Color:blue"> End Select</span> ActiveFileFullName <span style="Color:gray">=</span> objFile<span style="Color:gray">.</span>FullName <span style="Color:blue">End Function</span> Während diese Funktion aufgebaut wurde, hat der Entwickler die <code>Application</code> und das <code>Workbook</code> als solche definiert und konnte direkt auf die gewünschten Eigenschaften zugreifen. Dann wurden die beiden Variablen zu Objekten erklärt und ermöglichen so auch in den anderen Anwendungen den Zugriff auf die aktuelle Datei. Hierbei werden, obwohl zum Beispiel die Excel <code>Application</code> keine <code>ActivePresentation</code> und kein <code>ActiveDocument</code> kennt, keine Kompilierungsfehler auftreten, weil erst beim direkten Aufruf des Objekts geprüft wird, ob diese Eigenschaft zur Verfügung steht. Durch die <code>Select</code> Abfrage wird gesteuert, welche Anwendung auf welches aktuelle Element zugreift.
Sie haben eine Lösung entwickelt, welche in mehreren Office-Anwendungen zur Verfügung stehen soll.  
 
Diese Lösung bezieht sich auf die aktuelle Datei. Da die aktuelle Datei in Word ein Dokument, in Excel eine Arbeitsmappe und in PowerPoint eine Präsentation ist, müssen Sie auf alle drei Anwendungen getrennt eingehen oder je nach Anwendung die nicht zutreffenden Schritte in Kommentar setzen.  
 
<span style="Color:blue">Public Function </span>ActiveFileFullName<span style="Color:gray">()</span><span style="Color:blue"> As String</span>
    <span style="Color:blue"> Dim </span>objApp<span style="Color:blue"> As </span>Object <span style="Color:green">     ' Application</span>
    <span style="Color:blue"> Dim </span>objFile<span style="Color:blue"> As </span>Object <span style="Color:green">   ' Workbook</span>
   
    <span style="Color:blue"> Set </span>objApp <span style="Color:gray">=</span> Application
    <span style="Color:blue"> Select Case </span>Application<span style="Color:gray">.</span>Name
        <span style="Color:blue"> Case </span><span style="Color:gray">"Microsoft Excel"</span>
            <span style="Color:blue"> Set </span>objFile <span style="Color:gray">=</span> objApp<span style="Color:gray">.</span>ActiveWorkbook
        <span style="Color:blue"> Case </span><span style="Color:gray">"Microsoft PowerPoint"</span>
            <span style="Color:blue"> Set </span>objFile <span style="Color:gray">=</span> objApp<span style="Color:gray">.</span>ActivePresentation
        <span style="Color:blue"> Case </span><span style="Color:gray">"Microsoft Word"</span>
            <span style="Color:blue"> Set </span>objFile <span style="Color:gray">=</span> objApp<span style="Color:gray">.</span>ActiveDocument
    <span style="Color:blue"> End Select</span>
    ActiveFileFullName <span style="Color:gray">=</span> objFile<span style="Color:gray">.</span>FullName<span style="Color:blue">
End Function</span>
Während diese Funktion aufgebaut wurde, hat der Entwickler die <code>Application</code> und das <code>Workbook</code> als solche definiert und konnte direkt auf die gewünschten Eigenschaften zugreifen.  
 
Dann wurden die beiden Variablen zu Objekten erklärt und ermöglichen so auch in den anderen Anwendungen den Zugriff auf die aktuelle Datei. Hierbei werden, obwohl zum Beispiel die Excel <code>Application</code> keine <code>ActivePresentation</code> und kein <code>ActiveDocument</code> kennt, keine Kompilierungsfehler auftreten, weil erst beim direkten Aufruf des Objekts geprüft wird, ob diese Eigenschaft zur Verfügung steht.  
 
Durch die <code>Select</code> Abfrage wird gesteuert, welche Anwendung auf welches aktuelle Element zugreift.
 
Dieses Beispiel ist selbstverständlich nur insofern sinnvoll, als das die Lösung auf Eigenschaften und Methoden der aktuellen Datei zugreift, die in allen Office-Anwendungen vorhanden sind, wie <code>Name</code>, <code>FullName</code>, <code>Save</code>, <code>SaveAs</code>, ...

Aktuelle Version vom 28. Januar 2023, 00:35 Uhr

Generelle Objekte haben selbst keine Methoden und keine Eigenschaften, sie können jedoch eine beliebiges Anwendungs- bzw. Klassenobjekt entgegennehmen und dessen Eigenschaften und Methoden aufnehmen.

Dim objApp As Object 

Set objApp = Application 
Debug.Print objApp.Name

Das generelle Objekt objApp hat keine eigenen Eigenschaften, aber durch die Zuweisung der Anwendung kann die Eigenschaft 'Name' abgerufen werden. Hierfür wird jedoch vom VBA-Editor keine Hilfe angeboten, weil aus dessen Sicht das generelle Objekt keine eigenen Eigenschaften hat.

Late Binding

Generelle Objekte dienen vorrangig dazu, eine späte Bindung zu ermöglichen (Late Binding). Dies kann in folgenden Situationen sehr hilfreich sein:

Beispiel: Mehr-Anwendungen-Fähigkeit

Sie haben eine Lösung entwickelt, welche in mehreren Office-Anwendungen zur Verfügung stehen soll.

Diese Lösung bezieht sich auf die aktuelle Datei. Da die aktuelle Datei in Word ein Dokument, in Excel eine Arbeitsmappe und in PowerPoint eine Präsentation ist, müssen Sie auf alle drei Anwendungen getrennt eingehen oder je nach Anwendung die nicht zutreffenden Schritte in Kommentar setzen.

Public Function ActiveFileFullName() As String
    Dim objApp As Object      ' Application
    Dim objFile As Object     ' Workbook
    
    Set objApp = Application
    Select Case Application.Name
        Case "Microsoft Excel"
            Set objFile = objApp.ActiveWorkbook
        Case "Microsoft PowerPoint"
            Set objFile = objApp.ActivePresentation
        Case "Microsoft Word"
            Set objFile = objApp.ActiveDocument
    End Select
    ActiveFileFullName = objFile.FullName
End Function

Während diese Funktion aufgebaut wurde, hat der Entwickler die Application und das Workbook als solche definiert und konnte direkt auf die gewünschten Eigenschaften zugreifen.

Dann wurden die beiden Variablen zu Objekten erklärt und ermöglichen so auch in den anderen Anwendungen den Zugriff auf die aktuelle Datei. Hierbei werden, obwohl zum Beispiel die Excel Application keine ActivePresentation und kein ActiveDocument kennt, keine Kompilierungsfehler auftreten, weil erst beim direkten Aufruf des Objekts geprüft wird, ob diese Eigenschaft zur Verfügung steht.

Durch die Select Abfrage wird gesteuert, welche Anwendung auf welches aktuelle Element zugreift.

Dieses Beispiel ist selbstverständlich nur insofern sinnvoll, als das die Lösung auf Eigenschaften und Methoden der aktuellen Datei zugreift, die in allen Office-Anwendungen vorhanden sind, wie Name, FullName, Save, SaveAs, ...