Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: FormFields Add (Formularfelder in Word)

FormFields Add (Formularfelder in Word)
14.07.2014 14:34:48
Knoof
Hallo nochmal,
Ich bastel momentan an einer UserForm rum die am ende durch einen Druck Button ein Zeugnis erstellt mit den Daten die in Excel gespeichert wurden.
Das Problem besteht darin:
Ich habe 3 Checkboxen, Für jede Checkbox habe ich einen verschiedenen Text hinterlegt(in zellen gespeichert).
Wenn nun die erste Checkbox angekreuzt ist, soll nach drücken des "Druck" Button dafür ein Textformularfeld in Word erstellt werden werden und der dazu hinterlegte Text in Zelle (1, 1) soll in das erstellte Formularfeld eingefügt werden.
das gleiche soll bei den anderen Checkboxen passieren, und wenn eine Checkbox nicht angekreuzt ist dann solls halt nicht passieren.
Mir wurden bereits tipps zu den Form Fields befehlen gegeben, allerdings konnte ich dadurch noch nichts nützliches erstellen.
Grob erklärt:
If checkbox1.Value = True Then
'erstelle Textfeld "Text1" in ausgewählter word datei und fülle es
Else
If checkbox2.Value = True Then
'erstelle Textfeld "Text2" in ausgewählter word datei und fülle es
Das füllen habe ich bereits hinbekommen jedoch mit nauell erstellten textfeldern.
Danke im Vorraus

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: FormFields Add (Formularfelder in Word)
15.07.2014 17:07:45
fcs
Hallo Knoof,
hier ein Makro, wie man es unter Word lösen könnte.
Die Einfügeposition der Formular-Elemente wird dabei durch Textmarken im Worddokument festgelegt.
Das Ganze müsstest du jetzt in dein Excel-Makro einbauen, wobei wichtig ist, dass du in deinem Exceldokument eine Objekt-Variable hast, die stellvertretend für dein Worddokment ist.
Gruß
Franz
Sub Makro3()
'Erstellt unter Word2010
Dim objContentControl As Word.ContentControl
Dim wdDoc As Word.Document
Set wdDoc = ActiveDocument
With wdDoc
'nur Text-Inhalts-Steuerelement einfügen
With .Bookmarks("PosTextbox01")
Set objContentControl = .Range.ContentControls.Add(1) '1 = wdContentControlText
With objContentControl
.Title = "Textbox001"
.Tag = "Textbox001"
.MultiLine = True
.Range.Text = "Mein Test-Text" & Chr(10) & "Zweite Zeile"
End With
End With
'zweites Text-Inhalts-Steuerelement einfügen
With .Bookmarks("PosTextbox02")
Set objContentControl = .Range.ContentControls.Add(1) '1 = wdContentControlText
With objContentControl
.Title = "Textbox002"
.Tag = "Textbox002"
.MultiLine = True
.Range.Text = "Mein Test-Text 002" & Chr(10) & "Zweite Zeile 002"
End With
End With
End With
End Sub

Anzeige
AW: FormFields Add (Formularfelder in Word)
16.07.2014 08:57:51
Knoof
Hallo Franz,
Ich habe grade erst gesehen das du geantwortet hast.
Danke schonmal,
Jedoch kann ich mit meinem Kenntnisstand noch nicht so viel damit anfangen :D
1. heißt das jetzt das ich dein Makro in word oder excel einfügen soll?
2. "Die Einfügeposition der Formular-Elemente wird dabei durch Textmarken im Worddokument festgelegt"
Was meinst du damit? Es sollen ja Textmarken automatisch erstellt werden, die im nachhinein gefüllt werden sollen.
3. "wichtig ist, dass du in deinem Exceldokument eine Objekt-Variable hast, die stellvertretend für dein Worddokment ist" Das würde Wie aussehen ? :|
Gruß,
Knoof

Anzeige
AW: FormFields Add (Formularfelder in Word)
16.07.2014 13:39:10
fcs
Hallo Knoof,
1. heißt das jetzt das ich dein Makro in word oder excel einfügen soll?
Das Makro bzw. die relevanten Abschnitte müssen in dein Excel-Makro eingebaut werden, denn du willst ja alles von Excel aus steuern.
2. "Die Einfügeposition der Formular-Elemente wird dabei durch Textmarken im Worddokument festgelegt"
Was meinst du damit? Es sollen ja Textmarken automatisch erstellt werden, die im nachhinein gefüllt werden sollen.

