Excel Userform botón con macro que se realice en varias hojas.

No soy experta en Excel y necesito un poco de ayuda. Tengo una macro que hace lo que quiero perfectamente pero necesito que haga lo mismo en otras 2 hojas y varían un poco. Tengo 3 hojas: "MOVIMIENTOS INVENTARIOS", "BASE DE DATOS" Y "BASE DE DATOS FACTURACIÓN", en ésta última tengo un botón que se llama "ANULAR FACTURA". Hice un formulario en Userform y usé un TextBox para colocar el Nro. De Factura que deseo anular, me trae a otros TextBox la información de la factura para confirmar que es la correcta. Coloqué dos botones, uno de anular y otro de cancelar. La macro del botón anular funciona muy bien en la hoja "BASE DE DATOS FACTURACION" pero cuando intento que haga lo mismo en las otras 2 hojas no lo hace. No sé como colocarlo. Esta es la macro:

Private Sub anular_Click()

Sheets("BASE DE DATOS FACTURACION").Unprotect ("12345")

On Error Resume Next
Set busco = Sheets("BASE DE DATOS FACTURACION").Range("C:C").Find(Trim(TextBox1.Value), LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then
Range("A" & busco.Row & ":O" & busco.Row).Interior.Color = vbRed
Range("O" & busco.Row) = "ANULADA"
End If
Unload Me

Sheets("BASE DE DATOS FACTURACION").Select
Range("A5").Select
ActiveSheet.Protect ("12345")

End Sub

La macro resalta en rojo la fila que que contiene el número de la factura y en la columna "O" coloca "ANULADA". Necesito que haga exactamente lo mismo en las otras dos hojas, lo que cambia lo coloco en negrita. En la hoja "BASE DE DATOS":

Range("A" & busco.Row & ":M" & busco.Row).Interior.Color = vbRed

Range("M" & busco.Row) = "ANULADA"

y en la hoja "MOVIMIENTOS DE INVENTARIO":

Set busco = Sheets("MOVIMIENTOS DE INVENTARIO").Range("F:F").Find(Trim(TextBox1.Value), LookIn:=xlValues, lookat:=xlWhole)

If Not busco Is Nothing Then
Range("A" & busco.Row & ":G" & busco.Row).Interior.Color = vbRed
Range("G" & busco.Row) = "ANULADA"

2 respuestas

Respuesta
2

[H    o l a

Te anexo el código para las 3 hojas

Private Sub anular_Click()
'Act.Por.Dante Amor
    Set h = Sheets("BASE DE DATOS FACTURACION")
    h.Unprotect ("12345")
    Set b = h.Range("C:C").Find(Trim(TextBox1.Value), LookIn:=xlValues, lookat:=xlWhole)
    If Not b Is Nothing Then
        h.Range("A" & b.Row & ":O" & b.Row).Interior.Color = vbRed
        h.Range("O" & b.Row) = "ANULADA"
    End If
    h.Protect ("12345")
    '
    Set h = Sheets("BASE DE DATOS")
    h.Unprotect ("12345")
    Set b = h.Range("C:C").Find(Trim(TextBox1.Value), LookIn:=xlValues, lookat:=xlWhole)
    If Not b Is Nothing Then
        h.Range("A" & b.Row & ":M" & b.Row).Interior.Color = vbRed
        h.Range("M" & b.Row) = "ANULADA"
    End If
    h.Protect ("12345")
    '
    Set h = Sheets("MOVIMIENTOS DE INVENTARIO")
    h.Unprotect ("12345")
    Set b = h.Range("F:F").Find(Trim(TextBox1.Value), LookIn:=xlValues, lookat:=xlWhole)
    If Not b Is Nothing Then
        h.Range("A" & b.Row & ":G" & b.Row).Interior.Color = vbRed
        h.Range("G" & b.Row) = "ANULADA"
    End If
    h.Protect ("12345")
    Unload Me
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

¡Gracias! Excelente me funcionó a la perfección. Muy agradecida por su ayuda. Saludos.

Buenas tardes, disculpe pero necesito me ayude en algo con este mismo código que me envió hace días. Hoy fue que me di cuenta de lo que falta. Este código solo me resalta en rojo la primera fila que contenga el valor que le coloco en el TextBox1 pero si hay otras filas que contienen ese mismo valor no las resalta y necesito que se resalten y se coloque la palabra "ANULADA" en todas las filas que contengan ese valor. Espero me pueda ayudar. De antemano muchas gracias.

Solamente repliqué tu código en las otras dos hojas, es decir, el problema o la situación ya se presentaba desde tu código.

Con mucho gusto te ayudo con todas tus peticiones.

Crea una nueva pregunta en el desarrollo de la pregunta escribe: "para Dante Amor". Ahí me describes con detalle lo que necesitas.

Sal u dos

Respuesta
1

[Hola 

Te paso la macro actualizada, agrega un combobox para que selecciones una hoja a buscar

Valora la respuesta para finalizar saludos!

Private Sub anular_Click()
'
'***Act. Por Adriel Ortiz
'
hoja = ComboBox1
Select Case Sheets(hoja).Name
'
Case "BASE DE DATOS FACTURACION"
        Set busco = Sheets(hoja).Range("C:C").Find(Trim(TextBox1.Value), LookIn:=xlValues, lookat:=xlWhole)
        If Not busco Is Nothing Then
            Sheets(hoja).Range("A" & busco.Row & ":O" & busco.Row).Interior.Color = vbRed
            Sheets(hoja).Range("O" & busco.Row) = "ANULADA"
        End If
        Sheets(hoja).Select
        '
Case "BASE DE DATOS"
        Set busco = Sheets(hoja).Range("F:F").Find(Trim(TextBox1.Value), LookIn:=xlValues, lookat:=xlWhole)
        If Not busco Is Nothing Then
            Sheets(hoja).Range("A" & busco.Row & ":G" & busco.Row).Interior.Color = vbRed
            Sheets(hoja).Range("G" & busco.Row) = "ANULADA"
        End If
        Sheets(hoja).Select
        '
Case "MOVIMIENTOS INVENTARIOS"
Set busco = Sheets(hoja).Range("C:C").Find(Trim(TextBox1.Value), LookIn:=xlValues, lookat:=xlWhole)
        If Not busco Is Nothing Then
            Sheets(hoja).Range("A" & busco.Row & ":M" & busco.Row).Interior.Color = vbRed
            Sheets(hoja).Range("M" & busco.Row) = "ANULADA"
        End If
    Sheets(hoja).Select
End Select
End Sub
'
'Para cargar las hojas al combobox1
Private Sub UserForm_Activate()
For Each h In Sheets
    ComboBox1.AddItem h.Name
Next
End Sub

Demostración

¡Gracias! funciona a la perfección, sin embargo me quedé con la respuesta anterior porque es más simple sin el Combobox, aunque estoy segura que esta macro me va ayudar más adelante en el sistema que realizo. Muchas gracias!. Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas