VBA reemplaza varias cadenas de una lista separada
Pregunta
Necesito reemplazar STRINGS pero hasta ahora logré reemplazar solo palabras.El código pasa por la columna Descripción y se supone que reemplaza cada secuencia de la lista.La idea es utilizar abreviaturas (nuevos valores) en lugar de palabras completas (viejos valores).
Cada vez que hay una palabra, un carácter, etc. vecino (sin espacios), el código falla.¿Lo que está mal?¡¡¡Gracias!!!
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
'La función Reemplazar tal como la has usado distingue entre mayúsculas y minúsculas.'¿Está seguro de que todas las palabras de su factura comienzan con mayúscula?'Si no es así, utilice la función v = Reemplazar (v, oldv, newv, 1, -1, vbTextCompare) en su lugar.DE ACUERDO.
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
Ejemplo:
Lista para reemplazar
Left column (old) Right column (new)
----------------------------------------
Invoice inv
Salary sy
Credit cr
JE_datos
cr Note
cr note
INV/2712/14RF/0229/14
Invoice 1078 10
TECHNOQ01SI 2014 03288
(Nota del editor: No sé si el ejemplo es correcto ya que fue escrito en los comentarios)
Credit
fue reemplazado con cr
y Invoice
Se esperaba que fuera reemplazado por inv
pero no era
Solución
Reemplazar la función como lo ha usado es distingue entre mayúsculas y minúsculas.¿Está seguro de que todas las palabras de la factura comienzan con la letra mayúscula?Si no, entonces usa
v = Replace(v, oldv, newv, 1, -1, vbTextCompare)
Función en su lugar.