Error en captura de formulario de excel

Solicito de su ayuda

Tengo ya mi base y un formulario en excel

El formulario abre correctamente y al capturar los datos también el problema es que al darle guardar no se visualiza la captura en la base y no limpia los textbox del formulario

Mi código es el siguiente

Private Sub Cmd_Guardar_Click()
On Error Resume Next
usuario = Application.UserName

Dim Mensaje, Estilo, Titulo, Ayuda, Ctxt, Respuesta, MiCadena
Mensaje = usuario & " " & "¿Desea continuar capturando ?" & " " & Now 'Define el mensaje
Estilo = vbYesNo + vbCritical + vbDefaultButton2 ' Define los botones que se mostrarán
Titulo = "Base Captura ALEN" 'Define el titulo que se mostrará en la ventana
Ayuda = "DEMO.HLP" ' Define el archivo de ayuda
Ctxt = 1000 'Define el tema
'El texto
'Muestra el mensaje
Respuesta = MsgBox(Mensaje, Estilo, Titulo, Ayuda, Ctxt)
If Respuesta = vbYes Then 'Si el usuario elige si.
MiCadena = "Si" 'Ejecuta una acción
Else ' El usuario eigió el botón no.
Mdlto.limpia
End If
Application.ScreenUpdating = False

Dim celda As Double
Dim revisa As Boolean

revisa = Mdlto.verifica

If Cmbx_Operador = Empty Then
MsgBox ("Se requiere seleccionar un Operador"), vbCritical, "Aviso"
Cmbx_Operador.SetFocus
Exit Sub
End If

Sheets("ENC").Cells(6, 4) = Cmbx_Operador

If revisa And IsNumeric(empaque) And (Cant_1) And (Cant_2) And (Cant_3) And (Cant_4) And (Cant_5) And (Cant_6) And IsNumeric(Sku1) And IsNumeric(Sku2) And IsNumeric(Sku3) And IsNumeric(Sku4) And IsNumeric(promo1) And IsNumeric(promo2) And IsNumeric(total) Then

