AW: Textmarken in Textfeldern in Word ansprechen?
24.09.2007 15:28:00
fcs
Hallo Kasimir,
ich hab hier mal eine Beispielprozedur um von Excel aus ein Wordformular zu füllen. Für Checkboxen und Textfelder ist dei Syntax unterschiedlich. Sinnvoller Weise übergibt man nach Word die die Text-Eigenschaft der Zellen. Dann wird der Inhalt so in Word eingetragen, wie er in Excel dargestellt wird (betrifft Datum-, Zahlen-, Währungsformate)
Mit "als Wordtabelle aufbauen" meine ich, dass du dein Formular Word-Tabelle aufbaust. Dabei ist es kein Muss, aber sinnvoll, dass die Vorhabetexte und die Ausfülltexte in separate Zellen eingetragen werden. Durch die Zellen der Tabellen ist die Spalten-Position der Texte fixiert, selbst wenn der Ausfülltext etwas länger sein sollte wird der Formularaufbau nicht zerstört, die Tabellenreihe wird dann ggf. bei entsprechender Einstellung etwas höher.
MfG
Franz
'###### fcs, aktualisiert 2007-09-24 ######
'Zur korrekten Funktion der Prozedur muss im Excel-VBA-Editor unter Extras-->Verweise _
der Verweis auf die "Microsoft Word x.y Object Library" als verfügbar markiert werden.
'Prozedur wurde erstellt unter Office2003 (Word2003/Excel2003)
'MS Word muss geöffnet sein bevor die Prozedur gestarte wird. Im Worddokument muss der _
Formularschutz aktiv sein.
Sub Daten_in_Wordformular()
'Fügt Daten aus Excel an ein Worddokument in Formularfelder ein
'Deklaration Word-Objekte
Dim wdDoc As Word.Document
'Deklaration Excel-Objekte
Dim wks As Worksheet
'Deklaration allgemeine Variablen
Dim strWordDatei As String
Dim FehlerNr As Integer
On Error GoTo Fehler
Application.ScreenUpdating = False
Set wks = ActiveWorkbook.Worksheets("Tabelle1") 'Tabelle mit zu exportierenden Daten
Application.ActivateMicrosoftApp xlMicrosoftWord
FehlerNr = 1
GoTo weiter03
'Worddokument laden in das eingefügt werden soll
strWordDatei = "C:\Eigene Dateien\Dokumente\FormularMuster.doc"
'Prüfung ob Word-Dokument schon geöffnet
For Each wdDoc In Word.Documents
If LCase(Word.ActiveDocument.FullName) = LCase(strWordDatei) Then
If MsgBox("Das Musterdokument ist schon geöffnet!" & vbLf & vbLf & _
"Trotzden weitermachen?", vbQuestion + vbOKCancel, "Datentransfer nach Word") _
= vbCancel Then
GoTo weiter01
Else
Exit For
End If
End If
Next
If wdDoc Is Nothing Then
Set wdDoc = Word.Documents.Open(Filename:=strWordDatei, ReadOnly:=True)
Else
wdDoc.Activate
End If
GoTo weiter02
weiter03:
'Formular im aktiven Dokument in Word ausfüllen
Set wdDoc = Word.ActiveDocument
weiter02:
Select Case wks.Cells(1, 2).Value
'Checkboxen Werte zuweisen
Case "Herr"
wdDoc.FormFields("chkHerr").CheckBox.Value = 1
wdDoc.FormFields("chkFrau").CheckBox.Value = 0
wdDoc.FormFields("chkFirma").CheckBox.Value = 0
Case "Frau"
wdDoc.FormFields("chkHerr").CheckBox.Value = 0
wdDoc.FormFields("chkFrau").CheckBox.Value = 1
wdDoc.FormFields("chkFirma").CheckBox.Value = 0
Case "Firma"
wdDoc.FormFields("chkHerr").CheckBox.Value = 0
wdDoc.FormFields("chkFrau").CheckBox.Value = 0
wdDoc.FormFields("chkFirma").CheckBox.Value = 1
Case Else
MsgBox "Falscheingabe bei Herr/Frau/Firma"
End Select
'Text Felderausfüllen, wobei die Formlarfelder in Word auch _
als Text, Zahl oder Datum eingerichtet sein
wdDoc.FormFields("Name").Result = wks.Cells(3, 1).Text
wdDoc.FormFields("Vorname").Result = wks.Cells(3, 2).Text
wdDoc.FormFields("Datum").Result = wks.Cells(3, 3).Text
wdDoc.FormFields("Strasse").Result = wks.Cells(6, 1).Text
wdDoc.FormFields("PLZ").Result = wks.Cells(6, 2).Text
wdDoc.FormFields("Ort").Result = wks.Cells(6, 3).Text
wdDoc.FormFields("Familienstand").Result = wks.Cells(6, 4).Text
wdDoc.FormFields("Telefon").Result = wks.Cells(8, 1).Text
wdDoc.FormFields("E_mail").Result = wks.Cells(8, 3).Text
If wks.Cells(10, 3) > 0 Then
wdDoc.FormFields("chkKinder18").CheckBox.Value = 1
wdDoc.FormFields("Kinder18").Result = wks.Cells(10, 3).Text
Else
wdDoc.FormFields("chkKinder18").CheckBox.Value = 0
wdDoc.FormFields("Kinder18").Result = ""
End If
wdDoc.FormFields("Beruf").Result = wks.Cells(12, 1).Text
wdDoc.FormFields("Bank").Result = wks.Cells(14, 1).Text
wdDoc.FormFields("BLZ").Result = wks.Cells(14, 2).Text
wdDoc.FormFields("KontoNr").Result = wks.Cells(14, 3).Text
'Speichern unter Dialog in Word anzeigen
With Word.Dialogs(wdDialogFileSaveAs)
.Name = wdDoc.Path & "\" & "Formular_" & wks.Cells(3, 1).Text & ".doc"
.Show
End With
weiter01:
wdDoc.Application.WindowState = wdWindowStateMinimize
MsgBox "Daten sind übertragen"
GoTo Beenden
Fehler:
If FehlerNr > 0 Then Word.Application.WindowState = wdWindowStateMinimize
MsgBox "Word- oder Excel-Fehler Nr. " & Err.Number & " ist aufgetreten!" & vbLf & vbLf _
& Err.Description
Beenden:
Application.ScreenUpdating = True
Set wdDoc = Nothing
Set wks = Nothing
End Sub