Word VBA - znajdź ciąg tekstowy, w którym jedno słowo (nie wszystkie słowa w wierszu) ma określony styl lub rozmiar

0

Pytanie

Starałem się stworzyć jakiś kod do wyszukiwania tekstu, w którym jedno słowo w tekście ma określony format i styl. Na przykład, chciałbym wykonać wyszukiwanie tekstu "Witam, świat, wszystko w porządku", ale tylko w tych przypadkach, gdy słowo "wszystkie" zaznaczono pogrubioną czcionką.

Pomyślałem o znalezienie kilku pierwszych słów "Hello world "; zminimalizowaniu zaznaczenia, poszukiwaniu takich trzech znaków do przodu, aby słowa "wszystkie" pogrubioną czcionką; zminimalizowaniu zaznaczenia (jeśli to prawda), a następnie znalezieniu kolejnego bitu słowa "dobrze". To doprowadziło by do tego, że cała fraza była zaznaczona pogrubioną czcionką, ale to wydaje się naprawdę nieskuteczne i nie bardzo elastyczny. Ponadto, aby następnie wybrać wszystkie całe zdanie, muszę napisać kod, aby przenieść zaznaczenie z powrotem na początek i rozszerzanie zaznaczenia do przodu. Następnie trzeba zresetować wyszukaj, aby kontynuować ruch do przodu z tej pozycji.

Czy jest jakiś prosty/bardziej proste/elegancki sposób wyszukiwania wiersza, w którym tylko jedno słowo w wierszu ma określone właściwości, takie jak pogrubienie czcionki? Ja specjalnie chcę, aby wyszukiwanie ignorował przypadki wyrażenia, w których odpowiednie słowo nie zaznaczono pogrubioną czcionką.

Spędziłem kilka godzin na poszukiwania w Google i stackflow i nic nie mogę znaleźć na ten temat.

Ja nie opublikował kod, bo ja nie bardzo dobrze piszę kod, a ja naprawdę chcę się dowiedzieć, czy istnieje elastyczny/elegancki sposób, aby robić to, co chcę. Nieelastyczne korzeń, który wyjaśniłem wyżej, tak негибок, że nie chcę się męczyć kodowaniem czegokolwiek.

Dziękuję Jeremy

ms-word replace
2021-11-20 15:04:30
1

Najlepsza odpowiedź

0

Metody, które użyłem, jest znalezienie wiersze i, jeśli znaleziono, a następnie w pasku znajdź słowo. Oto przykład.

Sub Demo()
    Dim StringRange As Range
    Dim MatchFound  As Boolean
    
    With ActiveDocument.Range.Find
        ' The string to find
        .Text = "Hello world, all is good"
        
        ' Search the document
        Do While .Execute
            ' Capture the string
            Set StringRange = .Parent.Duplicate
            
            With .Parent.Duplicate.Find
                ' The word to find
                .Text = "all"
                .Font.Bold = True
                
                ' Search the string
                If .Execute Then
                    MatchFound = True
                    StringRange.Select
                    
                    If MsgBox("Match found. Continue searching?", vbQuestion + vbYesNo) = vbNo Then
                        Exit Sub
                    End If
                End If
            End With
        Loop
        
        If MatchFound Then
            MsgBox "Finished searching document", vbInformation
        Else
            MsgBox "No match found", vbInformation
        End If
    End With
End Sub
2021-11-20 20:55:18

Wow. Dziękuję bardzo. To jest dokładnie to, co chciałem zrobić. Z twojej strony jest niezwykle szczodrze napisać taki kod. Dziękuję. Jestem zdumiony, że ten problem nie występuje regularnie. Jeszcze raz dziękuję ci. To jest absolutnie idealny.
Jezza

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................