gelöst: Zugriff auf erweiterte Eigenschaften von Word

18. Juni 2013 16:31

Hallo zusammen,

ich habe unter Word eine Vorlage erstellt, in der ich 3 neue Eigenschaften in den erweiterten
Eigenschaften (RK Anpassen) von Typ Text hinterlegt habe.

Diese möchte ich nun unter Navison ansprechen und einem Wert zuweisen.

Dafür habe ich eine Automation Variable WordCustomProperties definiert
vom Typ „Custom Properties“ aus der Library „Microsoft Word 14.0 Object Library“.

WordCustomProperties := WordApp.ActiveDocument.CustomDocumentProperties;

Wenn ich nun die Anzahl der Einträge (WordCustomProperties.Count) mir ausgeben lassen möchte, zeigt er mir auch 3 an.

Möchte ich nun aber auf ein Item davon zugreifen (WordCustomerProperties.Item(NAVVariantName)),
egal ob mit Name oder Index, bringt er mir immer folgende Fehlermeldung:

Fehler beim Aufruf von Member ‚Item‘: Mietglied nicht gefunden. (Ausnahme von HRESULT:
0X80020003 (DISP_E_MEMBERNOTFOUND))


Trotz Suche im Internet, habe ich bisher keine Lösung gefunden. Was mache ich falsch oder lässt
Navision den Zugriff nicht zu?

Über einen Tipp wäre ich sehr froh.

Vielen Dank bereits mal im Voraus.

Gruß
Jürgen
Zuletzt geändert von JRSyn am 21. Juni 2013 07:33, insgesamt 1-mal geändert.

Re: Zugriff auf erweiterte Eigenschaften von Word

18. Juni 2013 16:43

Willkommen bei uns!

Vorweg, ich kenne mich mit der „Microsoft Word 14.0 Object Library“ nicht aus, aber die Struktur kenne ich von woanders.

JRSyn hat geschrieben:Möchte ich nun aber auf ein Item davon zugreifen (WordCustomerProperties.Item(NAVVariantName)),

Anstelle NAVVariantName gehört für gewöhnlich ein Index vom Typ integer. Meistens beginnt der jedoch bei 0 für Element Nr. 1.

JRSyn hat geschrieben:egal ob mit Name oder Index

Zeigst du uns deine Codezeile mit dem Index, die nicht funktioniert hat?

Re: Zugriff auf erweiterte Eigenschaften von Word

19. Juni 2013 08:02

Hallo Natalie,

zunächst einmal vielen Dank für die freundliche Begrüßung und für Deine Antwort.

Natürlich zeige ich Euch die Codzeilen mit dem Index:

i := 1;
WordCustomProperty := WordCustomerProperties.Item(i);

Der Index beginnt bei 1 (selbst wenn er bei 0 beginnen würde, müsste er bei 3 Einträgen die 1 belegt haben).
Die Fehlermeldung bleibt die gleiche.

Gruß
Jürgen

Re: Zugriff auf erweiterte Eigenschaften von Word

19. Juni 2013 08:30

JRSyn hat geschrieben:Der Index beginnt bei 1 (selbst wenn er bei 0 beginnen würde, müsste er bei 3 Einträgen die 1 belegt haben).
Die Fehlermeldung bleibt die gleiche.

Hm, das ist seltsam.
Drück mal im Quelltext F5, wähle links die WordCustomerProperties, wähle weiter rechts (weiß nicht genau, wo) Item aus. Ganz unten links solltest du dann eine Syntaxbeschreibung für den Parameter i finden. Vielleicht bringt dich ja das auf die richtige Spur.

Re: Zugriff auf erweiterte Eigenschaften von Word

19. Juni 2013 11:32

Warum verwendest Du die Object Lib als Automation? Im Falle eines nicht vorhandenen oder in einer anderen Version vorhandenen Word erhältst Du einen Fehler.

Stattdessen würde ich eine eigene dll erstellen und darin auf die Object Lib per Late Binding zugreifen. So kannst Du Fehlerdie von Word oder dessen Lib verursacht werden leicht abfangen ohne das NAV abstürzt. Deine neuen user-Properties kannst Du dann als Properties Deiner dll für NAV veröffentlichen.

Unter http://www.codeproject.com/Articles/280279/Word-Automation-using-Late-binding-usage-of-dynami findest Du Hinweise wie das zu lösen ist.

Volker

gelöst: Zugriff auf erweiterte Eigenschaften von Word

20. Juni 2013 07:42

Hallo,

habe das Problem anderweitig mit Dokumenten-Variablen gelöst, da ich bereits viel zuviel Zeit in die Sache investiert habe.

Diese werden von anderer Stelle ausgelesen und weiterverarbeitet. Die Lösung ist zwar unbefriedigend, aber ich habe zur Zeit
keine Zeit mehr.

Die Anregung von Volker bezgl. eigener dll (Stichwort: "Lib per Late Binding") finde ich gut :-D .
Werde dies wenn ich mal wieder mehr Zeit habe, mal ausprobieren.

Gruß
Jürgen