Limpiar controles en form (vba excel)

Sub limpiar_controles()
    cbx_nombre.Value = ""
    txt_codigo.Value = ""
    txt_precio_compra.Value = ""
    txt_cantidad.Value = ""
    txt_importe.Value = ""
End Sub
Private Sub cmb_aceptar_Click()
'agregar el artículo al listbox de fr_salidas_ventas
limpiar_controles
    If cbx_nombre.ListIndex > -1 Then
        With frm_entradas_nueva.ListBox1
            .AddItem cbx_nombre
            a = .ListCount - 1
            .List(a, 1) = txt_codigo
            .List(a, 2) = txt_cantidad
            .List(a, 3) = txt_precio_compra
            .List(a, 4) = txt_importe
            For i = 0 To a
                w_txt_total = w_txt_total + CDbl(.List(i, 4))
            Next
            frm_entradas_nueva.txt_total = w_txt_total
            End With
    End If
End Sub
Private Sub txt_cantidad_Change()
Dim Fila As Long
Dim Final As Long
Dim Registro As Long
Dim totImporte As Currency
Dim vPrecio_compra As Currency
vPrecio_compra = Me.txt_precio_compra.Value
'Con esta rutina actualizo el saldo existencia reflejado en el control txt_Saldo
    'Determino el final del listdo de existencias
Final = GetUltimoR(Hoja2)
    'Compruebo que el código ingresado en el ComboBox, coincida en hoja de existencias
 ' para realizar la respectiva operación aritmética
    For Registro = 1 To Final
        If cbx_nombre.Text = Hoja2.Cells(Registro, 1) Then
            Exit For
        End If
    Next
    totImporte = Val(Me.txt_cantidad) * vPrecio_compra
    Me.txt_importe.Value = FormatNumber(totImporte, 2)
    txt_importe = Format(txt_importe, "currency")
End Sub
Private Sub UserForm_Initialize()
txt_codigo.Enabled = False
txt_precio_compra.Enabled = False
txt_importe.Enabled = False
txt_importe = Format(txt_importe, "currency")
End Sub

el codigo me funciona perfecto, pero necesito insertar el sub limpiar_controles dentro del codigo del boton aceptar, para que cada vez que agregue un articulo a otro form se me limpie el form activo para poder seguir trabajando pero no consigo hacerlo funcionar.

Me da error no coinciden los tipos, y me lleva aqui:

Private Sub txt_cantidad_Change()
txt_cantidad_change vPrecio_compra = Me.txt_precio_compra.Value
end sub
Respuesta
1

Al limpiar los controles estás haciendo un cambio (change) en el control y por eso se ejecuta ese evento con el control vacío.

En la macro de pase de datos coloca al final de todo la llamada para la limpieza de controles:

'se limpia el formulario para seguir con otra tarea
Call limpiar_Controles      'Cancelar_Click
End Sub

Y en los controles que puedan presenten error al dejarlos vacíos coloca la 1er línea. (¿Parece qué tu macro tiene un error de copiado? )

Private Sub txt_cantidad_Change()
If txt_cantidad = "" Then Exit Sub 
vPrecio_compra = Me.txt_precio_compra.Value
end sub

Te invito a descargar un ejemplo completo desde aquí. Desde allí también podrás acceder al video explicativo.

Sdos y no olvides valorar la respuesta.

Elsa

*Cyber-mes en manuales Excel

¡Gracias!

Me sigue dando el mismo error colocando Call limpiar_controles, tanto dentro del witch como fuera.

No, no está duplicado. Esa es la línea de código donde me lleva el error al ejecutar el botón.

¿Probaste cambiando tu macro del txt por esta otra?

Private Sub txt_cantidad_Change()
If txt_cantidad = "" Then Exit Sub      'esta es para que no ejecute el resto cuando limpias los controles
vPrecio_compra = Me.txt_precio_compra.Value
end sub

Y la de la llamada a la subrutina de limpieza va la macro del botón Aceptar, al final, entre estas 2 líneas:

    End If
    Call limpiar_controles
End Sub

Así no te debiera dar ningún error en la parte que te comento. Si vuelve a detenerse presioná el botón Depurar y tomá imagen del Editor donde se pueda observar la línea de color.

Sdos!

1 respuesta más de otro experto

Respuesta
1

Estas mezclando peras con manzanas de entrada esta instrucción esta mal escrita estas mezclando una variable con el nombre de un evento en este caso txt_cantidad:change, solo quita esa parte

txt_cantidad_change vPrecio_compra = Me.txt_precio_compra.Value

y queda asi

Private Sub txt_cantidad_Change()
vprecio_compra = Me.txt_precio_compra.Value
End Sub

¡Gracias!

Ese código no esta en mi form, no se que ha podido pasar:

txt_cantidad_change vPrecio_compra = Me.txt_precio_compra.Value

lo tengo asi:

Private Sub txt_cantidad_Change()
Dim Fila As Long
Dim Final As Long
Dim Registro As Long
Dim totImporte As Currency
Dim vPrecio_compra As Currency
vPrecio_compra = Me.txt_precio_compra.Value
'Con esta rutina actualizo el saldo existencia reflejado en el control txt_Saldo
'Determino el final del listdo de existencias
Final = GetUltimoR(Hoja2)
'Compruebo que el código ingresado en el ComboBox, coincida en hoja de existencias
' para realizar la respectiva operación aritmética
For Registro = 1 To Final
If cbx_nombre.Text = Hoja2.Cells(Registro, 1) Then
Exit For
End If
Next
totImporte = Val(Me.txt_cantidad) * vPrecio_compra
Me.txt_importe.Value = FormatNumber(totImporte, 2)
txt_importe = Format(txt_importe, "currency")
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas