Prozeduren und Parameter optimieren
Datenwerte zurückgeben: Anpassung für Excel
Anpassung für Excel
Auf dieser Seite
Mit Bild
Es wäre schön, wenn eine so einfache Prozedur wie in Word auch direkt in Excel laufen würde, schließlich gibt es dort einen identischen DateiEigenschaften-Dialog mit den gleichen Eigenschaften.
Mit Bild
Die Änderung vom Word-typischen ActiveDocument in das Excel-typische ActiveWorkbook ist nachvollziehbar und schnell gemacht. Dass ein offensichtlicher Word-Datentyp wie WdBuiltInProperty ebenfalls auf sein Excel-Gegenstück umgestellt werden muss, ist auch klar. Aber es gibt kein Gegenstück dazu!
Mit Bild
Ja, Sie haben richtig gelesen: Für etwas so Banales wie die Auflistung der Dokument-Eigenschaften gibt es keine sprach-neutralen Konstanten in Excel. Die Hilfe empfiehlt ernsthaft, den Auflistungs-Index als Zahl zu benutzen wie im folgenden Beispiel:
Mit Bild
'Code vorher MsgBox ActiveWorkbook.BuiltinDocumentProperties(2).Value 'Code nachher
Mit Bild
Das ist natürlich unleserlicher Code und läuft auf das Raten der gesuchten Eigenschaft hinaus. Alternativ kann laut Hilfe der Name der gesuchten Eigenschaft als String übergeben werden und sie nennt sogar die Liste der verfügbaren integrierten Namen von Dokumenteigenschaften. Demnach sollen Sie schreiben:
Mit Bild
'Code vorher MsgBox ActiveWorkbook.BuiltinDocumentProperties("Schlüsselwörter").Value 'Code nachher
Mit Bild
Leider sind darin zwei fundamentale Fehler enthalten:
Die deutsche Bezeichnung "Schlüsselwörter" ist nicht sprach-neutral, Ihr Makro liefe also nur im deutschen Excel. Abgesehen davon heißt es im DokumentEigenschaften-Dialog Stichwörter.
Es funktioniert gar nicht. Die Bezeichnungen der Dokument-Eigenschaften dürfen nicht übersetzt werden, die Hilfe ist also falsch.
Mit Bild
Englische DokumentEigenschaft-Bezeichnungen ermitteln
Bevor Sie lange herumraten, wie "Schlüsselwörter" denn nun im Original heißt, lassen Sie sich am besten eine Liste aller Bezeichnungen erstellen. Das folgende Makro schreibt die Index-Nummern und die englischen Bezeichnungen in das Direkt-Fenster (Strg+G zum Anzeigen):
Sub AllePropsAnzeigen() Dim intI As Integer For intI = 1 To ActiveWorkbook.BuiltinDocumentProperties.Count Debug.Print intI & " = " & ActiveWorkbook.BuiltinDocumentProperties(intI).Name Next End Sub
Dann erhalten Sie dort folgende Liste mit den korrekten Namen:
1 = Title
2 = Subject
3 = Author
4 = Keywords
5 = Comments
6 = Template
7 = Last author
8 = Revision number
9 = Application name
10 = Last print date
11 = Creation date
12 = Last save time
13 = Total editing time
14 = Number of pages
15 = Number of words
16 = Number of characters
17 = Security
18 = Category
19 = Format
20 = Manager
21 = Company
22 = Number of bytes
23 = Number of lines
24 = Number of paragraphs
25 = Number of slides
26 = Number of notes
27 = Number of hidden Slides
28 = Number of multimedia clips
29 = Hyperlink base
30 = Number of characters (with spaces)
Obwohl es sich bei BuiltInDocumentProperties um ein Auflistungs-Objekt handelt, gehört es offensichtlich zu den wenigen, deren Index nicht bei 0, sondern bei 1 anfängt.
Mit Bild
Damit das sprach-neutral und im Grunde vergleichbar mit Word erfolgt, sollten Sie sich die passenden Konstanten bereitstellen. Das geht beispielsweise mit einer Enumeration, daher ist ein kurzer Blick auf diese Technik hilfreich.