arnito
Goto Top

Word macros extern aufrufen

Hallo,
ich habe folgende Aufgabenstellung zu lösen und würde mich freuen wenn mir jemand dazu Hinweise geben könnte:

Ich kann in einer 4D Datenbank mit einer "Live Window" Funktion Office Dokumente anschauen und bearbeiten. Soweit ich das überblicke werden die Dokumente dazu im Explorer geöffnet. Aus der 4D Anwendung habe ich die Möglichkeit beliebige shell Kommandos abzusetzen. Nun die Frage (n): Wie kann ich z.B. in einem vb script an das im Explorer geöffnete Dokument rankommen und da dann vorher aufgezeichnete Macros ausführen, wie z.B Inhalt der Zwischenablage an einer bestimmten Textmarke einfügen.

Ich hoffe die Frage ist soweit nachvollziehbar.

Vielen Dank im Voraus

Arnito

Content-ID: 65729

Url: https://administrator.de/contentid/65729

Ausgedruckt am: 14.11.2024 um 11:11 Uhr

sebele
sebele 08.08.2007 um 14:24:01 Uhr
Goto Top
in Vb besorgt man sich eine Referenz mit CreatObject- bzw GetObject-Funktion. Das erhaltene Objekt kennt das komplette Objektmodell der zugrundeliegenden Applikation.

Set ie = CreateObject("InternetExplorer.Application")

Damit erhält man auch Zugriff auf die Inhalte des Explorers.

Mit Sicherheit muss man sich dann noch auf analoge weise ein entsprechendes Officeobjekt erzeugen um dann die Makros anzustossen.
arnito
arnito 08.08.2007 um 15:07:10 Uhr
Goto Top
Danke für die schnelle Antwort, da ich in vb recht unerfahren bin kann ich damit aber noch nicht so richtig viel Anfangen.
In meinem Fall ist das Wordfile im Explorer bereits geöffnet, ich müßte also mit GetObject erstmal das richtige explorer Fenster festellen (oder?) und dann an diese Instanz die entsprechen vb script befehle absetzen. Wie kann ich das richtige Fenster festellen, über den Dateinamen der geöffneten Datei?

Danke Arnito
sebele
sebele 08.08.2007 um 15:27:47 Uhr
Goto Top
GetObject liefert eine bestehende Explorerinstanz zurück. Normalerweise die mit der höchsten Prozessid. Ist ein bischen unsicher, wenn mehrere instanzen offen sind.

www.vbarchiv.net/commands/GetObject.php

Hier noch eine andere Variante:

www.xtremevbtalk.com/archive/index.php/t-247343.html

Damit geht man durch alle offenen Instanzen durch, schaut ob es ein IE ist. Da kann man sich prima reinhängen und auch gleich nachschauen ob es das richtige Dokument ist.
arnito
arnito 08.08.2007 um 15:39:49 Uhr
Goto Top
Hallo Sebele,
da komme ich der Sache doch näher, vor allem wenn da etwas Beispielcode dabei ist, an dem man sich entlanghangeln kann. Vielen Dank schonmal!

Arnito
arnito
arnito 09.08.2007 um 13:37:49 Uhr
Goto Top
Hallo,
mir scheint die zweite Varinate das richtige zu sein allerding kann ich mit folgendem Satz nicht viel anfangen:
"This requires a reference to Microsoft Internet Controls and to Microsoft Shell Controls and Automation. You can also choose to not add the references, but then replace the variable declarations with As Object." Deswegen klappt es warscheinlich auch nicht.

Zum Probieren habe ich in der Zwischenzeit mal folgendes mit einem durch das script selbst geöffnetem Fenster probiert:

Dim IE
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate2 "http://becks.aknh.de/test.doc"
IE.Visible = True

Das öffnet mir wie gewünscht test.doc im IE was mir aber nicht gelingt ist diese eingebettete wordinstanz mit vb befehlen anzusprechen, also in dem Dokument Text einzufügen etc., geht das überhaupt?

Vielen Dank

Arnito
sebele
sebele 09.08.2007 um 14:14:20 Uhr
Goto Top
Das Beispiel is schon ganz gut, du musst nur warten bis die Seite auch fertig geladen ist. Siehe unten

Dim d as HTMLDocument
Dim IE
Set IE = CreateObject("InternetExplorer.Application")

IE.Navigate2 "http://becks.aknh.de/test.doc"
Dim d As HTMLDocument
While (IE.readyState <> 4)
'Warten bis das Document geladen ist
Wend
IE.Visible = True
Set d = IE.document

bei mir ist es allerdings so, dass sich Word anschließend öffnet. Ich würde also jetzt dann hergehen und die offene Wordinstanz mit GetObjekt einfangen.

Um eine bessere syntaxunterstützung zu bekommen, solltest du auf alle Fälle die Verweise
Mircosoft HTML Obejct Library
Microsoft Internet Controls
und
Mircosoft Word 1.0 Object Library
in das Projekt als verweis einbinden.

Ich hoffe das hilft soweit, bin nämlich die nächste vier Wochen in Urlaub.

Gruss
arnito
arnito 09.08.2007 um 14:32:01 Uhr
Goto Top
Hallo,
das probier ich gleich mal und werd mich da schon irgenwie durchhangeln. Vielen Dank und einen schönen Urlaub!

Arnito
sebele
sebele 09.08.2007 um 14:43:32 Uhr
Goto Top
Ich habe bei einem anderen Projekt mal nachgeschaut, wie das Problem dort gelöst wurde. Den Quelltext darf ich nicht weitergeben, aber da wird folgendes gemacht:
Die IE.-Instanz holt das betreffende Dokument und speichert es lokal zwischen. Anschließend wird es mit der dazu passenden Applikation wieder geöffnet.

Hoffe das hilft noch ein bischen mehr.