You are on page 1of 22

TALLER DE FORMULARIOS EN EXCEL

EJERCICO PASO A PASO DE VISUAL EN EXCEL

Consideraciones - el código VBA es el mismo de Visual Basic 6, por lo que debe
funcionar también en versiones anteriores a Excel 2010.
. Se podría escribir un código bastante robusto y optimo pero eso incrementaría
las líneas al triple y podría causar confusión a los lectores novatos en
programación.
FORMATEANDO LAS HOJAS
bueno, primero abra Excel y de inmediato guarde el libro como factura.xls o
factura xlsm.
en excel 2010 debes guardarlo como libro con ejecución de macros ( xlsm )

ahora, el libro nos crea automáticamente 3 hojas. vamos a cambiarles el nombre
como sigue:
hoja1 = clientes
hoja2 = productos
hoja3 = facturas
FABIO G GARCIA R. – CME

1

TALLER DE FORMULARIOS EN EXCEL

bien, ahora inserte una hoja más y le pone el nombre de impresión

- lo siguiente son los encabezados.
en la hoja clientes vamos a escribir lo siguiente en las celdas siguientes:
A1 = razon, B1 = rfc, C1 = direccion
ingresar unos cuantos datos

la hoja productos
A1 = clave, B1 = descripcion, C1 = precio
ingresar unos cuantos datos

la hoja facturas
A1 = factura, B1 = fecha, C1 = razon, D1 = descripcion, E1 = precio, F1 =
cantidad, G1 = total

- ahora va la hoja de la impresión.
Aquí debera hacer una réplica de su factura de papel en la hoja de excel, pero
FABIO G GARCIA R. – CME

2

TALLER DE FORMULARIOS EN EXCEL solo vamos a tomar en cuenta los lugares que hay que llenar. Finalmente. cuando transpongamos la hoja reciclada con la factura original. excel solo va a imprimir lo que debería escribir a mano. En pocas palabras. para comprobar que la plantilla de Excel corresponde al papel de tu factura. la llenamos con datos ficticios y luego la imprimimos en una hoja reciclada (no en la hoja de la factura). supongamos que nuestra factura de papel en blanco es la siguiente: AJUSTANDO LA HOJA DE IMPRESION En Excel vamos a hacer una plantilla idéntica a la factura. sácale una copia fotostática a su factura e imprime la plantilla de Excel en FABIO G GARCIA R. Luego transparentamos la hoja reciclada con la factura y checamos que los espacios que llenamos están en el lugar correcto que corresponde al papel de la factura. Por ejemplo. los lugares queden perfectamente alineados. Este paso hay que repetirlo hasta que. – CME 3 . ya que en el papel están marcados las líneas.

TALLER DE FORMULARIOS EN EXCEL la copia. (murphy dice que windows solo falla cuando se tiene algo sin guardar en pantalla) FABIO G GARCIA R. entonces podemos pasar al siguiente paso. – CME 4 . Guarde el archivo para que no pierda los cambios. Si todo corresponde.

Catálogo de productos . también vamos a omitir esa explicación. la captura de datos simples ya se explicó en el taller anterior. por lo que la captura de clientes y de productos la vamos a omitir para centrarnos en la impresión de la factura.Captura de clientes . Los formularios a crear son: . – CME 5 . La creación de los formularios omitidos los debe hacer por su cuenta.TALLER DE FORMULARIOS EN EXCEL DISEÑO DE LOS FORMULARIOS Pulsa ALT + F11 y se abre la ventana de VBA. FABIO G GARCIA R.Impresión de factura .Menú Sin embargo.Catálogo de clientes . La manera de cambiar las propiedades también esta explicado con anterioridad.Captura de productos .

