Macro para llenar base de datos desde Listbots

Estoy haciendo una base de datos en Excel para el pago y abonos de guardería, sucede lo siguiente tengo el UserForm1 que se genera y al dar clic en la hoja menú en “Iniciar”, luego en el botón buscar del UserForm1 este a su vez abre el UserForm3 que tiene un Listbox que muestra la base de datos, que al darle clic a uno de esos datos mostrados estos se pasen al UserForm1 en si la consulta es la siguiente:

  • Luego que termino llenando los campos mes1, año y valor, al darle al botón registrar el cual tiene una macro asignada que verifica si en la hoja “Detalle” ya se encuentra registrado este dato filtrando por hijo y mes, si el dato existe este genere la alerta para ver si se quiere registrar pago de diferencia de meses o no, si la respuesta es “sí” que este cierre el UserForm1 y de apertura el Userform2 para registrar pagos por diferencias de meses, y si la respuesta es no que omita el proceso y no registre ningún dato, La macro que tengo asignada corre bien hasta donde verifica el dato repetido, pero cuando se abre el userform2 y graba en la hoja detalle lo que se había seleccionado en el UserForm1 igual se está grabando en la hoja “Detalle” cuando este debió cerrarse.

Espero puedas ayudarme adjunto el archivo de trabajo

La macro que tiene asignada el UserForm1 es la siguiente:

Private Sub CommandButton7_Click()
Dim NOMBRE As String
Dim VALOR As Integer
Dim COLEGIO As String
Dim EMPRESA As String
Dim HIJO As String
Dim MES As String
Dim AÑO As Integer
Dim i As Long
Dim fila As Long
Dim duplicados As Boolean
NOMBRE = TextBox1.Value
VALOR = TextBox2.Value
COLEGIO = TextBox3.Value
EMPRESA = TextBox4.Value
HIJO = TextBox5.Value
MES = ComboBox1.Value
AÑO = ComboBox2.Value
'Obtener la fila disponible
fila = Application.WorksheetFunction.CountA(Range("A:A")) + 1
duplicados = False
'Validar si se han ingresado datos duplicados
For i = 1 To fila
    If Cells(i, 4).Value = UserForm1.TextBox5.Value Then
        If Cells(i, 6).Value = UserForm1.ComboBox1.Value Then
                'Se encontraron datos duplicados
                MsgBox "Datos duplicados en la fila " & i
                duplicados = True
            End If
        End If
Next i
If Not duplicados Then
Load UserForm2
UserForm2.Show
With Sheets("DETALLES")
    i = .Range("A65536").End(xlUp)(2).Row
    .Range("A" & i & ":H" & i).Value = Array(Label3.Caption, EMPRESA, NOMBRE, HIJO, COLEGIO, MES, AÑO, VALOR)
End With
'Notificar al usuario
    MsgBox "Datos insertados en la fila " & fila
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
ComboBox1.Value = ""
ComboBox2.Value = ""
Unload UserForm1
End If
End Sub

 como les dije antes, esta macro antes de insertar los datos en la hoja Detalles debe verificar que ya no se encuentre uno con el mismo nombre hijo, mes y año ya registrado en esa base, si existe debe cancelarse el userform1 y abrir el userform2.

1 respuesta

Respuesta
1

H o l a:

Te anexo la macro con una actualización, revisa si es lo que necesitas:

