Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Word Formularfelder füllen mit Daten aus Excel

Frage Microsoft Microsoft Office

Mitglied: bluepython

bluepython (Level 1) - Jetzt verbinden

13.10.2014, aktualisiert 22.10.2014, 16727 Aufrufe, 15 Kommentare

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.
Mitglied: JoeTee
LÖSUNG 13.10.2014, aktualisiert 22.10.2014
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
Bitte warten ..
Mitglied: bluepython
13.10.2014 um 13:58 Uhr
Hallo JoeTee,

der Ansatz klingt ganz gut, nur möchte ich die Excel Datei im Grunde gar nicht öffnen, höchstens im Hintergrund.
Der Username wird in dem Word-Dokument ausgelesen mit Get UserName und dann soll vie Makro die Excel Datei durchsucht werden.
Bitte warten ..
Mitglied: JoeTee
13.10.2014 um 14:15 Uhr
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
Bitte warten ..
Mitglied: colinardo
13.10.2014, aktualisiert um 19:28 Uhr
Moin zusammen,
das genannte mal zusammengefasst:
01.
'Usernamen auslesen 
02.
Set objShell = CreateObject("Wscript.Shell") 
03.
strUsername = objShell.ExpandEnvironmentStrings("%username%") 
04.
 
05.
'Excel Objekt erzeugen 
06.
Set objExcel = CreateObject("Excel.Application") 
07.
'Excel unsichtbar machen 
08.
objExcel.Visible = False 
09.
'Exceldatei öffnen 
10.
Set wb = objExcel.Workbooks.Open("C:\Ordner\excelfile.xlsx") 
11.
'Tabellenblat festlegen 
12.
Set ws = wb.Worksheets(1) 
13.
'Range festlegen in dem nach dem Namen gesucht wird (im Beispiel Spalte A) 
14.
Set rngSearch = ws.Range("A:A") 
15.
'Usernamen in dem Bereich finden 
16.
Set search_result = rngSearch.Find(strUsername,,-4163,1) 
17.
'Wenn eine Übereinstimmung gefunden wurde... 
18.
If Not search_result Is Nothing Then 
19.
	' Als Beispiel Die Textmarke mit den Namen XXXXX durch den Text der Zelle nebenan einfügen.... 
20.
	ActiveDocument.Bookmarks("XXXX").Range.Text = search_result.Offset(0,1).Value 
21.
End If 
22.
'Workbook schließen (ohne zu speichern) 
23.
wb.Close False 
24.
'Excel beenden 
25.
objExcel.Quit
Grüße Uwe
Bitte warten ..
Mitglied: bluepython
13.10.2014 um 15:16 Uhr
Hallo,

und danke erstmal für den Code, ich werde es morgen testen und ein Feedback geben.
Bitte warten ..
Mitglied: JoeTee
13.10.2014 um 15:57 Uhr
zu Zeile 10

ggf. noch die Excel-Mappe nur im "Read-Only-Modus" öffnen

Set wb = objExcel.Workbooks.Open ("C:\Ordner\excelfile.xlsx",ReadOnly=True)
Bitte warten ..
Mitglied: bluepython
14.10.2014 um 11:45 Uhr
Hallo,

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
Bitte warten ..
Mitglied: colinardo
LÖSUNG 14.10.2014, aktualisiert 22.10.2014
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.
Bitte warten ..
Mitglied: bluepython
14.10.2014 um 11:59 Uhr
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.

Vielen Dank für die Hilfe
Bitte warten ..
Mitglied: colinardo
LÖSUNG 14.10.2014, aktualisiert 22.10.2014
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:
ActiveDocument.FormFields("NameDesFeldes").Result = search_result.Offset(0, 1).Value
Das Dokument kann dabei geschützt bleiben.
Bitte warten ..
Mitglied: bluepython
22.10.2014 um 12:53 Uhr
Hallo,
ich muss mich noch mal zu Wort melden.
Das hier ist mein endgültiger Code, der auch sehr schön funktioniert.

Sub AutoOpen()

'Usernamen auslesen
Set objShell = CreateObject("Wscript.Shell")
strUsername = objShell.ExpandEnvironmentStrings("%username%")
'MsgBox (strUsername)

'Excel Objekt erzeugen
Set objExcel = CreateObject("Excel.Application")

'Excel unsichtbar machen
objExcel.Visible = False

'Exceldatei öffnen
Set wb = objExcel.Workbooks.Open("C:\Dokumente und Einstellungen\apyter\Desktop\Neuer Ordner\Personen_brief.xls", ReadOnly = True)

