Estou tentando ajudar alguém a automatizar uma edição de texto muito simples no Microsoft Word usando o VBA.
Uma alteração desejada para remover vírgulas incorporadas em números, deixando outras vírgulas sozinhas. Por exemplo:
I like apples, pears, and plums. See 1,234,567
se tornaria:
I like apples, pears, and plums. See 1234567
O código procura por um dígito seguido por uma vírgula seguida por um dígito. Para remover uma vírgula entre dois dígitos, o código atual percorre todos os 100 casos possíveis de 0,0 a 9,9 e faz um Find/Replace
em cada caso. Então 0,0 se torna 00 . Segue o código atual:
Sub FindAndReplace()
Dim rng As Range, sFind As String, sRep As String
Dim i As Long, j As Long
For i = 0 To 9
For j = 0 To 9
sFind = i & "," & j
sRep = i & j
For Each rng In ActiveDocument.StoryRanges
With rng.Find
.Text = sFind
.Replacement.Text = sRep
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next rng
Next j
Next i
lbl_Exit:
Exit Sub
Estou certo de que todo esse looping é completamente desnecessário i
e j
isso pode ser feito com um padrão curinga simples Find
, mas não sei o suficiente sobre o modelo Word Object para implementar isso.
ATUALIZAR:
A solução RexEx funcionou muito bem. Eu também trabalhei com uma solução curinga:
Sub CommaKiller()
Dim rngStory As Range
For Each rngStory In ActiveDocument.StoryRanges
With rngStory.Find
.MatchWildcards = True
.Text = "([0-9]),([0-9])"
.Replacement.Text = "\1\2"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next rngStory
End Sub
Você pode tentar usar a biblioteca Microsoft VBScript Regular Expressions 5.5:
Em seguida, você pode criar um padrão regex apropriado e fazer com que ele retorne as correspondências em seu texto, remova as vírgulas dessas correspondências e retorne a versão limpa de volta ao texto:
Eu joguei alguns números aleatórios lá para testar que só encontraria os números contendo vírgulas.
É claro que isso é específico da cultura e tentar fazer isso com esse regex exato na Índia pode não funcionar para todos os números. No entanto, acho que a abordagem é boa e você pode ajustar o regex conforme necessário.
Eu uso e recomendo este site para testar regex:
https://regex101.com/