Werte über VB in Word-Datei-Felder einlesen
Hallo zusammen,
ich habe ein Problem
. 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
ich habe ein Problem
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 250815
Url: https://administrator.de/forum/werte-ueber-vb-in-word-datei-felder-einlesen-250815.html
Ausgedruckt am: 19.04.2025 um 10:04 Uhr
16 Kommentare
Neuester Kommentar
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
Grüße Uwe
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
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 ?
Moin Dila,
naja wenn das Plugin "normalen" Text entfernt wäre das ja eine Katastrophe
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
naja wenn das Plugin "normalen" Text entfernt wäre das ja eine Katastrophe
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
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 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.
Hier geht das einwandfrei:
oDoc.Bookmarks("Testmarke").Range.Text = "Dein text"
oDoc.Bookmarks("Testmarke").Range.Text = oDoc.CustomDocumentProperties("DeineProperty").Value
Name kannst du ja nicht zuweisen
Hallo Dila,
Grüße Uwe
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: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.
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