Reemplazar dato en varias hojas Excel

Tengo un libro que tiene 3 hojas "Productos", "compras" y "ventas", en la hoja "productos" en las columnas A y C, se guarda el código de un producto en formato texto, y en las otras hojas, en las columnas A y E se guarda el mismo dato con formato texto.

Mediante un formulario quiero reemplazar el código de un producto, por ello en el textbox1 ingreso el dato tal como está en este momento, y en el textbox2 ingreso el dato que quiero reemplazar en todas las hojas; la macro es la siguiente:

Sub ModificaCodigo()

'si los textbox están vacíos te informa
If TextBox1 = "" Then
MsgBox "Debe ingresar el dato origen"
Exit Sub
End If
If TextBox2 = "" Then
MsgBox "Debe ingresar el nuevo dato"
Exit Sub
End If

'busca el dato y lo cambia en la hoja productos
'TextBox2 = Format(TextBox2, "@")
Worksheets("PRODUCTOS").Select
ActiveSheet.Unprotect "***"
Range("A:A,C:C").Select
Selection.Replace What:=TextBox1, Replacement:="" & TextBox2, LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=True
ActiveSheet.Protect "***", DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFiltering:=True, AllowUsingPivotTables:=True
Range("A1").Select
'hoja compras
Worksheets("COMPRAS").Select
ActiveSheet.Unprotect "***"
Range("A:A,E:E").Select
Selection.Replace What:=TextBox1, Replacement:="" & TextBox2, LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=True
ActiveSheet.Protect "***"
Range("A1").Select

'hoja ventas
Worksheets("VENTAS").Select
ActiveSheet.Unprotect "***"
Range("A:A,E:E").Select
Selection.Replace What:=TextBox1, Replacement:="" & TextBox2, LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=True
ActiveSheet.Protect "***"
Range("A1").Select
Sheets("PRODUCTOS").Select
Range("A1").Select
Unload Me
End Sub

El problema que tengo es que la macro si en las tablas hay codigos con ceros adelante, este los reemplaza como si se tratara de un numero, por ejemplo, en la tabla existe el código 01 y el codigo 0001 (los cuales son diferentes), si en el textbox1 ingreso el 01, y en el textbo2 ingreso 03, la macro me reemplaza no solamente el 01 x 03, sino que también me reemplaza el 0001 x 03.

¿Cómo podría corregir la instrucción?

1 Respuesta

Respuesta
1

Probé tu macro y solamente me cambia el 01, pero te anexo otra macro para que pruebes

Private Sub CommandButton1_Click()
'Sub ModificaCodigo()
    'si los textbox están vacíos te informa
    If TextBox1 = "" Then
        MsgBox "Debe ingresar el dato origen"
        Exit Sub
    End If
    If TextBox2 = "" Then
        MsgBox "Debe ingresar el nuevo dato"
        Exit Sub
    End If
    'busca el dato y lo cambia en la hoja productos
    'TextBox2 = Format(TextBox2, "@")
    hojas = Array("PRODUCTOS", "COMPRAS", "VENTAS")
    For h = LBound(hojas) To UBound(hojas)
        Set h1 = Sheets(hojas(h))
        h1.Unprotect "***"
        For i = 1 To h1.Range("A" & Rows.Count).End(xlUp).Row
            If h1.Cells(i, "A") = TextBox1 Then h1.Cells(i, "A") = TextBox2
            If h1.Cells(i, "C") = TextBox1 Then h1.Cells(i, "C") = TextBox2
        Next
        h1.Protect "***", DrawingObjects:=False, Contents:=True, _
            Scenarios:=False, AllowFiltering:=True, AllowUsingPivotTables:=True
    Next
End Sub

Saludos. Dante Amor
Recuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas