Word Formularfelder füllen mit Daten aus Excel
Hallo,
in einer Wordvorlage sollen bestimmte Felder wie Name, Vorname, Durchwahl, etc. automatisch gefüllt werden.
Die benötigten Daten stehen in einer Excel Tabelle. Beim öffnen der Vorlage soll der aktuell angemeldete User ausgelesen werden, dieser dann in der Exceltabelle gesucht werden und die dazugehörigen Daten in die Wordvorlage übernommen.
Das Auslesen des Benutzers habe ich schon erledigt, lasse mir diesen aktuell in einer MsgBox ausgeben.
Nun komme ich aber leider nicht mehr weiter.
in einer Wordvorlage sollen bestimmte Felder wie Name, Vorname, Durchwahl, etc. automatisch gefüllt werden.
Die benötigten Daten stehen in einer Excel Tabelle. Beim öffnen der Vorlage soll der aktuell angemeldete User ausgelesen werden, dieser dann in der Exceltabelle gesucht werden und die dazugehörigen Daten in die Wordvorlage übernommen.
Das Auslesen des Benutzers habe ich schon erledigt, lasse mir diesen aktuell in einer MsgBox ausgeben.
Nun komme ich aber leider nicht mehr weiter.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 251769
Url: https://administrator.de/contentid/251769
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
15 Kommentare
Neuester Kommentar
Hallo,
die Frage könnte mit Hilfe von VBA gelöst werden. Die Stellen in dem Word-Dokument, die mit den Daten gefüllt werden sollen, werden als Bookmark/Textmarke mit eindeuztigen Namen angelegt und im Word-Dokument gespeichert.
Über die API Get UserName kann der angemeldete User gefunden werden; diesen mit der Find-Methode des Range-Objektes in Deiner Excel-Mappe suchen. Sofern er gefunden wurden, aus dem Excel heraus DAS Word-Dokument öffnen (z.b. Dim wrd as object, Set wrd=createobject("word.application"), wrd.activedocument.bookmarks.item("eindeutiger Name").range.text=WErt aus Excel-Zelle
Grüsse
JoeTee
die Frage könnte mit Hilfe von VBA gelöst werden. Die Stellen in dem Word-Dokument, die mit den Daten gefüllt werden sollen, werden als Bookmark/Textmarke mit eindeuztigen Namen angelegt und im Word-Dokument gespeichert.
Über die API Get UserName kann der angemeldete User gefunden werden; diesen mit der Find-Methode des Range-Objektes in Deiner Excel-Mappe suchen. Sofern er gefunden wurden, aus dem Excel heraus DAS Word-Dokument öffnen (z.b. Dim wrd as object, Set wrd=createobject("word.application"), wrd.activedocument.bookmarks.item("eindeutiger Name").range.text=WErt aus Excel-Zelle
Grüsse
JoeTee
Moin,
der Lösungsweg hängt immer davon ab, wo die Quelle der Daten, der Dateien ist. Ich war in der Annahme, das Excel-DOkument ist das führende Medium ggf. mit Daten, die nicht alle User haben, und das Word-Dokument der prozessulae Output von dem IT-Prozess.
Wenn das Word-Dokument an User geht, wäre die Einbindung von Code in das Dokument zu überdenken. Der WEg ist ähnlich. Mit der API den Usernamen auslesen (ACHTUNG: WIn64 verlangt andere Deklarationen !) und aus Word heraus die Ecel-mappe öffnen und mit Range und Find den Usernamen suchen.
Grüsse
JoeTee
der Lösungsweg hängt immer davon ab, wo die Quelle der Daten, der Dateien ist. Ich war in der Annahme, das Excel-DOkument ist das führende Medium ggf. mit Daten, die nicht alle User haben, und das Word-Dokument der prozessulae Output von dem IT-Prozess.
Wenn das Word-Dokument an User geht, wäre die Einbindung von Code in das Dokument zu überdenken. Der WEg ist ähnlich. Mit der API den Usernamen auslesen (ACHTUNG: WIn64 verlangt andere Deklarationen !) und aus Word heraus die Ecel-mappe öffnen und mit Range und Find den Usernamen suchen.
Grüsse
JoeTee
Moin zusammen,
das genannte mal zusammengefasst:
Grüße Uwe
das genannte mal zusammengefasst:
'Usernamen auslesen
Set objShell = CreateObject("Wscript.Shell")
strUsername = objShell.ExpandEnvironmentStrings("%username%")
'Excel Objekt erzeugen
Set objExcel = CreateObject("Excel.Application")
'Excel unsichtbar machen
objExcel.Visible = False
'Exceldatei öffnen
Set wb = objExcel.Workbooks.Open("C:\Ordner\excelfile.xlsx")
'Tabellenblat festlegen
Set ws = wb.Worksheets(1)
'Range festlegen in dem nach dem Namen gesucht wird (im Beispiel Spalte A)
Set rngSearch = ws.Range("A:A")
'Usernamen in dem Bereich finden
Set search_result = rngSearch.Find(strUsername,,-4163,1)
'Wenn eine Übereinstimmung gefunden wurde...
If Not search_result Is Nothing Then
' Als Beispiel Die Textmarke mit den Namen XXXXX durch den Text der Zelle nebenan einfügen....
ActiveDocument.Bookmarks("XXXX").Range.Text = search_result.Offset(0,1).Value
End If
'Workbook schließen (ohne zu speichern)
wb.Close False
'Excel beenden
objExcel.Quit
Zitat von @bluepython:
bin das ganze am Testen, das Macro bircht an der Stelle
ActiveDocument.Bookmarks("Vorname").Range.Text = search_result.Offset(0, 1).Value
ab, mit dem Fehler:
Laufzeitfehler 6028, Der Bereich kann nicht gelöscht werden
Worin befindet sich dein Bookmark ? Ich hoffe nicht das es ein geschütztes Formularfeld umschließt... By the way Formularfelder lassen sich mit Namen ansprechen ohne ein Bookmark zu verwenden.bin das ganze am Testen, das Macro bircht an der Stelle
ActiveDocument.Bookmarks("Vorname").Range.Text = search_result.Offset(0, 1).Value
ab, mit dem Fehler:
Laufzeitfehler 6028, Der Bereich kann nicht gelöscht werden
Zitat von @bluepython:
Habe den Fehler gerade gefunden, die Textmarke war Falsch, ich hatte ein Textformularfeld, dieses kann wohl nicht
überschrieben werden. Lässt man es weg und setzt an dieser stelle eine Textmarke (Einfügen, Textmarke) dann klappt
das ganze.
Formularfelder kannst du direkt so ansprechen und deren Inhalt setzen, ohne extra ein Bookmark zu erstellen:Habe den Fehler gerade gefunden, die Textmarke war Falsch, ich hatte ein Textformularfeld, dieses kann wohl nicht
überschrieben werden. Lässt man es weg und setzt an dieser stelle eine Textmarke (Einfügen, Textmarke) dann klappt
das ganze.
ActiveDocument.FormFields("NameDesFeldes").Result = search_result.Offset(0, 1).Value
Zitat von @bluepython:
Jetzt hätten wir noch ganz gerne in dem ganzen eine zusätzliche Option.
Es soll ein Fenster erscheinen, wo der aktuelle Benutzer angezeigt wird mit einer Abfrage, ob dieser benutzt werden soll, wenn nicht, dann soll man ein anderen eintragen können. Dieser soll dann in die Variable strUsername eingetragen werden und dann
Kein Problem, kannst du auf die Schnelle mit einer InputBox machenJetzt hätten wir noch ganz gerne in dem ganzen eine zusätzliche Option.
Es soll ein Fenster erscheinen, wo der aktuelle Benutzer angezeigt wird mit einer Abfrage, ob dieser benutzt werden soll, wenn nicht, dann soll man ein anderen eintragen können. Dieser soll dann in die Variable strUsername eingetragen werden und dann
strUsername = InputBox("Folgender Benutzername wird verwendet:", "Benutzername wählen", strUsername)
If MsgBox("Es wird der Benutzername '" & strUsername & "' verwendet möchten sie Ihn übernehmen?", vbQuestion Or vbYesNo) = vbNo Then
strUsername = InputBox("Geben sie den gewünschten Benutzernamen ein:", "Benutzername wählen", strUsername)
End If
Zitat von @JoeTee:
In letzterem Falle würde das über einer UserForm aus der Excel-Mappe heraus angehen, welche mehr Freiheitsgrade als eine InputBox bietet.
Das lässt sich natürlich auch machen. Auf der Userform lässt sich dann eine Listbox automatisch mit den Usernamen aus einem Range füllen:In letzterem Falle würde das über einer UserForm aus der Excel-Mappe heraus angehen, welche mehr Freiheitsgrade als eine InputBox bietet.
wenn die Usernamen z.B. in Spalte A liegen ginge dies so
ListBox1.List = Sheets(1).Range("A1", ws.Cells(ws.Rows.Count,1).End(-4162)).Value