Ich spreche hier von Textmarken nicht Textboxen.
Mit Textmarken kann man im Worddokument für Positionen oder Textbereiche Namen festlegen.
Dies ist der einfachste Weg eine Position im Text festzulegen, an der später noch Text oder etwas anderes eingefügt werden soll.
Diese Textmarken musst du manuell in deinem Worddokument einfügen.
Wenn du keine Textmarken verwendest musst du anders definieren, wo Excel die Formular-Textboxen einfügen soll.
3. "wichtig ist, dass du in deinem Exceldokument eine Objekt-Variable hast, die stellvertretend für dein Worddokment ist" Das würde Wie aussehen ? :|
Du schreibst, dass du den Inhalt aus Excelzellen schon in im Worddokument vorhandene Textboxen einfügen kannst. Dazu musst du ja schon irgendwie das Worddokument angesprochen haben. Da müsste dann auch eine entsprechende Zuweisung des Worddokuments zu der Objektvariablen möglich sein. Ins Blaue kann ich dir hier aber auch nichts programmieren. Es kommt immer etwas auf die Umstände an.
ggf. solltest du hier mal eine abgespeckte/anonymisierte Version deine Word und Exeldatei in einem ZIP-File hier hochladen, dann kann man konkreter helfen.
Ganz nebenbei:
Warum nutzt du nicht die Serienbrief-Funktion von Word mit einer Excel-Tabelle als Datenquelle?
Gruß
Franz

Anzeige
AW: FormFields Add (Formularfelder in Word)
16.07.2014 15:22:59
Knoof
Soo,
Hier eine sehr abgespeckte version von meinem Programm, stellt dir einfach noch ca. 6 Optionen mehr zum auswählen vor.
https://www.herber.de/bbs/user/91529.xlsm
Wenn a) angekreuzt ist soll Text für a) durch "Druck" in die word datei geschrieben werden.
Wenn b) angekreuzt ist ebenfalls
auch wenn beide gleichzeitig angekreuzt sind, werden beide texte hinein geschrieben.
Das Problem was ich habe ist nun, dass wenn nur a) angekreuzt ist, die vorher erstellte Formularfeld für b) leer bleibt und unnötig Platz wegnimmt. Stellt dir dies mal mit 8 vorher erstellten Formularfeldern vor.
Deshalb suche ich eine Lösung das wenn ich a) ankreuze und "Druck" drücke auch nur für a) ein Formularfeld erstellt wird und das für b) weg bleibt und keinen Platz klaut.
Ebenso wenn beide angekreuzt sind, dann soll für beide ein Formularfeld erstellt werden wo dann die Text hinein geschrieben werden.
Userbild
Ich hoffe so ist es deutlicher.
Gruß,
Knoof

Anzeige
AW:kleine Zusatzfragen
16.07.2014 17:11:35
fcs
Hallo Knoof,
befinden sich zwischen den Eingabe-Formlarfeldern noch vorgegebene Text (d.h. je nach gewählten Optionen werden unterschiedliche Wordvorlagen verwendet)
oder sollen die Formularfelder getrennt durch Zeilenschaltung(en) ab einer bestimmten Position untereinander eingefügt werden?
Welchen Typ von Textfeld/Formularfeld verwendest du?
Optisch vom Screenshot sieht es aus wie Textfeld aus "Formulare aus Vorversion".
Gruß
Franz

Anzeige
AW: FormFields Add (Formularfelder in Word)
17.07.2014 07:49:08
fcs
Hallo Knoof,
ich hab in deiner Exceldatei das Makro der Schaltfläche/des Userforms entsprechend ergänzt.
In der ZIP-Datei findest du auch eine entsprechend vorbereitete Worddatei mit einer Textmarke an der Formular-Textelemente eingefügt werden.
Da ich mit den erforderlichen Wordanweisungen nicht so 100%ig zurechtgekommen bin musste ich hier mit Select und Selection arbeiten.
Gruß
Franz
https://www.herber.de/bbs/user/91541.zip

Anzeige
AW: FormFields Add (Formularfelder in Word)
18.07.2014 08:33:30
Knoof
Vielen Dank! Genau so wie es bei deinem Code funktioniert stelle ich mir das vor!
Ich versuche nun deinen Quellcode irgendwie in meinen einzubauen, ich hoffe das klappt einwandfrei dann wäre mein Programm nämlich fertig :)
eine kleine Frage noch:
Du hast nur eine Textmarke gesetzt, jedoch ist es möglich option a) und b) hinein zu schreiben?
Ich dachte pro eingefügten Text bzw. Forularfeld bräcuhte ich eine Textmarke.
antwort auf deine Frage: Nein, zwischen den einzelnen Formularfeldern soll kein Text mehr stehen, es steht lediglich ein Fester Text am Anfang(Einleitung) und am ende.
Ich melde mich bald obs klappt oder nicht :)
Gruß,
Knoof

Anzeige
AW: FormFields Add (Formularfelder in Word)
18.07.2014 09:54:58
fcs
Hallo Knoof,
Du hast nur eine Textmarke gesetzt, jedoch ist es möglich option a) und b) hinein zu schreiben?
Ich dachte pro eingefügten Text bzw. Formularfeld bräuchte ich eine Textmarke.

Wenn die Informationen/Formularelemente aus Excel nacheinander im Word-Dokument eingefügt werden sollen, dann benötigt man nur eine Textmarke als Vorgabe für die Einfügeposition. Die ggf. erforderlichen Absatzschaltungen kann man per Makro einfügen. Sollen die Exceldaten an unterschiedlichen Positionen eingefügt werden, dann ist für jede Einfügeposition eine Textmarke erforderlich.
Grundsätzlich kann man die Einfügeposition auch anders festlegen; z.B. vor dem 3. Absatz oder auch nach einem Bestimmten Wort (wenn dieses eindeutig ist) etc. Textmarken sind aber immer eindeutig und in der Programmierung einfach zu handhaben.
Gruß
Franz

Anzeige
AW: FormFields Add (Formularfelder in Word)
18.07.2014 10:00:05
Knoof
Okay, verstanden.
Also dein Code klappt bei mir momentan sehr gut :) Jedoch stellt sich bei mir das Problem, sobald der Text welcher eingefügt werden soll länger als 255 zeichen ist, kann der Text nicht eingefügt werden bzw übertragen werden.
Gibt es dafür noch evtl eine Lösung die ich irgendwo in den Code einbauen kann?
Das Problem hatt ich vorher nicht als ich dies hier verwendet habe:
wdAnw.ActiveDocument.Bookmarks("Text5").Range.Fields(1).Result.Text = Worksheets("Auswertungen").Cells(zeile, 5)
Nur wüsste ich nicht diesen Satz in dein Code zu integrieren.

Die ggf. erforderlichen Absatzschaltungen kann man per Makro einfügen.

Diese bräuchte ich auch...
Gruß,
Knoof

Anzeige
AW: FormFields Add (Formularfelder in Word)
18.07.2014 12:10:18
fcs
Hallo Knoof,
evtl. gibt es für das von mir gewählte Formular-Steuerelement eine Längenbeschränkung. Das muss ich nochmals prüfen.
Muss der Text aus Excel in Word denn unbedingt in ein Formular-Steuerelement eingefügt werden?
Kann der Text evtl. einfach als normaler Text in Word eingefügt werden?
Gruß
Franz

Anzeige
AW: FormFields Add (Formularfelder in Word)
18.07.2014 12:36:21
Knoof
Hallo Franz,
Es ist ganz egal wie der Text dort eingefügt wird, hauptsache er steht am ende in dem word dokument und wird gedruckt.
Ich kannte nur bisher keine andere Möglichkeit den Text in ein Word dokument zu kriegen, wenn du da eine bessere Möglichkeit weißt, wäre ich sehr Glücklich :)
Heute muss das noch klappen da ich die USerForm heute fertigstellen muss, deswegen bin ich sehr dankbar das du mir bei diesem letzten Schritt hilfst!
Gruß,
Knoof

Anzeige
AW: FormFields Add (Formularfelder in Word)
18.07.2014 13:45:29
fcs
Hallo Knoof,
mit direktem Einfügen des Textes in das Word-Dokument wird es einfacher.
Passe im Userform Code die beiden folgenden Prozeduren an.
In CommandButton3_Click fällt dabei beim Aufruf der Sub "prcWordFormularText" nur der Parameter "strBox" für den Namen des Steuerelements weg.
Gruß
Franz
Private Sub CommandButton3_Click()
Dim intCount As Integer
Dim strDocName As String
strDocName = "D:\Test\KnoofTest.docx" '  Dateiname anpassen !!
'Wordanwendung öffnen
Set wdApp = VBA.CreateObject("Word.Application")
wdApp.Visible = True
'Vorlagedatei öffnen
Set wdDoc = wdApp.documents.Open(strDocName)
intCount = 0
Set wdRange = wdDoc.Bookmarks("FormularPosition").Range 'Name ggf. anpassen
'Formularfelder in umgekehrter Reihenfolge von unten nach Oben einfügen
If Me.CheckBox2 = True Then 'Option b)
Call prcWordFormularText(strText:=Sheets("Tabelle1").Cells(2, 1).Text, _
intCount:=intCount)
intCount = intCount + 1
End If
If Me.CheckBox1 = True Then 'Option a)
Call prcWordFormularText(strText:=Sheets("Tabelle1").Cells(1, 1).Text, _
intCount:=intCount)
intCount = intCount + 1
End If
Me.Hide
'Datei drucken und ohne speichern schließen
wdDoc.PrintOut
wdDoc.Close savechanges:=False
'Wordanwendung beenden
wdApp.Quit
Set wdDoc = Nothing: Set wdApp = Nothing
Me.Show
End Sub
Private Sub prcWordFormularText(ByVal strText As String, ByVal intCount As Integer)
wdRange.Select
If intCount > 0 Then
wdApp.Selection.TypeParagraph
wdApp.Selection.MoveLeft 1, 1 '1 Zeichene nach links
End If
wdApp.Selection.TypeText strText
End Sub