Sheets("ENC").Select
If Cells(6, 1) = "" Then
celda = Cells(6, 1).Row
Else
Cells(5, 1).Select
celda = Selection.End(xlDown).Row + 1
End If
Cells(celda, 1) = sap.Text
Cells(celda, 2) = Plza.Text
Cells(celda, 3) = sucursal.Text
Cells(celda, 4) = Cmbx_Operador.Text
Cells(celda, 5) = Camioneta.Text
Cells(celda, 6) = fecha.Text
Cells(celda, 7) = empaque.Text
Cells(celda, 8) = Sku1.Value
Cells(celda, 9) = descripcion_uno.Value
Cells(celda, 10) = Cant_1.Value
Cells(celda, 11) = Sku2.Value
Cells(celda, 12) = descripcion_dos.Value
Cells(celda, 13) = Cant_2.Value
Cells(celda, 14) = Sku3.Value
Cells(celda, 15) = descripcion_tres.Value
Cells(celda, 16) = Cant_3.Value
Cells(celda, 17) = Sku4.Value
Cells(celda, 18) = descripcion_cuatro.Value
Cells(celda, 19) = Cant_4.Value
Cells(celda, 20) = promo1.Value
Cells(celda, 21) = descripcion_cinco.Value
Cells(celda, 22) = Cant_5.Value
Cells(celda, 23) = promo2.Value
Cells(celda, 24) = descripcion_seis.Value
Cells(celda, 25) = Cant_6.Value
Cells(celda, 26) = comentarios.Value
If uno_si Then
Cells(celda, 27) = "Si"
Else
Cells(celda, 27) = "No"
End If
If uno_si Then
Cells(celda, 27) = "Si"
Else
Cells(celda, 27) = "No"
End If
If dos_si Then
Cells(celda, 29) = "Si"
Else
Cells(celda, 29) = "No"
End If
Cells(celda, 28) = Mot_1.Value
Cells(celda, 30) = Mot_2.Value
Mdlto.limpia
Else
If revisa = False Then
MsgBox "Debes llenar todos los campos"
Mdlto.senala
sap.SetFocus
ElseIf IsNumeric(empaque.Value) = False And IsNumeric(Cant_1.Value) = False And IsNumeric(Cant_2.Value) = False And IsNumeric(Cant_3.Value) = False And IsNumeric(Cant_4.Value) = False And IsNumeric(Cant_5.Value) = False And IsNumeric(Cant_6.Value) = False And IsNumeric(Sku1.Value) = False And IsNumeric(Sku2.Value) = False And IsNumeric(Sku3.Value) = False And IsNumeric(Sku4.Value) = False And IsNumeric(promo1.Value) = False And IsNumeric(promo2.Value) = False And IsNumeric(total.Value) = False Then
sap.Value = ""
Plza.Value = ""
empaque.Value = ""
Cant_1.Value = ""
Cant_2.Value = ""
Cant_3.Value = ""
Cant_4.Value = ""
Cant_5.Value = ""
Cant_6.Value = ""
Sku1.Value = ""
Sku2.Value = ""
Sku3.Value = ""
Sku4.Value = ""
promo1.Value = ""
promo2.Value = ""
MsgBox "El Sap, el emaque, las cantidades y los skus deben de ser numeros"
sap.BackColor = RGB(255, 0, 0)
Plza.BackColor = RGB(255, 0, 0)
empaque.BackColor = RGB(255, 0, 0)
Cant_1.BackColor = RGB(255, 0, 0)
Cant_2.BackColor = RGB(255, 0, 0)
Cant_3.BackColor = RGB(255, 0, 0)
Cant_4.BackColor = RGB(255, 0, 0)
Cant_5.BackColor = RGB(255, 0, 0)
Cant_6.BackColor = RGB(255, 0, 0)
Sku1.BackColor = RGB(255, 0, 0)
Sku2.BackColor = RGB(255, 0, 0)
Sku3.BackColor = RGB(255, 0, 0)
Sku4.BackColor = RGB(255, 0, 0)
promo1.BackColor = RGB(255, 0, 0)
promo2.BackColor = RGB(255, 0, 0)
total.BackColor = RGB(255, 0, 0)
sap.SetFocus
ElseIf IsNumeric(empaque.Value) = False Then
empaque.Value = ""
MsgBox " El empaque debe ser número"
empaque.BackColor = RGB(255, 0, 0)
empaque.SetFocus
ElseIf IsNumeric(Cant_1.Value) = False Then
Cant_1.Value = ""
MsgBox " La cantidad debe ser número"
Cant_1.BackColor = RGB(255, 0, 0)
Cant_1.SetFocus
ElseIf IsNumeric(Cant_2.Value) = False Then
Cant_2.Value = ""
MsgBox " La cantidad debe ser número"
Cant_2.BackColor = RGB(255, 0, 0)
Cant_2.SetFocus
ElseIf IsNumeric(Cant_3.Value) = False Then
Cant_3.Value = ""
MsgBox " La cantidad debe ser número"
Cant_3.BackColor = RGB(255, 0, 0)
Cant_3.SetFocus
ElseIf IsNumeric(Cant_4.Value) = False Then
Cant_4.Value = ""
MsgBox " La cantidad debe ser número"
Cant_4.BackColor = RGB(255, 0, 0)
Cant_4.SetFocus
ElseIf IsNumeric(Cant_5.Value) = False Then
Cant_5.Value = ""
MsgBox " La cantidad debe ser número"
Cant_5.BackColor = RGB(255, 0, 0)
Cant_5.SetFocus
ElseIf IsNumeric(Cant_6.Value) = False Then
Cant_6.Value = ""
MsgBox " La cantidad debe ser número"
Cant_6.BackColor = RGB(255, 0, 0)
Cant_6.SetFocus
End If
End If
End Sub

1 Respuesta

Respuesta
1

Tal vez tienes un error en tu código, pero al poner esta instrucción:

On Error Resume Next

La macro no se detiene y no puedes saber cuál es el problema.


La primera recomendación es que no utilices la instrucción "On Error Resume Next". Debes buscar controlar el error utilizando código.


La otra recomendación, es que primero valides los datos que vas a poner en la hoja y después de todas las validaciones, hasta el último pones el código para guardar en la hoja.