'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("Name").Range.Text = search_result.Offset(0, 1).Value
ActiveDocument.Bookmarks("Abteilung").Range.Text = search_result.Offset(0, 4).Value
ActiveDocument.Bookmarks("Telefon").Range.Text = search_result.Offset(0, 3).Value
ActiveDocument.Bookmarks("Fax").Range.Text = search_result.Offset(0, 5).Value
ActiveDocument.Bookmarks("Email").Range.Text = search_result.Offset(0, 2).Value
ActiveDocument.Bookmarks("Funktion").Range.Text = search_result.Offset(0, 6).Value
ActiveDocument.Bookmarks("Name_2").Range.Text = search_result.Offset(0, 1).Value
End If
'Workbook schließen (ohne zu speichern)
wb.Close False
'Excel beenden
objExcel.Quit

End Sub

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 Rest wie jetzt auch.
Bitte warten ..
Mitglied: colinardo
22.10.2014, aktualisiert um 13:17 Uhr
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 machen
01.
strUsername = InputBox("Folgender Benutzername wird verwendet:", "Benutzername wählen", strUsername)
oder mit zwischengeschalteter Abfrage via Msgbox:
01.
If MsgBox("Es wird der Benutzername '" & strUsername & "' verwendet möchten sie Ihn übernehmen?", vbQuestion Or vbYesNo) = vbNo Then 
02.
   strUsername = InputBox("Geben sie den gewünschten Benutzernamen ein:", "Benutzername wählen", strUsername) 
03.
End If
Grüße Uwe
Bitte warten ..
Mitglied: JoeTee
LÖSUNG 22.10.2014, aktualisiert um 13:17 Uhr
soll der andere Benutzer ein beliebiger anderer sein oder aus der Liste der Excel-Mappe kommen ? In letzterem Falle würde das über einer UserForm aus der Excel-Mappe heraus angehen, welche mehr Freiheitsgrade als eine InputBox bietet.
Bitte warten ..
Mitglied: bluepython
22.10.2014 um 13:18 Uhr
Einer aus der Liste.
DANKE colinardo, funktioniert gut, genau das was ich haben wollte, im Grunde ganz einfach, aber manchmal sieht man den Wald vor lauter Bäumen nicht.
Bitte warten ..
Mitglied: colinardo
22.10.2014, aktualisiert um 13:25 Uhr
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:
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
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Word Textmarke in Formularfeld schreiben
Frage von hausensMicrosoft Office7 Kommentare

Hallo, Wir haben ein CRM über welches wir auch Nachrichten versenden. Über die Textmarken kann man auf Daten wie ...

Microsoft Office
Excel 2013 - Daten aus Word Datei ohne Trennzeichen importieren
Frage von AtompiltzMicrosoft Office4 Kommentare

Hallo zusammen, ich möchte die Adressdaten aus einer Word-Datei in Excel importieren. Jede Adresse ist in einer Zeile geschrieben, ...

VB for Applications
VBA Word Formularfelder Effekt von Bearbeitungseinschränkung auf Result-Änderung
gelöst Frage von tombola22VB for Applications3 Kommentare

Hallo zusammen, ich schreibe momentan an einem Word-Makro, mit dem ich ausgehend von einer existierenden Tabelle, weitere - bis ...

Microsoft Office
Excel Worksheet in Word
gelöst Frage von 118080Microsoft Office

Abend Zusammen :-) Wir haben ein Word Dokument und darin ein Excel Sheet verknüpft. Ich habe die Verknüpfung in ...

Neue Wissensbeiträge
Microsoft

Update KB4073578 für AMD CPU (Spectre und Meltdown Lücke)

Information von sabines vor 5 StundenMicrosoft

Wegen Problemen (BOSD, nicht startende PCs) wurde das Update KB4056897 und KB4056894 für AMD CPUs zurückgezogen. Dieses Update KB4073578 ...

Mac OS X

MacOS wo ist die Tilde ?

Tipp von Alchimedes vor 18 StundenMac OS X3 Kommentare

Hallo, ich hab eine MacOS qwertz Keyboard auf US Layout umgestellt da die Sonderzeichen besser erreichbar sind. Leider fehlt ...

Datenschutz

Weitere Informationen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 1 TagDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 1 TagWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Heiß diskutierte Inhalte
Batch & Shell
Anmeldevorgang für Informatikraum (Schule) unter Windows
gelöst Frage von IngenieursBatch & Shell25 Kommentare

Hey zusammen, ich werde in naher Zukunft den Informatik Raum meiner jetzigen Schule von dem aktuellen Betreiber übernehmen (Vertrag ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von fyrb38Windows 1019 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...

Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
Frage von Windows10GegnerNetzwerkgrundlagen18 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...