Programm zum Ersetzen von Textmarken in Word 2003/2007/2010 unter Win XP und Win 7

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von slippma3.

    Programm zum Ersetzen von Textmarken in Word 2003/2007/2010 unter Win XP und Win 7

    Hallo liebes Forum,
    ich sitze seit geraumer Zeit an einem Problem, dass in vielen anderen VBA Threads schon behandelt wurde. Leider konnte ich trotz dessen noch keine Lösungsmöglichkeit finden, weshalb ich gern euch konsultieren möchte. Da ich Anfänger bin, hoffe ich über konstruktive Rückmeldungen.

    Ich habe ein Programm, das über Textfelder und ComboBoxen vom User Inhalt erwartet. Dieser soll dann an ein Word Dokument im *.dot Format weitergegeben werden und bestimmte Textmarken ersetzen. Das Programm sollte unter Windows XP, Windows Vista und Windows 7 laufen und ab Office 2003 funktionieren.

    Ich benutze Microsoft Visual Basic 2010 Express.

    Ich habe die Microsoft Office 14.0 Object Library als Verweis hinzugefügt. Mein Code scheitert jedoch schon an grundlegenden Dingen, wie zum Beispiel der Zugriff auf Word bzw. alle damit verknüpften Funktionen.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Dim wordApp = New Microsoft.Office.Interop.Word.Application
    5. Dim wordDoc As Microsoft.Office.Interop.Word.Document
    6. Dim dateipfadDot As String
    7. Dim dateinameDot As String
    8. Dim pfadgesamt As String
    9. dateipfadDot = Application.StartupPath
    10. dateinameDot = "Dok.dot"
    11. pfadgesamt = Path.Combine(dateipfadDot, dateinameDot)
    12. Try
    13. wordDoc = wordApp.Documents.Open(pfadgesamt)
    14. wordDoc.Activate()
    15. Dim myStoryRange As Microsoft.Office.Interop.Word.Range
    16. For Each myStoryRange In wordDoc.StoryRanges
    17. With myStoryRange.Find
    18. .Text = "Test"
    19. .Replacement.Text = "Toll"
    20. .Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue
    21. .Execute(Replace:=Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll)
    22. End With
    23. Next myStoryRange
    24. wordApp.Visible = True
    25. Catch ex As Exception
    26. Stop
    27. End Try
    28. End Sub
    29. End Class


    Leider bekomme ich gleich zu Beginn die Fehlermeldung, das "Microsoft.Office.Interop.Word.Application" nicht definiert sei.

    Kann mir jemand dabei helfen, die grundlegenden Voraussetzungen für einen Zugriff auf Word zu schaffen?

    Wie gelingt es mir später, die *.dot mit zu kompilieren, so dass sie nach der Programminstallation im Programmverzeichnis vorhanden ist?

    Vielen Dank
    Stefan

    Einen Schritt weiter, aber immer noch nicht schlau genug

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. Dim dateipfadDot As String
    3. Dim dateinameDot As String
    4. Dim pfadgesamt As String
    5. dateipfadDot = Application.StartupPath
    6. dateinameDot = "dok.dot"
    7. pfadgesamt = Path.Combine(dateipfadDot, dateinameDot)
    8. Dim word = CreateObject("Word.Application")
    9. word.visible = True
    10. Dim doc = word.Documents.Add(pfadgesamt)
    11. doc.Activate()
    12. With word.Selection.Find
    13. .ClearFormatting()
    14. .Text = "Opus"
    15. .Replacement.ClearFormatting()
    16. .Replacement.Text = "Found"
    17. .Execute(Replace:=word.WdReplace.wdReplaceAll)
    18. End With
    19. End Sub




    Die Suche im Internet hat mich zwar einen Schritt weiter
    gebracht, jedoch noch nicht ausreichend schlau gemacht. Ein Beispiel der MSDN Bibliothek
    funktioniert bei mir nur zum Teil. Zwar kann ich nach einem Ausdruck in meinem
    Word Dokument suchen, jedoch gibt die Anweisung zum Ersetzen des Textes
    folgende Fehlermeldung: Der öffentliche Member WdReplace für den Typ
    ApplicationClass wurde nicht gefunden. Dies bezieht sich auf den Ausdruck „.Execute(Replace:=word.WdReplace.wdReplaceAll)“





    Wo liegt mein Fehler?
    Versuch es mal so:

    VB.NET-Quellcode

    1. WordApp = CreateObject("word.application")
    2. WordApp.Documents.Open(WordDokumentDateiPfad)
    3. With WordApp.ActiveDocument
    4. If .Bookmarks.Exists("NameDerTextmarke") Then
    5. .Bookmarks("NameDerTextmarke").Range.Text = "DasWasNunDaStehenSoll"
    6. End If
    7. End With
    8. WordApp.Visible = true
    Ich habe mich leider etwas früh gefreut.

    Problem 1: Der Code funktioniert grundsätzlich und ich kann eine Textmarke ersetzen. Allerdings kommen in meinem Dokument einzelne Ausdrücke mehrmals vor und müssen dann jeweils ersetzt werden. Konkret: Frau/Herr XY kommt 20x vor und soll jeweils durch Frau Frau Maier ersetzt werden.

    Problem: Wie kann ich die Formatierung steuern??


    Vielen Dank für Unterstützung.

    LG Stefan
    Dass sind dann aber unterschiedliche Textmarken.

    Wie erstellst du die Textmarken in dem WordDokument?
    So: youtube.com/watch?v=GI_8GO7B3Eo ???


    Entweder du machst für jedes mal wo zB. Frau/Mann steht eine Textmarke, die du mit dem von mir genannten Code abfragen kannst.
    Also zB tmFM1, tmFM2, tmFM3, ...

    Oder du musst halt dein Dokument Zeile für Zeile durchlaufen und dann immer wenn er Frau/Mann findet die Anpassung durchführen.
    Dies hat dann aber NICHTS mehr mit Textmarken zu tun!