Word Textpassage kursiv setzen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Word Textpassage kursiv setzen

    Moin!

    ich möchte eine Textpassage in einem zu erstellenden Word-Dokument kursiv formatieren.

    Bisher bin ich bei folgendem Code angekommen.

    VB.NET-Quellcode

    1. Private _oWord As Word.Application
    2. ...
    3. Public Sub SetKursiv(SuchWort As String)
    4. With _oWord.Selection.Range.Find
    5. .Execute(FindText:=SuchWort, Format:=Word.WdUnderline.wdUnderlineDash)
    6. End With
    7. End Sub


    Meine Frage besteht aus zwei Teilen.

    1.) ich dachte hier schon einmal den richtigen Weg gefunden zu haben um ggf. die Textpassage zu unterstreichen. Aber es passiert nichts.

    2.) in Frage 1 hatte ich schon vom unterstreichen gesprochen - weil ich den Parameter für Kursiv (italic) nicht gefunden habe. Den suche ich nun in Frage 2.!!

    Kann einer weiterhelfen?

    Gruß Jan
    docs.microsoft.com/de-de/office/vba/api/word.find.execute
    Führt den angegebenen Suchvorgang aus. Gibt True zurück, wenn die Suche erfolgreich ist. Boolescher Wert.

    Macht für mich erstmal so keinen Sinn was du da machst.

    Da du die alte Automatisierung über Microsoft.Office.Interop.Word.Application nutzt kannst du einfach im Word den Macro-Recorder nutzen.
    --> Word starten --> Macro aufzeichnen --> Aktion die du im Code machen möchtest manuell ausführen --> Macro beenden und im VBA-Editor anschauen.
    Moin!

    erst einmal vielen Dank für die Rückmeldung.

    korni schrieb:


    Da du die alte Automatisierung über Microsoft.Office.Interop.Word.Application nutzt kannst du einfach im Word den Macro-Recorder nutzen.
    --> Word starten --> Macro aufzeichnen --> Aktion die du im Code machen möchtest manuell ausführen --> Macro beenden und im VBA-Editor anschauen.


    Den Weg hatte ich auch schon versucht, war aber nicht wirklich hilfreich.

    VB.NET-Quellcode

    1. Sub Makro1()
    2. '
    3. ' Makro1 Makro
    4. '
    5. '
    6. Selection.Font.Italic = wdToggle
    7. End Sub


    Da steht nur eine Zeile. Das Suchen ist gar nicht dokumentiert.

    Jan
    Eventuell hilft dir das weiter:

    Visual Basic-Quellcode

    1. Set myRange = ActiveDocument.Content
    2. myRange.Find.Execute FindText:="blue", Forward:=True
    3. If myRange.Find.Found = True Then myRange.Bold = True

    (Quelle: docs.microsoft.com/de-de/office/vba/api/word.find)
    Moin!

    Dein Beispiel passt von der Syntax nicht so ganz.

    Ich hatte das gefunden: ms-office-forum.net/forum/showpost.php?p=1849346&postcount=2

    Daraus habe ich folgendes abgeleitet:

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' bestimmtes Wort kursiv schreiben
    3. ''' </summary>
    4. ''' <param name="SuchWort">Begriff der kursiv geschrieben werden soll</param>
    5. Public Sub SetKursiv(SuchWort As String)
    6. Dim SuchBereich As Range = _oWord.ActiveDocument.Range
    7. With SuchBereich.Find
    8. .Text = SuchWort
    9. Do While .Execute = True
    10. .Replacement.Font.Italic = True
    11. .Execute(Replace:=Word.WdReplace.wdReplaceAll)
    12. Loop
    13. End With
    14. End Sub


    Aber auch das führt noch nicht zum Erfolg.

    Gruß Jan
    Mach mal bitte Option Strict On, da .Replacement.Font.Italic keinen Boolean, sondern einen Integer will. Bei mir klappt das hier sehr gut:

    VB.NET-Quellcode

    1. Imports Microsoft.Office.Interop.Word
    2. Public Class Form1
    3. ''' <summary>
    4. ''' bestimmtes Wort kursiv schreiben
    5. ''' </summary>
    6. ''' <param name="SuchWort">Begriff der kursiv geschrieben werden soll</param>
    7. Public Sub SetKursiv(SuchWort As String)
    8. Dim _oWord = GetOutlookAppInstance()
    9. Dim SuchBereich As Range = _oWord.ActiveDocument.Range
    10. With SuchBereich.Find
    11. .Text = SuchWort
    12. .Replacement.Font.Italic = 1
    13. .Execute(Replace:=WdReplace.wdReplaceAll)
    14. End With
    15. End Sub
    16. Public Function GetOutlookAppInstance() As Application
    17. If Diagnostics.Process.GetProcessesByName("WINWORD").Any Then Return DirectCast(Runtime.InteropServices.Marshal.GetActiveObject("Word.Application"), Application)
    18. Return Nothing
    19. End Function
    20. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    21. SetKursiv("Foo")
    22. End Sub
    23. End Class
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    hi!

    ich schaue mir das später an - was dringendes vor dem Urlaub reingekommen.

    In dem alten Code war true.

    Leider ist der Versuch alle Fehler für Strict On auszumerzen noch nicht erfolgreich abgeschlossen worden und deshalb noch off.

    Gruß Jan
    Moin!

    irgendwie stehe ich auf dem Schlauch.

    Ich habe zwar nicht so 100%ig die Zeilen übernommen:

    VB.NET-Quellcode

    1. Public Sub SetKursiv(SuchWort As String)
    2. Dim SuchBereich As Range = _oWord.ActiveDocument.Range
    3. With SuchBereich.Find
    4. .Text = SuchWort
    5. .Replacement.Font.Italic = 1
    6. .Execute(Replace:=Word.WdReplace.wdReplaceAll)
    7. End With
    8. End Sub


    Im Debugger wird für _oWord folgendes angezeigt:



    Könnte das noch auf etwas hinweisen ?

    Gruß Jan
    Du hast doch schon ab Post#1 mit _oWord angefangen und da nicht weiter dokumentiert, was es bei Dir ist. Ich habe für mich diese Info Option-Strict-konform gefüllt. Die FRage ist, was jetzt bei Dir dabei rauskommt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Und? Lädst Du auch ein Dokument? Wenn ja, läuft der Code durch? Wenn ja, was ist das Resultat?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    also ich habe an anderen Stellen nachgeschaut, wo ich auf _oWord zugegriffen wird.

    Ein Dokument wird geöffnet und mit Daten befüllt.

    Soweit alles Ok!

    In der selben Klasse habe ich

    VB.NET-Quellcode

    1. Public Sub InsertPageBreak()
    2. If _oWord.Selection.Information(Word.WdInformation.wdFirstCharacterLineNumber) > 1 Then 'https://docs.microsoft.com/de-de/office/vba/api/word.wdinformation
    3. _oWord.Selection.InsertBreak(Word.WdBreakType.wdPageBreak)
    4. End If
    5. End Sub


    und wenn ich die in dem Programmablauf aufrufe, dann wird der Seitenumbruch eingefügt.

    Gruß Jan
    Öhm. Und was hat das mit kursiv zu tun?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.