Prozeduren und Parameter optimieren

Datenwerte zurückgeben: Anpassung für Excel

∅ 2.7 / 3 Bewertungen

Anpassung für Excel

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.

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!

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:

'Code vorher
MsgBox ActiveWorkbook.BuiltinDocumentProperties(2).Value
'Code nachher

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:

'Code vorher
MsgBox ActiveWorkbook.BuiltinDocumentProperties("Schlüsselwörter").Value
'Code nachher

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.

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.

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.