in Word an aktueller Stelle Formularfeld einfügen

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Volker Bunge.

    in Word an aktueller Stelle Formularfeld einfügen

    Hallo Zusammen,

    kann mir einer sagen, wie ich in einem aktuellen Worddokument an der gerade aktuellen Stelle mit Excel VBA ein Textformularfeld einfügen kann?

    Habe schon bisher dieses hier

    VB.NET-Quellcode

    1. Const SpaltenzeileOriginal As Integer = 1
    2. Const SpaltenzeileIntern As Integer = 2
    3. Sub Word_Textformularfeld_einfuegen()
    4. ' Die aktuell Exceldatei sicherheitshalber vor dem Aufruf dieser Routine abspeichern (Sicher ist Sicher)
    5. For Each w In Application.Workbooks
    6. w.Save
    7. Next w
    8. Dim aktuellerSpaltenname As String
    9. aktuellerSpaltenname = Sheets(NamederDatenTabelle).Range(Cells(SpaltenzeileIntern, ActiveCell.Column), Cells(SpaltenzeileIntern, ActiveCell.Column)).Value
    10. ' Auf Word verweisen
    11. Set wrdApp = GetObject(, "Word.Application")
    12. With wrdApp
    13. .Visible = True
    14. .Activate
    15. End With
    16. Set wrdDoc = wrdApp.ActiveDocument
    17. Dim myField As Word.FormField
    18. 'ActiveDocument. Tables(1).Cell(2, 1).Select
    19. ' Set myField = Selection.FormFields.Add(Range:=Selection.Range, Type:=wdFieldFormTextInput)
    20. Set myField = wrdDoc.FormFields.Add(Range:=wrdDoc.Range, Type:=wdFieldFormTextInput)
    21. myField.CalculateOnExit = True
    22. myField.Name = aktuellerSpaltenname
    23. Set myField = Nothing
    24. End Sub


    Dieser Code soll aus einer Exceltabelle den Wert in der aktuellen Spalte / Zeile 2 nehmen, und danach in Word wechseln und dort an der gerade aktuellen Stelle ein Textformularfeld (diese alten grauen Eingabefelder) einfügen, welches dann den Namen der aktuellen Excelzelle hat.

    Eingefügt wird das Textformularfeld soweit auch richtig, nur das mit der aktuellen Position will nicht so funktionieren.

    Stelle ich den Wordcursor an eine andere Stelle, dann wird zwar das Formularfeld eingefügt, aber immer am Anfang des Worddokumentes.

    Für eine rasche Lösung bedanke ich mich schon einmal jetzt und hoffe, dass jemand eine Lösung hat.

    Gruß

    Volker
    Hallo HenryV,

    habe mal Deine Zeile eingefügt. Leider komme ich eine Fehlermeldung

    Laufzeitfehler '438'
    Objekt unterstützt diese Eigenschaft nicht.

    (Und Deine Zeile ist kpl. markiert).

    Habe mir auch den Link zur Microsoftseite angesehen und dann noch ein wenig getestet. Das ist dabei raus gekommen.

    VB.NET-Quellcode

    1. Const SpaltenzeileOriginal As Integer = 1
    2. Const SpaltenzeileIntern As Integer = 3
    3. Sub Word_Textformularfeld_einfuegen()
    4. ' Die aktuell Exceldatei sicherheitshalber vor dem Aufruf dieser Routine abspeichern (Sicher ist Sicher)
    5. For Each w In Application.Workbooks
    6. w.Save
    7. Next w
    8. Dim aktuellerSpaltenname As String
    9. aktuellerSpaltenname = Sheets(NamederDatenTabelle).Range(Cells(SpaltenzeileIntern, ActiveCell.Column), Cells(SpaltenzeileIntern, ActiveCell.Column)).Value
    10. ' Prüfen, ob ein Spaltenname vorhanden ist
    11. If aktuellerSpaltenname = "" Then
    12. MsgBox ("Leider kein Spaltenname in der Zeile " & SpaltenzeileIntern & " gefunden. Bitte versuchen Sie eine andere Spalte oder fügen Sie eine Bezeichnung ein.")
    13. Exit Sub
    14. End If
    15. ' Auf Word verweisen
    16. Set wrdApp = GetObject(, "Word.Application")
    17. With wrdApp
    18. .Visible = True
    19. .Activate
    20. End With
    21. Set wrdDoc = wrdApp '.ActiveDocument
    22. Dim myField As Word.FormField
    23. wrdDoc.Selection.Collapse Direction:=wdCollapseEnd
    24. Set myField = wrdDoc.ActiveDocument.FormFields.Add(Range:=wrdDoc.Selection.Range, Type:=wdFieldFormTextInput)
    25. With myField
    26. '.CalculateOnExit = True ' Nach dem Verlassen neu berechnen
    27. .Name = aktuellerSpaltenname
    28. End With
    29. ' Word wieder aktivieren. Es somit gleich in Word die nächste Position angesteuert werden
    30. wrdDoc.Activate
    31. Set myField = Nothing
    32. End Sub


    Und so funktioniert es erst einmal.

    Jetzt kann ich weitermachen.

    Vielen Dank.

    Gruß
    Volker