Prueba nuevamente quitando la instrucción On Error y me comentas

ok ya lo intente y quite intruccion On Error Resume Next y aun asi no guarda nada 

te muestro como deberia de ser 

Al capturar los datos me lanza un mensaje de que si deseo continuar capturando y al dar click en si debería limpiar el formulario para empezar una nueva captura

Pero no los limpia y no se visualiza lo capturado en mi base

Se queda así

Y no hace ninguna otra acción

Intenté reproducir tu macro, y tiene algunos detalles:

Esta línea tiene el error "Argumento o llamada a procedimiento no válida":

If revisa And IsNumeric(empaque) And (Cant_1)

Eso es porque (Cant_1) no lo estás comparando con algo, y entonces se asume que es una llamada a una función, pero es un textbox.


Tampoco pusiste tu función:

 Mdlto. Limpia

Supongo que esa función es la que limpia, pero tienes esto:

    If Respuesta = vbYes Then 'Si el usuario elige si.
        MiCadena = "Si" 'Ejecuta una acción
    Else ' El usuario eigió el botón no.
        Mdlto.limpia
    End If

Eso significa que si respondes "Sí", lo único que haces es poner en la variable MiCadena = "Si".

En caso de responder "No", ejecutas la macro "limpia" pero no tengo el código y no sé qué hace.


Envíame tu archivo para depurar el código.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Isaac Huerta

Listo ya te lo envíe

¿Puedes explicar la secuencia que quieres?

1. Presiono el botón guardar.

2. Validar si toda la información es correcta

3. Si no es correcta, enviar mensajes de error y terminar

4. Si la información es correcta, Guardar en la hoja

5. Después de guardar, preguntar si quiere continuar.

6. Si responde "Sí", ¿qué debe hacer?, ¿Si responde "No" qué debe hacer?

1. Presiono el botón guardar.

al presionar el boton guardar debe guardar el registro capturado y limpiar todo el formulario

2. Validar si toda la información es correcta

aqui si hay "n" textboxs vacios y al dar guardar sale un mensaje que todos los datos deben ser capturados y el o los textboxs vacios los marcara en rojo 

3. Si no es correcta, enviar mensajes de error y terminar

los errores detectados los marcara en rojo para corregirlos

4. Si la información es correcta, Guardar en la hoja

no muestra nada y guarda los datos en la hoja

5. Después de guardar, preguntar si quiere continuar.

6. Si responde "Sí", ¿qué debe hacer? debe guardar los datos en la hoja y limpiar el formulario

, ¿Si responde "No" qué debe hacer? limpiar el formulario y cerrarlo

Te anexo el código simplificado para que lo revises.

Quité los códigos que tenías en el módulo Mdlto (verifica, limpia y senala)

Todo que en el mismo botón Guardar:

Private Sub Cmd_Guardar_Click()
'
    'VALIDACIONES
    existe = False
    For Each ctx In Controls
        If TypeOf ctx Is MSForms.ComboBox Or _
           TypeOf ctx Is MSForms.TextBox Or _
           TypeOf ctx Is MSForms.CheckBox Then
            ctx.BackColor = &H80000005
        End If
    Next
    'Controles de combo
        cmbs = Array(Cmbx_Operador, Mot_1, Mot_2)
        For i = LBound(cmbs) To UBound(cmbs)
            If cmbs(i).Value = "" Or cmbs(i).ListIndex = -1 Then
                existe = True
                cmbs(i).BackColor = RGB(255, 0, 0)
            End If
        Next
    'Controles de texto
        txts = Array(sap, Plza, sucursal, Camioneta, fecha, _
                    Sku1, descripcion_uno, Sku2, descripcion_dos, _
                    Sku3, descripcion_tres, Sku4, descripcion_cuatro, _
                    promo1, descripcion_cinco, promo2, descripcion_seis, _
                    comentarios)
        For i = LBound(txts) To UBound(txts)
            If txts(i).Value = "" Then
                existe = True
                txts(i).BackColor = RGB(255, 0, 0)
            End If
        Next
    'Controles de checkbox
        If uno_si.Value = False And uno_no.Value = False Then
            uno_si.BackColor = RGB(255, 0, 0)
            existe = True
        End If
        If dos_si.Value = False And dos_no.Value = False Then
            dos_si.BackColor = RGB(255, 0, 0)
            existe = True
        End If
    'Controles de número
        nums = Array(empaque, Cant_1, Cant_2, Cant_3, Cant_4, Cant_5, Cant_6)
        For i = LBound(nums) To UBound(nums)
            If nums(i).Value = "" Or Not IsNumeric(nums(i).Value) Then
                existe = True
                nums(i).BackColor = RGB(255, 0, 0)
            End If
        Next
    '
    If existe Then
        MsgBox "Existen errores en la captura. Revisar"
        Exit Sub
    End If
    '
    'Si ya no existen errores, entonces se guarda la información en la hoja
    Sheets("ENC").Select
    u = Range("A" & Rows.Count).End(xlUp).Row + 1
    Cells(u, 1) = sap.Text
    Cells(u, 2) = Plza.Text
    Cells(u, 3) = sucursal.Text
    Cells(u, 4) = Cmbx_Operador.Text
    Cells(u, 5) = Camioneta.Text
    Cells(u, 6) = fecha.Text
    Cells(u, 7) = empaque.Text
    Cells(u, 8) = Sku1.Value
    Cells(u, 9) = descripcion_uno.Value
    Cells(u, 10) = Cant_1.Value
    Cells(u, 11) = Sku2.Value
    Cells(u, 12) = descripcion_dos.Value
    Cells(u, 13) = Cant_2.Value
    Cells(u, 14) = Sku3.Value
    Cells(u, 15) = descripcion_tres.Value
    Cells(u, 16) = Cant_3.Value
    Cells(u, 17) = Sku4.Value
    Cells(u, 18) = descripcion_cuatro.Value
    Cells(u, 19) = Cant_4.Value
    Cells(u, 20) = promo1.Value
    Cells(u, 21) = descripcion_cinco.Value
    Cells(u, 22) = Cant_5.Value
    Cells(u, 23) = promo2.Value
    Cells(u, 24) = descripcion_seis.Value
    Cells(u, 25) = Cant_6.Value
    Cells(u, 26) = comentarios.Value
    Cells(u, 27) = IIf(uno_si, "Si", "No")
    Cells(u, 28) = Mot_1.Value
    Cells(u, 29) = IIf(dos_si, "Si", "No")
    Cells(u, 30) = Mot_2.Value
    '
    usuario = Application.UserName
    Mensaje = usuario & " " & "¿Desea continuar capturando ?" & " " & Now 'Define el mensaje
    Estilo = vbYesNo + vbCritical + vbDefaultButton2 ' Define los botones  que se mostrarán
    Titulo = "Base Captura ALEN" 'Define el titulo que se mostrará en la ventana
    Ayuda = "DEMO.HLP" ' Define el archivo de ayuda
    Ctxt = 1000 'Define el tema 'El texto 'Muestra el mensaje
    If MsgBox(Mensaje, Estilo, Titulo, Ayuda, Ctxt) = vbNo Then Unload Me
    '
    For Each ctx In Controls
        If TypeOf ctx Is MSForms.ComboBox Or _
           TypeOf ctx Is MSForms.TextBox Then
                ctx.Value = ""
        End If
        If TypeOf ctx Is MSForms.CheckBox Then
            ctx.Value = False
        End If
    Next
    fecha.SetFocus
End Sub

Tal vez se pueden hacer otros detalles, pero revísalo y me comentas.

Muchas gracias dante 

ahora  seria posible que el registro de los skus se capturen en una columna especifica 

es decir al hacer la captura al darle click en guardar 

el sku1,sku2,sku3,sku4,promo1promo2 , se muestren en la columna h ( h6, h7,h8, etc... )  y sus descripciones en la colunma i ( de igual forma) 

No entiendo a qué te refieres.

Según tu código el SKU1 se guarda en la columna H, el SKU2 se guarda en la columna K.

¿Ya no quieres eso? Si necesitas otra coas, con gusto te sigo apoyando, valora esta respuesta y crea una nueva de lo que necesitas explicando con ejemplos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas