2009-10-03 5 views
1

Je voudrais trouver le texte qui se trouve entre les caractères < et>, puis transformer tout texte trouvé en cas "normal", où la première lettre de mot est en majuscule. Voici ce que j'ai jusqu'ici:Word VBA - Trouver le texte entre délimiteurs et convertir en minuscules

Function findTextBetweenCarots() As String 

Dim strText As String 

With Selection 
    .Find.Text = "<" ' what about <[^0-9]+> ? 
    .Find.Forward = True 
    .Find.Wrap = wdFindContinue 
End With 

Selection.Find.Execute 


' Application.Selection. ' how do I get the text between the other ">"? 
    findCarotSymb = Application.Selection.Text 

End Function 

Ou, est-il une meilleure façon de le faire? J'ai également abordé le problème en utilisant la bibliothèque VBScript Regex 5.5, qui fonctionnait sur des documents simples, mais pas sur certains documents avec des tables complexes. Par exemple, en essayant simplement de mettre en gras le texte (pour plus de simplicité):

Sub BoldUpperCaseWords() 

    Dim regEx, Match, Matches 
    Dim rngRange As Range 

    Set regEx = New RegExp 
    regEx.Pattern = "<[^0-9]+>" 
    regEx.IgnoreCase = False 
    regEx.Global = True 

    Set Matches = regEx.Execute(ActiveDocument.Range.Text) 

    For Each Match In Matches 

    ActiveDocument.Range(Match.FirstIndex, Match.FirstIndex + Len(Match.Value)).Bold = True 

    Next 

End Sub 

ne fonctionnerait pas dans un document avec des tables. En fait, il ne serait pas même le texte en gras correct (le texte entre le <>. Cela me conduit à croire que j'ai une question plus générale ici que je suis absent.

Répondre

1

Je ne peux pas tester votre code mais essayez cette regex

regEx.Pattern = "<[^0-9<>]+>" 

Votre regex correspondrait à "<foo><bar>"
toute la chaîne. le regex ci-dessus correspond uniquement à la <foo>, le <bar> et ainsi de suite.

+0

je reçois le même résultat. Il y a quelque chose de particulier au sujet des documents que je Je l'utilise sur. Ils sont 4 tables de colonnes, si cela aide. Le plus que je peux faire est de fournir une capture d'écran d'un document d'exemple lors de ma prochaine édition. – JohnZaj

+0

imprime 'ActiveDocument.Range.Text' pour voir s'il contient tout le texte. Vérifiez également si les propriétés 'regEx' gèrent du texte multiligne. (si possible, essayez d'itérer les lignes du tableau et d'appliquer regex à chaque colonne) –

+0

regEx.MultiLine = True 'devrait fonctionner. Maintenant, j'essaie de parcourir les tables ... – JohnZaj

Questions connexes