width = 444 y height = 78 (Amplie el form ) -----Dentro de grbDatosCliente vas a insertar 5 etiquetas y 5 cuadros de texto -----lblRazon con caption = Razon -----lblDireccion con caption = Direccion -----lblRFC con caption = RFC -----lblFecha con caption = Fecha -----lblNoFactura con caption = No.Inserta los siguientes controles con los siguientes nombres/propiedades: grbDatosCliente con caption = Datos del Cliente. Factura -----txtRazon -----txtDireccion FABIO G GARCIA R. ) chk = casilla de verificacion o checkbox (el cuadrito que le pones o quitas una palomita) FACTURACION .. Los prefijos que vamos a usar para los controles son: lbl = etiqueta o label txt = cuadro de texto o textbox cmb = cuadro combinado o combobox lst = cuadro de lista o listview grb = marco o frame (grb de groupbox.Agregue un nuevo formulario y le coloca el nombre de frmFacturacion y caption IMPRESION DE FACTURA . – CME 6 .TALLER DE FORMULARIOS EN EXCEL La creación de formularios e inserción de controles también será omitida.

TALLER DE FORMULARIOS EN EXCEL -----txtRFC -----txtFecha -----txtNoFactura recuerde que a una etiqueta le corresponde a su lado un cuadro de texto con el mismo nombre.25 y height = 162 en el orden de creación. – CME 7 . inserte una etiqueta arriba de cada lista para que el usuario sepa que contiene cada columna: arriba de lstCantidad coloca una lblCantidad con caption Cantidad FABIO G GARCIA R. Además. ubíquelos a la misma altura uno junto de otro. Acomode los espacios de manera que todo quede bien a la vista del usuario: .55 y height = 162 lstImporte con width = 77. por ejemplo.Ahora inserte 4 cuadros de lista afuera y por debajo del grbDatos Cliente con los siguientes atributos lstCantidad con width = 54 y height = 162 lstDescripcion con width = 227. txtRazon va ubicado al lado derecho de lblRazon.25 y height = 162 lstPrecio con width = 67.

5 y enabled = false (estoy en México.Además.TALLER DE FORMULARIOS EN EXCEL Arriba de lst Descripcion pones un lblDescripcion con caption descripcion y así con las otras dos listas restantes. se nota????) txtTotal con width = 61. inserte un txtLetras debajo del lstCantidad y estiras su tamaño hacia la FABIO G GARCIA R. ejemplo al txtSubtotal le ubica a su izquierda un lblSubtotal con caption = Subtotal. – CME 8 .5 y enabled = false (Cuando enabled es falso el control está bloqueado para su uso. .5 y enabled = false txtIVA con width = 61.Continuamos con la última parte de su diseño: inserte tres cuadros de texto debajo inmediato de lstImporte con los siguientes atributos: txtSubtotal con width = 61. y así con los tres txt's . cuando es true se puede usar) -A estos tres txt's ubiqueles sus etiquetas.

Este txt no lleva etiqueta.Agregue un botón de comando llamado cmdAceptar con caption = Aceptar y ubíquelo a la derecha de cmdProductos .Agregue un botón de comando llamado cmdProductos con caption = Productos y ubíquelo a la derecha de cmdBuscar . enabled = false.TALLER DE FORMULARIOS EN EXCEL derecha hasta llegar a la lblSubtotal y luego estiras hacia abajo hasta coincidir con lblIVA. .Agregue una casilla de verificación o checkbox con nombre chkImprimir y caption = Imprimir al aceptar y ubíquela a la derecha de cmdCancel este es el aspecto final que debe tener el formulario: PROGRAMANDO LOS EVENTOS . Le pone multiline = true. FABIO G GARCIA R. -Agregar un botón de comando llamado cmdBuscar con caption = Buscar Cliente y lo ubicamos en la parte de más abajo del formulario a la izquierda.Hacer doble click encima del form en alguna región donde no tenga ningún control. – CME 9 .

Entonces para programar un evento. si se fija.TALLER DE FORMULARIOS EN EXCEL . .Escoger el control UserForm (el formulario) . incluyendo el propio formulario pero con el nombre de UserForm. y del lado derecho están los eventos de los mismos. en la parte de arriba del lado izquierdo tiene el nombre de todos los controles que contiene el formulario. – CME 10 .Luego escoger el evento ACTIVATE .Aparece la ventana de código. escogemos en el lado izquierdo el control y del lado derecho el evento a programar. FABIO G GARCIA R.VBA va a insertar el encabezado y final del evento activate. Las líneas de código en ese espacio se van a ejecutar cuando el formulario se active.

Show ' mostrar el formulario de agregar productos End Sub Control UserForm.Show ' mostrar el formulario de buscar clientes End Sub Control cmdProductos.txtFecha. Y luego.Value) If Me. Si hasta aquí todo va bien. vbQuestion + vbYesNo) = vbNo Then Exit Sub guardarFactura MsgBox (chkImprimir. continuamos con los eventos de los demás controles como sigue: control cmdAceptar. evento Click Private Sub cmdBuscar_Click() frmBuscarCliente. evento Click Private Sub cmdAceptar_Click() If MsgBox( “finalizar la captura de la factura?". evento Click Private Sub cmdProductos_Click() frmAgregarProducto. digite dentro del evento activate del formulario las siguientes líneas: Private Sub UserForm_Activate() Me.Text = Date End Sub A continuación pulse F5 y verifica que en el txtFecha se ha escrito la fecha automáticamente. – CME 11 .Value = True Then ImprimirFactura End Sub Control cmdBuscar.chkImprimir. evento activate Private Sub UserForm_Activate() FABIO G GARCIA R.TALLER DE FORMULARIOS EN EXCEL Las líneas de abajo del evento click se pueden eliminar para no causar confusión.

Text ' insertamos los datos ActiveCell. se van a crear tres procedimientos que no están ligados al evento de ningún control.Next.List(i) ActiveCell.Next.Next.Next.List(i) FABIO G GARCIA R.ListCount ActiveCell.lstCantidad.txtSubtotal. – CME 12 .End(xlDown)(xlDropDown).Next.txtSubtotal.Value = Me.lstPrecio.Text = Round((Val(Me.txtRazon.Next.Text = Date ' para poner la fecha cuando se ejecute el form End Sub Al final de la ventana de código.Next.Next. iva y total Me.Value = Me.lstImporte.Value = Me.lstImporte.List(i) ActiveCell.Text ActiveCell.Next.Value = Me.Value = Me.Next.lstImporte. y que pueden ser ejecutados cuando se requiera.Next.TALLER DE FORMULARIOS EN EXCEL Me.Next.Next.Next.List(i) ActiveCell.List(i)) Next Me.ListCount .Text) / 100) * 16.Text For i = 0 To Me.Text) + Val(Me.Activate End If ActiveCell.txtTotal.Text = Val(Me.Value) = "" Then ' localizamos la celda en donde vamos a empezar a insertar Range( "A2" ). Public Sub sumarImporte() ' suma solo la última lista ( los importes) Dim i As Integer Dim dTotal As Double dTotal = 0 For i = 0 To Me.Text = dTotal If dTotal > 0 Then ' aquí se hacen los cálculos para el subtotal.lstDescripcion.Value = Me.Next.1 dTotal = dTotal + Val(Me.Text) End If End Sub Private Sub guardarFactura() Dim i As Integer Sheets( "facturas “ ).txtIVA.Next.lstCantidad. aun sin ejecutar ningún evento.txtFecha.Next.txtNoFactura.Next.Value = Me.Activate ' activamos la hoja en la que vamos a trabajar If Trim(Range( "A2" ).Activate Else Range( “ A1 “ ).Next.Next.txtIVA.txtSubtotal.txtFecha.Next. 2) Me.

Text Range( “C2” ).Text Range( “b20” ).Value = Me.txtDireccion.lstImporte.Next.List(i) ActiveCell.List(i) ActiveCell.Value = Me.Next.Text ActiveWindow. IgnorePrintAreas:=False End Sub .Next.Value = Me.Value = Me.Text Range( “C3” ).Activate Range( "a1:h25" ).Value = Me. Collate:=True.Next.txtSubtotal.Next.txtIVA.Value = Me.List(i) ActiveCell(xlDropDown).ClearContents ' limpiamos la hoja para la nueva impresión (esta línea es necesaria) Range( “g2” ).Value = Me.txtRazon.SelectedSheets.txtTotal.Text Range( “g20” ).lstDescripcion.Value = Me.Next.1 ActiveCell.txtFecha.Next.Activate Next Range( “g19” ).Next. – CME 13 .Next.List(i) ActiveCell.Select For i = 0 To Me.Las capturas FABIO G GARCIA R.Next.Text Range( “g21” ).PrintOut Copies:=1.Value = Me.List(i) ActiveCell.Next.Next.txtLetras.ListCount .Text Range( “b8” ).lstPrecio.lstPrecio.TALLER DE FORMULARIOS EN EXCEL Next End Sub Private Sub ImprimirFactura() ' esta hace lo mismo pero con la hoja de impresión Dim i As Integer Sheets( “IMPRESION” ).Value = Me.Value = Me.lstCantidad.Value = Me.lstCantidad.

– CME 14 .TALLER DE FORMULARIOS EN EXCEL FABIO G GARCIA R.

CARGAR CLIENTES . luego abajo el cmbClientes y abajo de este FABIO G GARCIA R.TALLER DE FORMULARIOS EN EXCEL Y eso es todo con respecto a la facturación.agregale los siguientes controles.cierra el formulario frmFacturacion .agrega otro formulario llamado frmBuscarCliente con caption = Buscar Cliente . lblClientes con caption = Clientes cmbClientes con style = 2 frmStyleDropDownList (lista para escoger items) cmdAceptar con caption = Aceptar Ubíquelos de la siguiente manera: lblClientes en la parte más arriba. – CME 15 .

Next. SearchOrder:=xlByRows.txtRFC. LookAt:=xlPart.Text = ActiveCell.Value .Value) = "" Then Exit Sub FABIO G GARCIA R. SearchFormat:=False). evento Change Private Sub cmbClientes_Change() Cells. evento Click Private Sub cmdAceptar_Click() With frmFacturacion .Value End With Unload Me End Sub Control UserForm.txtRazon.Clear Sheets( “CLIENTEs” ).Next.Text = ActiveCell. evento Activate Private Sub UserForm_Activate() Dim sUltimaCelda As String Me.Text = ActiveCell.Text.txtDireccion. – CME 16 .Activate If Trim(Range( “A2” ).Activate End Sub Control cmdAceptar.cmbClientes.Find(What:=Me. MatchCase:=False.Value . After:=ActiveCell. LookIn:= _ xlFormulas. SearchDirection:= _ xlNext.TALLER DE FORMULARIOS EN EXCEL coloque el cmdAceptar.cmbClientes.Next. Los eventos: control cmdClientes.

cmbClientes.Value) = "" Then Me. – CME 17 .End(xlDown).TALLER DE FORMULARIOS EN EXCEL If Trim(Range( “A3” ).Value) Next End Sub Asi se debe ver en la ventana de codigo FABIO G GARCIA R.Address For Each f In Range( “A2:" & sUltimaCelda).AddItem (Range( “A2” ).cmbClientes.AddItem (f.Cells Me.Value) Exit Sub End If sUltimaCelda = Range( “A1” ).

insertale los siguientes controles: cmbClave con style = 2 frmStyleDropDownList txtDescripcion con enabled = false txtPrecio con enabled = false txtCantidad cmdAgregar con caption = Agregar A los txt's y al cmb les ubica los respectivos lbl's . – CME 18 .TALLER DE FORMULARIOS EN EXCEL Ya se pueden cargar a los clientes en la factura.cmbClave. AGREGAR PRODUCTOS a la factura es similar a cargar los clientes. solo que vamos a llenar las listas.Agregue un nuevo formulario llamado frmAgregarProducto y le coloca caption = Agregar Productos .Cierre los formularios abiertos .Value = "" Then Exit Sub Dim sUltimaCelda As String FABIO G GARCIA R. . se puede observar el diseño: Código de los eventos: Private Sub cmbClave_Change() If Me.

txtPrecio.End(xlDown).ListCount > 1 Then sUltimaCelda = Range( “A1” ).txtPrecio.Activate With Me .txtCantidad.txtPrecio. LookIn:=xlValues _ .txtDescripcion.ListIndex = -1 Me.Text = "" Me.Text = "" Me.SetFocus End Sub Private Sub txtCantidad_KeyPress(ByVal KeyAscii As MSForms.AddItem (Me. SearchFormat:=False).txtDescripcion.Text = "" Then MsgBox ( “ elegir un producto!!” ): Exit Sub With frmFacturacion .txtCantidad.Text = ActiveCell.txtDescripcion.Address Else sUltimaCelda = "A2" End If Range( “A2:" & sUltimaCelda).Text = "" If Me.Text) * Val(Me. SearchDirection:= _ xlNext.Text) .cmbClave.Text) = "" Then MsgBox ( “ ingresar la cantidad!!” ): Exit Sub If Me.Text = ActiveCell. SearchOrder:=xlByRows. After:=ActiveCell.Text = "" Me.AddItem (Me.cmbClave.Find(What:=Trim(Me.Next.Text))) End With frmFacturacion.Text = "" Me.txtPrecio.txtPrecio.AddItem (Me.ReturnInteger) ' esto es para que el textbox solo acepte números If KeyAscii < 48 Or KeyAscii > 57 Then FABIO G GARCIA R.txtDescripcion.txtCantidad.Next.txtCantidad.Next.lstPrecio.Text) .lstImporte.AddItem (Str(Val(Me.TALLER DE FORMULARIOS EN EXCEL Me.Text) . MatchCase:=False.cmbClave. – CME 19 .cmbClave.Select Selection. LookAt:=xlPart.Value End With End Sub Private Sub cmdAgregar_Click() If Trim(Me.lstDescripcion.txtDescripcion.sumarImporte Me.lstCantidad.Value .Text).

cmbClave.TALLER DE FORMULARIOS EN EXCEL KeyAscii = 0 End If End Sub Private Sub UserForm_Activate() Dim sUltimaCelda As String Me.Address For Each f In Range( “A2:" & sUltimaCelda).Activate If Trim(Range( “A2” ).Value) Next End Sub .End(xlDown).Value) = "" Then Exit Sub If Trim(Range( “A3” ).Aquí están las capturas para que vean la identación (tabulación) FABIO G GARCIA R.Cells Me.Value) = "" Then Me.Value) Exit Sub End If sUltimaCelda = Range( “A1” ).Clear Sheets( “PRODUCTOS" ).cmbClave.AddItem (Range( “A2” ).AddItem (f. – CME 20 .cmbClave.

EL MENU es para finalizar el ejemplo: FABIO G GARCIA R. – CME 21 .TALLER DE FORMULARIOS EN EXCEL .

TALLER DE FORMULARIOS EN EXCEL -Inserta un form con nombre frmMenu y caption = Menu -Inserte tres botones cmdFacturar con caption = Facturar cmdCapturaCliente con caption = Agregar Cliente cmdCapturaProducto con caption = Agregar Producto . – CME 22 . se visualiza: .ubíquelos en el orden de creación uno al lado de otro.Show End Sub FABIO G GARCIA R.En el evento Click del control cmdFacturar digite: Private Sub cmdFacturar_Click() frmFacturacion.