# Word 2007 (VBA)



## Benjamin-DO (19. Juli 2007)

Hallo,
ich habe ein Dokument als Kurzbrief entworfen, nun möchte ich dass die Textmarken durch ein entsprechendes Userform gefüllt werden. Soweit so gut. Mit den Textboxen habe ich es hinbekommen, die Checkboxen verweigern allerdings ihren Dienst. 

Der Code des Userforms ist: 


```
Private Sub CommandButton2_Click()
   If Anrede_Kopf = "" Then
        Anrede_Kopf = "Anrede_Kopf"
        Name_Kopf = "Name_Kopf"
        Name_Kopf2 = "Name_Kopf2"
        Straße = "Straße"
        PLZ = "PLZ"
        Leer_erhalten = "Erhalten_leer1"
        Leer_bitte = "Bitte_leer1"
        Name_Briefanrede = "Name_Briefanrede"
        

'Checkboxen auslesen und eintragen
' Checkbox Unterlagen
    Dim rTmp As Range
        Set rTmp = ActiveDocument.Bookmarks(Unterlagen.Name).Range
        If Unterlagen.Value = True Then
        rTmp.Text = "X"
    ActiveDocument.Bookmarks.Add Name:=Unterlagen.Name, Range:=rTmp
        End If

' Checkbox Kopien
    Dim rTmp As Range
        Set rTmp = ActiveDocument.Bookmarks(Kopie.Name).Range
        If Kopie.Value = True Then
        rTmp.Text = "X"
    ActiveDocument.Bookmarks.Add Name:=Kopie.Name, Range:=rTmp
        End If

' Checkbox Unterlagen zur Bearbeitung
    Dim rTmp As Range
        Set rTmp = ActiveDocument.Bookmarks(Unterlagen_Bearbeitung.Name).Range
        If Unterlagen_Bearbeitung.Value = True Then
        rTmp.Text = "X"
    ActiveDocument.Bookmarks.Add Name:=Unterlagen_Bearbeitung.Name, 
Range:=rTmp
        End If

' Checkbox Unterlagen zur Kenntnisnahme
    Dim rTmp As Range
        Set rTmp = 
ActiveDocument.Bookmarks(Unterlagen_Kenntnisnahme.Name).Range
        If Unterlagen_Kenntnisnahme.Value = True Then
        rTmp.Text = "X"
    ActiveDocument.Bookmarks.Add Name:=Unterlagen_Kenntnisnahme.Name, 
Range:=rTmp
        End If

' Checkbox Erhalten
    Dim rTmp As Range
        Set rTmp = ActiveDocument.Bookmarks(Erhalten_lees.Name).Range
        If Erhalten_lees.Value = True Then
        rTmp.Text = "X"
    ActiveDocument.Bookmarks.Add Name:=Erhalten_leer.Name, Range:=rTmp
        End If

' Checkbox Erledigung
    Dim rTmp As Range
        Set rTmp = ActiveDocument.Bookmarks(Erledigung.Name).Range
        If Erledigung.Value = True Then
        rTmp.Text = "X"
    ActiveDocument.Bookmarks.Add Name:=Erledigung.Name, Range:=rTmp
        End If

' Checkbox Rückruf
    Dim rTmp As Range
        Set rTmp = ActiveDocument.Bookmarks(Rückruf.Name).Range
        If Rückruf.Value = True Then
        rTmp.Text = "X"
    ActiveDocument.Bookmarks.Add Name:=Rückruf.Name, Range:=rTmp
        End If

' Checkbox Kenntnisnahme
    Dim rTmp As Range
        Set rTmp = ActiveDocument.Bookmarks(Kenntnisnahme.Name).Range
        If Kenntnisnahme.Value = True Then
        rTmp.Text = "X"
    ActiveDocument.Bookmarks.Add Name:=Kenntnisnahme.Name, Range:=rTmp
        End If

' Checkbox Stellungnahme
    Dim rTmp As Range
        Set rTmp = ActiveDocument.Bookmarks(Stellungnahme.Name).Range
        If Stellungnahme.Value = True Then
        rTmp.Text = "X"
    ActiveDocument.Bookmarks.Add Name:=Stellungnahme.Name, Range:=rTmp
        End If

' Checkbox Bitte
    Dim rTmp As Range
        Set rTmp = ActiveDocument.Bookmarks(Bitte_leer.Name).Range
        If Bitte_leer.Value = True Then
        rTmp.Text = "X"
    ActiveDocument.Bookmarks.Add Name:=Bitte_leer.Name, Range:=rTmp
        End If

' Checkbox allgemeine Anrede
    Dim rTmp As Range
        Set rTmp = ActiveDocument.Bookmarks(allg_Anrede.Name).Range
        If allg_Anrede.Value = True Then
        rTmp.Text = "Sehr geehrte Damen und Herren"
    ActiveDocument.Bookmarks.Add Name:=Briefanrede.Name, Range:=rTmp
        End If

' Checkbox weibliche Anrede
    Dim rTmp As Range
        Set rTmp = ActiveDocument.Bookmarks(weibl_anrede.Name).Range
        If weibl_anrede.Value = True Then
        rTmp.Text = "Sehr geehrte Frau"
    ActiveDocument.Bookmarks.Add Name:=Briefanrede.Name, Range:=rTmp
        End If

' Checkbox männliche Anrede
    Dim rTmp As Range
        Set rTmp = ActiveDocument.Bookmarks(männl_Anrede.Name).Range
        If männl_Anrede.Value = True Then
        rTmp.Text = "Sehr geehrter Herr"
    ActiveDocument.Bookmarks.Add Name:=Briefanrede.Name, Range:=rTmp
        End If


'   zuordnen der Textfelder
    Dim TMRange As Range
    Dim X
     For Each X In Me.Controls
      If TypeOf X Is MSForms.TextBox Then
        If ActiveDocument.Bookmarks.Exists(X.Name) Then
          Set TMRange = ActiveDocument.Bookmarks(X.Name).Range
          TMRange.Text = X.Text
          ActiveDocument.Bookmarks.Add Name:=X.Name, Range:=TMRange
        End If
      End If
      
    Next
    
'   aktualisierung
    Selection.WholeStory
    Selection.Fields.Update
    Selection.HomeKey unit:=wdStory
    Else
    End If
    

    
'   FelderAktualisieren()
    Application.ScreenUpdating = False
    ActiveDocument.Repaginate
    Dim RaTeil As Range
    For Each RaTeil In ActiveDocument.StoryRanges
        RaTeil.Fields.Update
        While Not (RaTeil.NextStoryRange Is Nothing)
            Set RaTeil = RaTeil.NextStoryRange
            RaTeil.Fields.Update
        Wend
    Next
    Application.ScreenUpdating = True
    Set TMRange = Nothing
    Set RaTeil = Nothing
    Unload UserForm1
End Sub
```

Allerdings läuft das Userform nicht durch. Word bemängelt eine 
Mehrachdeklaration. Leider kenne ich mich mit VBA nicht aus und habe dann an 
dem zweiten mal die Zeile "Dim rTmp As Range" auskommentiert, aber dies hat 
leider keinen Erfolg gebracht. 

Danach habe ich mir überlegt wie bei den Textfeldern das rTmp durch TMRange 
zu ersetzen, aber auch dieses brachte keinen Erfolg. 

Im Moment trägt Word dann noch nicht mal mehr die Textfelder ein. 
Wo liegt denn mein Fehler? 

Wenn es hilfreich ist, kann ich auch gerne die Originaldatei auf meinen Server laden. 

Besten Dank schon mal

Gruß
Benjamin


----------

