Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 11119 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

Microsoft Office
gelöst Aus Outlook 2013 Daten aus Tabellenfeldern in Excel übertragen (9)

Frage von ich2110 zum Thema Microsoft Office ...

VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Microsoft Office
gelöst Excel Pdf Datei als Icon Symbol in Word einfügen per Drag and drop? (4)

Frage von Geforce zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...