Word VBA - encontrar uma seqüência de caracteres de texto onde uma única palavra (e não todas as palavras em seqüência) ter um determinado estilo ou formato

0

Pergunta

Eu estava tentando construir algum código para pesquisar texto em que uma palavra dentro do texto é um determinado formato ou estilo. Por exemplo, eu gostaria de pesquisa para o texto "Olá mundo, tudo é bom", mas só atingiu instâncias em que a palavra "todos" está em negrito.

Eu pensei sobre como procurar as primeiras palavras "Olá mundo "; em colapso a seleção, pesquisando os próximos três caracteres para a frente para a palavra "todos" em negrito; em colapso a seleção (se verdadeiro) então a procurar o próximo bit para as palavras "é bom". Isto poderia resultar na identificação de toda a frase com a palavra em negrito, mas parece que realmente ineficiente e não é muito flexível. Também, para, em seguida, selecione a frase toda, eu tenho que escrever código para mover a seleção volta para o início e alargar a selecção para a frente. Então, eu preciso redefinir a pesquisa para continuar para a frente a partir dessa posição.

Há algumas fácil/fácil/forma mais elegante de procurar uma seqüência de caracteres, em que apenas uma palavra dentro da cadeia tem propriedades específicas, como negrito? Eu, especificamente, a pesquisa ignorar instâncias da frase em que a palavra não está em negrito.

Eu passei algumas horas pesquisando no google e stackflow e não consigo encontrar nada sobre isso.

Eu não tenho postado código, porque eu não sou muito boa em escrever o código, e eu realmente quero entender se há um flexível/forma elegante de fazer o que eu quiser. O inflexível raiz expliquei acima é tão inflexível eu estou relutante em incomodar a codificação de algo.

Obrigado Jeremy

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

Melhor resposta

0

O método que eu uso é procurar a cadeia de caracteres e, se encontrado, em seguida, procurar a cadeia de caracteres para o word. Aqui está um exemplo.

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. Muito obrigado. Isso é exatamente o que eu queria fazer. Ele é incrivelmente generoso do que você escreva o código como este. Obrigado. Eu estou impressionado com a questão de não ficar com mais regularidade. Mais uma vez, obrigado. Que é absolutamente perfeito.
Jezza

Em outros idiomas

Esta página está em outros idiomas

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