dila21
Goto Top

Werte über VB in Word-Datei-Felder einlesen

Hallo zusammen,

ich habe ein Problem face-sad. Ich habe ein VB-Script, welches Werte in eine Word Datei einlesen soll. Die Werte werden von einer .dat Datei gezogen.
Hierzu wird aktuell

oDoc.CustomDocumentProperties("Test") = Test

verwendet.

Im Anschluß wird das ganze als PDF gespeichert und die Word Datei wird im Orginalzustand gelassen. So funktioniert das ganze auch hervorragend.
Allerdings in einer produktiven Umgebung, bekommen wir andauernd Laufzeitfehler im VB-Script.

Fehler: Laufzeitfehler im VB-Script, (Zeilennummer) ungültiger Prozeduraufruf oder ungültiges Argument.

Die Zeilennummer verweist mich auf die Zeile, wo die Felder mit oDoc.CustomDocumentProperties gesetzt werden.

Hat einer von Euch eine Idee, wie ich dieses Problem beheben könnte oder vielleicht eine andere Variante wie man das ganze einlesen kann.

Vielen Dank im voraus.

Dila

Content-Key: 250815

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

Ausgedruckt am: 28.03.2024 um 19:03 Uhr

Mitglied: ITvortex
ITvortex 02.10.2014 um 16:28:30 Uhr
Goto Top
Hallo,

stimmen die Datensätze der User mit deinen Testdatensätzen überein oder werden da zusätzliche Attribute auch ausgelesen und verursachen deshalb den Fehler?

Gruß
ITvortex
Mitglied: colinardo
colinardo 02.10.2014 aktualisiert um 19:47:41 Uhr
Goto Top
Hallo Dila,
ich vermute schwer das du die CustomProperty im Dokument noch gar nicht mit der Add() Methode hinzugefügt hast, und deswegen die Exception geworfen wird .
Ansonsten liegt es an den Daten die du versuchst auszulesen.
Ohne mehr Details deines Codes schwer zu sagen.

Man kann in Word an den entsprechenden Stellen an denen die Daten importiert werden sollen, einfach Textmarken(Bookmarks) erstellen. Welche man dann über oDoc.Bookmarks("NameXYZ") ansprechen und mit dem gewünschten Text füllen kann. So macht man sowas normalerweise. Ansonsten geht dies nach dem selben Schema auch mit Formularfeldern; die lassen sich ebenfalls mit Namen versehen und im VBA Code ansprechen oDoc.Formfields("NameXYZ")

Grüße Uwe
Mitglied: dila21
dila21 08.10.2014 um 16:45:55 Uhr
Goto Top
Hallo ITvortex,

das Problem ist, das die Feldmarkierungen gelöscht werden, wenn das dokument innerhalb diesem produktiv system geöffnet wird. face-sad.
Gibt es vielleicht eine Möglichkeit, die Feldmarkierungen, wo ich die Attribute im Dokument zuordne über ein vb script immer wieder neu
hinzufüge?

Gruß Dila
Mitglied: dila21
dila21 08.10.2014 um 16:48:44 Uhr
Goto Top
Hallo Uwe,

die CustomProperties wurden mit oDoc. hinzugefügt. Allerdings liegt das Problem darin, was ich nun erst heute herausgefudnen habe, da ich die letzten Tage krank war, das die Bookmarks entfernt werden, sobald man mit einem bestimtmen Addin arbeitet. Gibt es eine Möglichkeit, diese Felder über ein Script im Worddokument hinzufügen? Oder ist es die einzige Möglichkeit?

Gruß Dila
Mitglied: colinardo
colinardo 08.10.2014 aktualisiert um 17:02:29 Uhr
Goto Top
Gibt es eine Möglichkeit, diese Felder über ein Script im Worddokument hinzufügen?
klar, aber man muss halt wissen wo sie hinzugefügt werden sollen....und das wird eine Fusselsarbeit wenn man keine Markierungen hat...Altermativ kannst du natürlich deine eigene Markierung erstellen z.B. als normaler Text ++MARKER++Name++ und dann nach diesen Stellen im Dokument suchen und durch deine Daten ersetzen.
das die Bookmarks entfernt werden, sobald man mit einem bestimtmen Addin arbeitet.
habe ich noch nie gehört, was ist das denn für ein Schrott ?
Mitglied: dila21
dila21 09.10.2014 um 08:41:15 Uhr
Goto Top
Hallo Uwe,

ja ich habe das auch nicht geglaubt, und man hat es mir dann gezeigt. Die Bookmarks muss man jedesmal neu zuordnen.
Bin jetzt wirklich etwas verzweifelt. Vielleicht sollte ich das mit den eigenen Markierungen mal versuchen.
Aber da könnte es ja sein, das auch diese Markierungen verschwinden, oder meinst du, das ich diese eigenen Markierungen dafür nutze, damit
ich dann dadurch weiß wo ich die anderen Bookmarks hinzufügen soll? Vielen Dank nochmals.

Gruß Dila
Mitglied: colinardo
colinardo 09.10.2014 um 08:54:42 Uhr
Goto Top
Moin Dila,
naja wenn das Plugin "normalen" Text entfernt wäre das ja eine Katastrophe face-wink da würde ich mir dann schwer überlegen ob ich das Plugin weiter nutze.
Ich meinte die Funktionsweise folgendermaßen:
Man fügt an den gewünschten Stellen einen Text nach deinem ganz speziellen Muster wie oben geschrieben ein und dann durchsucht man via VBA das ganze Dokument nach diesen Markern, extrahiert den Markername und setzt anhand des Markernamens den gewünschten Text ein, zum Schluss wird das ganze als neues Dokument gespeichert, fertig. Beim nächsten mal nutzt man dann wieder die Vorlage.

Noch eine Frage: Werden nur Bookmarks entfernt, oder auch Formularfelder und Feldfunktionen ?
Bitte die genaue Bezeichnung beachten !! Diese kann man nämlich auch mit Namen versehen und via VBA ansprechen.

Viele Grüße Uwe
Mitglied: dila21
dila21 09.10.2014 um 09:10:21 Uhr
Goto Top
Hallooo,

Feldfunktionen. Habe gerade nachgeschaut. Also im Dokument sind die unter DocProperty = die jeweilige Eigenschaft. Und diese werden entfernt. Ich glaube ich verwechsle die Bookmarks mit den Feldfunktionen. Ich dachte immer das sei dasselbe. face-sad.

Gruß Dila
Mitglied: dila21
dila21 09.10.2014 um 09:13:20 Uhr
Goto Top
Ich werde jetzt Formularfelder versuchen, dann nochmal Textfelder. Hoffe das funktioniert dann. Vielen Dank. Du warst grad wirklich eine Hilfe.
Mitglied: colinardo
colinardo 09.10.2014 aktualisiert um 09:17:20 Uhr
Goto Top
Na dann, setze Bookmarks (auf Deutsch Textmarken) an die gewünschten Stellen und weise Ihnen im Code deine Daten zu ... wie das geht hatte ich ja ganz oben schon erwähnt.
Mitglied: dila21
dila21 09.10.2014 um 10:17:16 Uhr
Goto Top
Hallo Uwe,

ist es auch möglich, diese Daten aus einem anderen Dokument sich zu ziehen?
bei den Feldfunktionen sah das im code folgendermaßen aus.

oDoc.CustomDocumentProperties("Name") = Name

Ich habe jetzt eine Textmarke erstellt im Dokument. Und im Code das folgendermaßen abgeändert.

oDoc.Bookmarks("Name").Range.Text = Name

Dieses .Range.Text hab ich durch googeln im Inet gefunden. Ohne das bringt der Code einen Fehler. Und so läuft der Code durch, aber das Feld wird nicht gefüllt.
Hast du vielleicht eine Idee?

Gruß Dila
Mitglied: colinardo
colinardo 09.10.2014 aktualisiert um 10:27:53 Uhr
Goto Top
Zitat von @dila21:
Dieses .Range.Text hab ich durch googeln im Inet gefunden. Ohne das bringt der Code einen Fehler. Und so läuft der Code
durch, aber das Feld wird nicht gefüllt.
Klar das oben war auch nur ein Hinweis welches Objekt du verwenden musst, die Eigenschaften lassen sich ja per Intellisense rausfinden face-wink

Hier geht das einwandfrei:
oDoc.Bookmarks("Testmarke").Range.Text = "Dein text"
oder wenn du die Textmarke mit dem Inhalt der CustomProperty füllen willst:
oDoc.Bookmarks("Testmarke").Range.Text = oDoc.CustomDocumentProperties("DeineProperty").Value
wobei das dann aber doppelt gemoppelt wäre wenn du erst die Dokumenteigenschaften füllst, und hinterher nochmal die Textmarken....

Name kannst du ja nicht zuweisen face-smile muss ja ein String sein ...
Mitglied: dila21
dila21 09.10.2014 um 10:39:37 Uhr
Goto Top
Vielen Dank face-smile.

Jaa Name hatte ich genommen, weil der Name wird ja auch aus einem Textdokument über vb rausgezogen und im Word-Dokument eingetragen. Deshalb dieses Beispiel.
Vielen Dank. Dann geh ichs mal an face-smile. Dankee
Mitglied: dila21
dila21 14.10.2014 um 08:37:55 Uhr
Goto Top
Guten Morgen Zusammen,

Vielen Dank für die Informationen, das hat soweit jetzt ganz gut geklappt.
Ich hätte jetzt noch eine Frage, gibt es eine Möglich in VB, das der Code sozusagen
nur ein Feld ausfüllt, wenn dies vorhanden ist, ansonsten soll es überspringen werden.

Weil ich bekomme so sonst immer eine Fehlermeldung, wenn mal ein Textmarker
kein Attribut bekommt.

Gruß Dila
Mitglied: colinardo
Lösung colinardo 14.10.2014, aktualisiert am 07.11.2014 um 11:17:14 Uhr
Goto Top
Hallo Dila,
Zitat von @dila21:

Ich hätte jetzt noch eine Frage, gibt es eine Möglich in VB, das der Code sozusagen
nur ein Feld ausfüllt, wenn dies vorhanden ist, ansonsten soll es überspringen werden.
Weil ich bekomme so sonst immer eine Fehlermeldung, wenn mal ein Textmarker
kein Attribut bekommt.
kannst du folgendermaßen machen:
On Error Resume Next
Set bm = oDoc.Bookmarks("Test")  
If Not bm Is Nothing Then
    ' Bookmark ist vorhanden  hier dein Code  
Else
   ' Bookmark 'Test' ist nicht vorhanden  
End If
Grüße Uwe
Mitglied: dila21
dila21 07.11.2014 um 11:17:08 Uhr
Goto Top
Hallo Uwe,

zurück aus dem Urlaub, habe ich am Montag die Meldung bekommen, dass das ganze nun funktioniert hat. Vielen Dank nochmals.

Gruß Dila