Anzeige
AW: FormFields Add (Formularfelder in Word)
18.07.2014 14:02:55
Knoof
Geil funktioniert! super vielen vielen Dank.
WIe kriege ich nun absätze zwischen die einzelnen Texte?
Gruß,
Knoof

AW: FormFields Add (Formularfelder in Word)
18.07.2014 14:04:48
fcs
Hallo Knoof,
hier eine Variante, die ohne die 2. Sub arbeitet.
Die gewählten Optionstexte werden mit Absatzschaltung getrennt in einer Variablen zusammengefügt und in einem Rutsch im Worddokument eingefügt.
Nachfolgend das entsprechend modifizierte Makro der Schaltfläche.
Gruß
Franz
Private Sub CommandButton3_Click()
Dim intCount As Integer
Dim strDocName As String
Dim strText As String                                           'neu!!
strDocName = "D:\Test\KnoofTest.docx" '           Dateiname anpassen !!
'Wordanwendung öffnen
Set wdApp = VBA.CreateObject("Word.Application")
wdApp.Visible = True
'Vorlagedatei öffnen
Set wdDoc = wdApp.documents.Open(strDocName)
intCount = 0
Set wdRange = wdDoc.Bookmarks("FormularPosition").Range 'Name ggf. anpassen
'Texte in umgekehrter Reihenfolge von unten nach Oben in Variable zusammensetzen
If Me.CheckBox2 = True Then 'Option b)
With Sheets("Tabelle1").Cells(2, 1)
If strText = "" Then strText = .Text Else strText = .Text & Chr(13) & strText
End With
End If
If Me.CheckBox1 = True Then 'Option a)
With Sheets("Tabelle1").Cells(1, 1)
If strText = "" Then strText = .Text Else strText = .Text & Chr(13) & strText
End With
End If
wdRange.Select                          'neu
wdApp.Selection.TypeText strText        'neu
Me.Hide
'Datei drucken und ohne speichern schließen
wdDoc.PrintOut
wdDoc.Close savechanges:=False
'Wordanwendung beenden
wdApp.Quit
Set wdDoc = Nothing: Set wdApp = Nothing
Me.Show
End Sub

Anzeige
AW: FormFields Add (Formularfelder in Word)
18.07.2014 14:22:17
Knoof
Wow, es klappt alles wie geschmiert.
Vielen Dank. Du hast mir sehr geholfen!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Formularfelder in Word aus Excel erstellen


