VBA de Word - encontrar una cadena de texto donde una sola palabra (no todas las palabras en cadena) tiene un determinado estilo o formato

0

Pregunta

Yo estaba tratando de construir algo de código para buscar texto en una palabra dentro del texto de un determinado formato o estilo. Por ejemplo, me gustaría búsqueda para el texto "Hola mundo, todo es bueno", pero sólo llegará a las instancias donde la palabra "todo" está en negrita.

Pensé acerca de la búsqueda para el primer par de palabras "Hola mundo "; el colapso de la selección, la búsqueda de los siguientes tres caracteres de avance para la palabra "todos" en negrita; el colapso de la selección (si es verdad), a continuación, buscar el siguiente fragmento de las palabras "bueno". Este sería el resultado en la identificación de la totalidad de la frase con la palabra negrita pero parece realmente ineficaz y no es muy flexible. También, a continuación, seleccione la frase entera, tengo que escribir código para mover la selección a la de inicio y ampliar la selección hacia adelante. Entonces necesito para restablecer la búsqueda de continuar adelante desde esa posición.

Hay algunos fácil/fácil/más elegante para buscar una cadena en la que sólo una palabra dentro de la cadena tiene propiedades específicas como la negrita? Yo específicamente desea que la búsqueda de ignorar a instancias de la frase donde la correspondiente palabra no está en negrita.

He pasado un par de horas buscando en google y stackflow y no puede encontrar nada en esto.

No he publicado el código porque no soy muy bueno para escribir el código, y realmente quiero entender si no es flexible/de manera elegante de hacer lo que quiero. El inflexible de la raíz que me he explicado anteriormente es tan inflexible soy reacio a molestar a la codificación de algo.

Gracias Jeremy

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

Mejor respuesta

0

El método que yo uso es la búsqueda de la cadena y, si lo encuentra, entonces la búsqueda de la cadena para la palabra. Aquí es un ejemplo.

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. Muchas gracias. Esto es exactamente lo que yo quería hacer. Es muy generoso de su parte para escribir el código como este. Gracias. Estoy sorprendido de la pregunta no viene hasta con más regularidad. Una vez más, gracias. Que es absolutamente perfecto.
Jezza

En otros idiomas

Esta página está en otros idiomas

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