Private Sub CommandButton7_Click()
    Dim NOMBRE As String
    Dim VALOR As Integer
    Dim COLEGIO As String
    Dim EMPRESA As String
    Dim HIJO As String
    Dim MES As String
    Dim AÑO As Integer
    Dim i As Long
    Dim fila As Long
    Dim duplicados As Boolean
    NOMBRE = TextBox1.Value
    VALOR = TextBox2.Value
    COLEGIO = TextBox3.Value
    EMPRESA = TextBox4.Value
    HIJO = TextBox5.Value
    MES = ComboBox1.Value
    AÑO = ComboBox2.Value
    'Obtener la fila disponible
    fila = Application.WorksheetFunction.CountA(Range("A:A")) + 1
    duplicados = False
    'Validar si se han ingresado datos duplicados
    For i = 1 To fila
        If Cells(i, 4).Value = UserForm1.TextBox5.Value Then
            If Cells(i, 6).Value = UserForm1.ComboBox1.Value Then
                'Se encontraron datos duplicados
                MsgBox "Datos duplicados en la fila " & i
                duplicados = True
            End If
        End If
    Next i
    If duplicados Then
        res = MsgBox("Quiere registrar pago de diferencia de meses", vbQuestion & vbYesNo, "DIFERENCIA DE MESES")
        If res = vbYes Then
            Unload UserForm1
            Load UserForm2
            UserForm2.Show
        End If
    Else
        With Sheets("DETALLES")
            i = .Range("A65536").End(xlUp)(2).Row
            .Range("A" & i & ":H" & i).Value = Array(Label3.Caption, EMPRESA, NOMBRE, HIJO, COLEGIO, MES, AÑO, VALOR)
        End With
        'Notificar al usuario
        MsgBox "Datos insertados en la fila " & fila
        TextBox1.Value = ""
        TextBox2.Value = ""
        TextBox3.Value = ""
        TextBox4.Value = ""
        TextBox5.Value = ""
        ComboBox1.Value = ""
        ComboBox2.Value = ""
        Unload UserForm1
    End If
End Sub

Avísame si entendí bien la idea.


aun sigue igual amigo,  tienes un correo para enviarte el archivo completo y lo puedas ver

Este es el código del userform1.

Private Sub CommandButton7_Click()
'Act.Por.Dante Amor
    Set h1 = Sheets("DETALLES")
    duplicados = False
    If ComboBox1 = "Selecciones Mes:" Or ComboBox1 = "" Then
        MsgBox "Selecciona el mes"
        Exit Sub
    End If
    If ComboBox2 = "Selecciones Año:" Or ComboBox2 = "" Then
        MsgBox "Selecciona el año"
        Exit Sub
    End If
    If TextBox2 = "" Then
        MsgBox "Captura el valor"
        Exit Sub
    End If
    '
    'Validar si se han ingresado datos duplicados
    u = h1.Range("A" & Rows.Count).End(xlUp).Row + 1
    For i = 1 To u
        If h1.Cells(i, "D") = TextBox5 And _
           h1.Cells(i, "F") = ComboBox1 And _
           h1.Cells(i, "G") = Val(ComboBox2) Then
            'Se encontraron datos duplicados
            'MsgBox "Datos duplicados en la fila " & i
            duplicados = True
            Exit For
        End If
    Next i
    '
    If duplicados Then
        res = MsgBox("Datos duplicados. Quiere registrar pago de diferencia de meses", vbQuestion & vbYesNo, "DIFERENCIA DE MESES")
        If res = vbYes Then
            Unload UserForm1
            Load UserForm2
            UserForm2.Show
        Else
            Unload Me
        End If
    Else
        ' Label3, empresa, nombre, hijo, colegio, mes, año, valor)
        h1.Range("A" & u & ":H" & u).Value = Array(Label3, TextBox4, TextBox1, TextBox5, TextBox3, ComboBox1, ComboBox2, CDbl(TextBox2))
        'Notificar al usuario
        MsgBox "Datos insertados en la fila " & u
        TextBox1.Value = ""
        TextBox2.Value = ""
        TextBox3.Value = ""
        TextBox4.Value = ""
        TextBox5.Value = ""
        ComboBox1.Value = ""
        ComboBox2.Value = ""
        Unload UserForm1
    End If
End Sub

R ecuerda cambiar la valoración de la pregunta.

¡Gracias! Hermano de verdad tema solucionado,

Una pregunta fuera del tema, si se puede claro, como se puede hacer para colocar al lado de los textbox que aparezca un "Asterisco" en rojo cuando este vacío, pero que cuando este este lleno se quite como una alerta visual.

¿Poner a un lado? Podrías hacerlo con label, al momento de activar el formulario que ponga el "*", al momento de cambiar el textbox que se ponga en el label ""

Si necesitas ayuda para hacerlo, crea una nueva pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas