Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Userform aplicado al registro de facturas

| 12 comentarios

EJEMPLO DE USERFORM PARA REGISTRO DE FACTURAS

Los formularios en Excel son un método para ingresar datos a nuestras hojas y son de mucha utilidad porque nos ayudan a evitar errores en la captura de información

En este caso elaboraremos  un userform que nos permita registrar facturas de los proveedores de un
Supermercado,  teniendo en cuenta los siguientes variables:

  1. Tipo de proveedor
  2. Nombre del proveedor
  3. Número de factura
  4. Moneda en que se pagará la factura.
  5. Monto de la factura

En cuanto al tipo de proveedor, la persona que ingresará la factura tendrá para elegir dos opciones: proveedor nacional  o proveedor extranjero.

Para el caso del nombre de proveedor, éste podrá ser elegido de una lista de proveedores ya ingresados en el sistema.

La moneda en que se pagará la factura también estará predeterminada, pudiendo elegir entre soles, dólares y euros.

Comencemos con el desarrollo del formulario:

Lo primero que hacemos es crear en el archivo un botón de comando que esté asignado al formulario a ser llenado.

Para esto es necesario ir a PROGRAMADOR/INSERTAR/CONTROLES ACTIVEx/ BOTÓN DE COMANDO

uno2 300x181 Userform aplicado al registro de facturas

(Para mayor visualización de la imagen, hacer click en la misma)

Luego ingresamos un código en el Botón de comando que permita que al hacer click sobre éste se muestre el Formulario.

dos1 300x174 Userform aplicado al registro de facturas

(Para mayor visualización de la imagen, hacer click en la misma)

El código a ingresar es el siguiente:

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

También insertamos códigos que permitan mostrar mensajes de bienvenida y de salida:

Private Sub registrodedatos_Open()
MsgBox "Supermercados Eroski le da la bienvenida, por favor ingrese los datos."
End Sub

Private Sub registrodedatos_Deactivate()
MsgBox "Supermercados Eroski,precios más bajos siempre."
End Sub

El formulario  a  utilizarse tiene un aspecto así:

tres1 300x175 Userform aplicado al registro de facturas

(Para mayor visualización de la imagen, hacer click en la misma)

Tengamos en cuenta que:

CommandButton1 ---> Actualizar tipo de proveedor

OptionButton1 ---> Nacional

OptionButton2 ---> Extranjero

TextBox1 ---> Almacena Tipo de Proveedor seleccionado

ComboBox1---> Almacena lista de proveedores

CommandButton2---> Actualizar Proveedor

TextBox2 ---> Almacena  Proveedor seleccionado

TExtBox3 ---> Almacena número de factura.

ComboBox2---> Muestra moneda en que se puede pagar la factura (soles, dólares, euros).

TextBox4---> Almacena monto de la factura a registrar

CommandButton3 ---> Graba todos los datos registrados en la hoja Base de Datos

CommandButton4 --> SALIR

Los códigos de programación utilizados son los siguientes:

Private Sub CommandButton1_Click()
If OptionButton1.Value = True Then
TextBox1.Text = OptionButton1.Caption
End If
If OptionButton2.Value = True Then
TextBox1.Text = OptionButton2.Caption
End If
End Sub

Private Sub CommandButton2_Click()
TextBox2.Text = ComboBox1.Text
End Sub

Private Sub userform_activate()
ComboBox1.Clear
ComboBox1.AddItem ("LAIVE")
ComboBox1.AddItem ("SHEARVAN")
ComboBox1.AddItem ("BACKUS")
ComboBox1.AddItem ("NESTLE")
ComboBox1.AddItem ("REDFIELD")
ComboBox1.AddItem ("BIMBO")
ComboBox1.AddItem ("COLGATE PALMOLIVE")
ComboBox1.AddItem ("PROCTER&GAMBLE")
ComboBox1.AddItem ("FLORIDA")
ComboBox1.AddItem ("GLORIA")
ComboBox1.AddItem ("SUAVE")
ComboBox1.AddItem ("IPHOIDEAS")
ComboBox1.AddItem ("QUIRCH FOODS")
ComboBox1.AddItem ("KRAFT FOODS")
ComboBox1.AddItem ("LINDLEY")
ComboBox1.AddItem ("CLOROX")

ComboBox2.Clear
ComboBox2.AddItem ("PEN")
ComboBox2.AddItem ("USD")
ComboBox2.AddItem ("EUR")

End Sub

Private Sub CommandButton3_enter()
Sheets("Base de datos").Select
Range("A2").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell = TextBox1
ActiveCell.Offset(0, 1).Select
ActiveCell = TextBox2
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = ComboBox2.Value
ActiveCell.Offset(0, 1).Select
ActiveCell = TextBox3
ActiveCell.Offset(0, 1).Select
ActiveCell = TextBox4
ActiveCell.Offset(0, 1).Select

TextBox1 = Empty 'textbox1, dejar en blanco
TextBox2 = Empty
TextBox3 = Empty
TextBox4 = Empty
TextBox5 = Empty
MsgBox "REGISTRO FINALIZADO" 'mostrar el mensaje "REGISTRO FINALIZADO"
End Sub

Private Sub CommandButton4_Click()
Sheets("Principal").Select
UserForm1.Hide

End Sub

12 comentarios

  1. Buenas

    Muy buen codigo, sin embargo aun no me queda muy claro, la parte de cambio a proveedores. ¿En el código final ´´OptionButton1.Caption´´ es representado como ´´NACIONAL.Caption´´?

    Saludos

  2. Tambien se puede escribir el procedimiento del combo box1 con with; es mas beneficioso, en caso cambies de combo obx solo cambias el texto de una linea y no de todo el procedimiento:

    ComboBox1.Clear
    With ComboBox1
    .AddItem (“LAIVE”)
    .AddItem (“SHEARVAN”)
    .AddItem (“BACKUS”)
    .AddItem (“NESTLE”)
    .AddItem (“REDFIELD”)
    .AddItem (“BIMBO”)
    ....(Continua la Lista)
    End With

  3. excelente!!!pueden enviar el archivo

  4. Buenos dias

    Tengo dos consultas :

    Como hago para señalar en combobox1 varios datos de una columna sin contar las celdas en blanco.

    Otra duda, una vez señalado el dato en combobox1, quiero que automaticamente se llenen algunos cuadros de texto con datos de las celdas que están al costado derecho del dato señalado en el combobox1. Asimismo, quiero que se llene un cuadro de imagen con el archivo correpondiente al dato señaldao en el combobox1.

  5. Estoy tratando de realizar el ejemplo para poder entender el procedimiento, pero contiene algunos errores. Me pueden decir que error existe en esta linea
    Sheets("Base de datos").Select
    Muchas gracias.

    • Tienes que tener la hoja Base de Datos creada con anterioridad para que puedas seleccionarla así. Pero te aconsejo que no le pongas espacio al nombre de tus hojas. Ponle mejor BaseDeDatos a tu hoja y así seleccionala.

  6. BUEN APORTE AMIGO

    AYUDA : tengo una bade de datos de precios con sus totales y quiero q estos (TOTALES) se muestren en varios Label de un formulario userform.
    Ya lo hice pero hay un PROBLEMA : en los Labels me mueztra los datos sin formato ASI: ( 1450 ) ( 580 ) ( 10450.1 )
    Yo los quiero ASI: ( S/. 1,450.00 ) ( S/. 580.00 ) y ( S/. 10,450.10 ) y alineado a la izquierda
    AYUDA PORFAVOR Soy Novato en esto

    Sub LanzarFormulario()
    frmMostrarDatos.Label1.Caption = Sheets("Presupuesto").Range("E18").
    fmrMostrarDatos.Show
    End Sub

    Quiero q me de formato de moneda o que lo muestre tal como esta en la celda

    GRACIAS Espero su ayuda

  7. Buena información, si no necesito usar el userforms, sino hacer una plantilla en Excel que me capture datos y registre en otra hoja(No quiero usar el grabador de macros ) como se procedería, para la captura de datos hay mucha explicación pero usando userforms y grabador de macros, quiero el código VB el procedimiento, imagino que es similar al userforms pero quiero mas información.

  8. GRACIAS POR TAN IMPORTANTE INFORMACIÓN, REALMENTE SON MUY VALIOSOS CADA UNO DE SUS APORTES.

    BENDICIONES,

  9. Hola, quisiera que me ayudaras, estoy diseñando un sistema similar, solo que el que estoy diseñando es para ordenes de trabajo y cotizaciones, el problema es que llevo un registro de cada orden y cotización que hago, por lo tanto llevan un numero de registro y necesito que cada vez que realice una nueva se ponga un nuevo registro, por ejemplo: si tengo 19 ordenes y hago una nueva se ponga en automático el registro 20, espero me puedas ayudar

  10. Me podrian enviarme esta aplicacion por favor

    Userform aplicado al registro de facturas

  11. Hola, estoy buscando el mismo procedimiento, pero a la Inversa, es decir, desde la base de datos donde esta la Información de la Factura Hasta el userform donde se hará la consulta de toda la factura...

Deja una respuesta

Los campos requeridos estan marcados con *.