VBA substitui várias strings de uma lista separada
Pergunta
Preciso substituir STRINGS mas até agora consegui substituir apenas palavras.O código passa pela coluna Descrição e deve substituir todas as sequências da lista.A ideia é usar abreviaturas(novos valores) em vez de palavras completas (valores antigos).
Cada vez que há uma palavra, caractere etc. vizinho (sem espaço), o código falha.O que está errado?Obrigado!!!
Sub ReplaceWords_BUT_Need_ToReplaceStrings()
Application.ScreenUpdating = False
'This macro works with separated words only. Eliminate hyphens etc before applying this macro.
Dim r As Range, A As Range
Dim s1 As Worksheet, s2 As Worksheet, LastRow As Integer, v As String, j As Integer,
oldv As String, newv As String
LastRow = Cells(Rows.count, "A").End(xlUp).row
Set s1 = Sheets("JE_data")
Set s2 = Sheets("ListToReplace")
Set A = s1.Range("J:J").Cells.SpecialCells(xlCellTypeConstants)
For Each r In A
v = r.Value
For j = 2 To LastRow
oldv = s2.Cells(j, 1).text
newv = s2.Cells(j, 2).text
'A função Substituir conforme você a usou diferencia maiúsculas de minúsculas.'Tem certeza de que todas as palavras da sua fatura começam com letra maiúscula?'Se não, use a função v = Replace(v, oldv, newv, 1, -1, vbTextCompare) em vez disso.OK.
v = Replace(v, oldv, newv, 1, -1, vbTextCompare)
'v = Replace(v, oldv, newv)
Next j
r.Value = Trim(v)
Next r
Application.ScreenUpdating = True
End Sub
Exemplo:
ListToReplace
Left column (old) Right column (new)
----------------------------------------
Invoice inv
Salary sy
Credit cr
JE_dados
cr Note
cr note
INV/2712/14RF/0229/14
Invoice 1078 10
TECHNOQ01SI 2014 03288
(Nota do editor: Não sei se o exemplo está correto pois foi escrito nos comentários)
Credit
foi substituído por cr
e Invoice
esperava-se que fosse substituído por inv
mas não foi
Solução
A função Substituir conforme você a usou diferencia maiúsculas de minúsculas.Tem certeza de que todas as palavras da sua fatura começam com letra maiúscula?Se não, então use
v = Replace(v, oldv, newv, 1, -1, vbTextCompare)
funcionar em vez disso.