Schritt-für-Schritt-Anleitung

  1. Vorbereitung: Stelle sicher, dass Du eine Word-Vorlage hast, in der die Textmarken für die Formularfelder vorhanden sind. Diese Textmarken dienen als Platzhalter für die Daten, die Du aus Excel einfügen möchtest.

  2. Excel-Vorbereitung: Lege eine UserForm in Excel an, die Checkboxen für die verschiedenen Optionen enthält.

  3. VBA-Makro erstellen: Füge den folgenden VBA-Code in das Excel-Modul ein, um die Formularfelder in Word zu erstellen und die Daten einzufügen.

    Private Sub CommandButton3_Click()
       Dim intCount As Integer
       Dim strDocName As String
       Dim strText As String                                           'neu!!
       strDocName = "D:\Test\KnoofTest.docx" '           Dateiname anpassen !!
       'Wordanwendung öffnen
       Set wdApp = VBA.CreateObject("Word.Application")
       wdApp.Visible = True
       'Vorlagedatei öffnen
       Set wdDoc = wdApp.documents.Open(strDocName)
       intCount = 0
       Set wdRange = wdDoc.Bookmarks("FormularPosition").Range 'Name ggf. anpassen
    
       'Texte in umgekehrter Reihenfolge von unten nach Oben in Variable zusammensetzen
       If Me.CheckBox2 = True Then 'Option b)
           With Sheets("Tabelle1").Cells(2, 1)
               If strText = "" Then strText = .Text Else strText = .Text & Chr(13) & strText
           End With
       End If
       If Me.CheckBox1 = True Then 'Option a)
           With Sheets("Tabelle1").Cells(1, 1)
               If strText = "" Then strText = .Text Else strText = .Text & Chr(13) & strText
           End With
       End If
    
       wdRange.Select                          'neu
       wdApp.Selection.TypeText strText        'neu
       Me.Hide
       'Datei drucken und ohne speichern schließen
       wdDoc.PrintOut
       wdDoc.Close savechanges:=False
       'Wordanwendung beenden
       wdApp.Quit
       Set wdDoc = Nothing: Set wdApp = Nothing
       Me.Show
    End Sub
  4. Testen: Starte die UserForm, wähle die gewünschten Checkboxen aus und klicke auf den Druck-Button. Überprüfe, ob die Formularfelder in Word korrekt erstellt wurden.


Häufige Fehler und Lösungen

  • Fehler: Text wird nicht eingefügt: Überprüfe, ob die Textmarken in Deiner Word-Vorlage korrekt gesetzt sind. Wenn die Textmarken fehlen, kann der Text nicht eingefügt werden.

  • Fehler: Text überschreitet 255 Zeichen: Stelle sicher, dass Du den Text nicht in ein Formular-Steuerelement einfügst, das diese Beschränkung hat. Es ist besser, den Text direkt in das Dokument einzufügen, wie im obigen Code gezeigt.


Alternative Methoden

  • Serienbrieffunktion in Word nutzen: Eine einfachere Möglichkeit, Daten aus Excel in Word zu übertragen, ist die Verwendung der Serienbrieffunktion. Du kannst Deine Excel-Tabelle als Datenquelle verwenden und die benötigten Felder direkt in Word einfügen.

  • Excel Textfeld Formularsteuerelement einfügen: Du kannst auch direkt in Excel Textfeld-Formularsteuerelemente verwenden und die Daten von dort in Dein Word-Dokument übertragen.


Praktische Beispiele

  1. Einfügen eines Textformularfeldes in Word:

    Angenommen, Du hast eine Checkbox für „Option A“. Wenn diese Checkbox aktiviert ist, wird der Text aus Zelle A1 in ein Textformularfeld in Word eingefügt. Das funktioniert ähnlich wie im obigen VBA-Code.

  2. Dynamisches Erstellen von Formularfeldern:

    Wenn mehrere Checkboxen aktiviert sind, kannst Du den Text aus mehreren Zellen in einem einzigen Word-Dokument zusammenführen. Verwende die oben gezeigte Methode, um die Texte in einer Variablen zu sammeln und in Word einzufügen.


Tipps für Profis

  • Verwende Konstanten: Definiere Konstanten für die verschiedenen Textmarken in Deinem Code, um die Lesbarkeit zu erhöhen.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in Deinem VBA-Code, um unerwartete Fehler während der Ausführung abzufangen.

  • Dokumentation: Kommentiere Deinen Code gut, damit Du und andere Benutzer später verstehen, was jeder Teil des Codes tut.


FAQ: Häufige Fragen

1. Wo finde ich die Textmarken in Word? Textmarken kannst Du über die Registerkarte "Einfügen" in Word hinzufügen. Gehe zu "Textmarke", um eine neue Textmarke an der gewünschten Stelle zu erstellen.

2. Wie kann ich Formularfelder in Word anpassen? Du kannst die Eigenschaften der Formularfelder in Word ändern, indem Du mit der rechten Maustaste auf das Feld klickst und "Eigenschaften" auswählst. Dort kannst Du das Feld anpassen, z.B. die Größe oder den Text.

3. Gibt es eine Längenbeschränkung für Formularfelder? Ja, einige Formularfelder haben eine Beschränkung von 255 Zeichen. Es ist besser, den Text direkt in das Word-Dokument einzufügen, um diese Einschränkung zu vermeiden.

4. Kann ich die Checkboxen in Excel anders anordnen? Ja, Du kannst die Checkboxen in der UserForm beliebig anordnen. Achte darauf, dass die Logik in Deinem VBA-Code entsprechend angepasst wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige