Anda di halaman 1dari 22

TALLER DE FORMULARIOS EN EXCEL

EJERCICO PASO A PASO DE VISUAL EN EXCEL

Consideraciones - el cdigo VBA es el mismo de Visual Basic 6, por lo que debe


funcionar tambin en versiones anteriores a Excel 2010.
. Se podra escribir un cdigo bastante robusto y optimo pero eso incrementara
las lneas al triple y podra causar confusin a los lectores novatos en
programacin.
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 ejecucin de macros ( xlsm )

ahora, el libro nos crea automticamente 3 hojas. vamos a cambiarles el nombre


como sigue:
hoja1 = clientes
hoja2 = productos
hoja3 = facturas
FABIO G GARCIA R. CME

TALLER DE FORMULARIOS EN EXCEL

bien, ahora inserte una hoja ms y le pone el nombre de impresin

- 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 impresin.


Aqu debera hacer una rplica de su factura de papel en la hoja de excel, pero
FABIO G GARCIA R. CME

TALLER DE FORMULARIOS EN EXCEL

solo vamos a tomar en cuenta los lugares que hay que llenar, ya que en el papel
estn marcados las lneas. En pocas palabras, excel solo va a imprimir lo que
debera escribir a mano.
Por ejemplo, supongamos que nuestra factura de papel en blanco es la siguiente:

AJUSTANDO LA HOJA DE IMPRESION

En Excel vamos a hacer una plantilla idntica a la factura, la llenamos con datos
ficticios y luego la imprimimos en una hoja reciclada (no en la hoja de la factura).
Luego transparentamos la hoja reciclada con la factura y checamos que los
espacios que llenamos estn en el lugar correcto que corresponde al papel de la
factura.
Este paso hay que repetirlo hasta que, cuando transpongamos la hoja reciclada
con la factura original, los lugares queden perfectamente alineados.

Finalmente, para comprobar que la plantilla de Excel corresponde al papel de tu


factura, scale una copia fotosttica a su factura e imprime la plantilla de Excel en
FABIO G GARCIA R. CME

TALLER DE FORMULARIOS EN EXCEL

la copia. Si todo corresponde, entonces podemos pasar al siguiente paso.

Guarde el archivo para que no pierda los cambios, (murphy dice que windows solo
falla cuando se tiene algo sin guardar en pantalla)

FABIO G GARCIA R. CME

TALLER DE FORMULARIOS EN EXCEL

DISEO DE LOS FORMULARIOS


Pulsa ALT + F11 y se abre la ventana de VBA.

Los formularios a crear son:


- Captura de clientes
- Captura de productos
- Impresin de factura
- Catlogo de productos
- Catlogo de clientes
- Men
Sin embargo, 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
impresin de la factura.

La creacin de los formularios omitidos los debe hacer por su cuenta.


La manera de cambiar las propiedades tambin esta explicado con anterioridad,
tambin vamos a omitir esa explicacin.
FABIO G GARCIA R. CME

TALLER DE FORMULARIOS EN EXCEL

La creacin de formularios e insercin de controles tambin ser omitida..


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, )
chk = casilla de verificacion o checkbox (el cuadrito que le pones o quitas una
palomita)
FACTURACION

- Agregue un nuevo formulario y le coloca el nombre de frmFacturacion y caption IMPRESION DE FACTURA

- Inserta los siguientes controles con los siguientes nombres/propiedades:


grbDatosCliente con caption = Datos del Cliente, 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. Factura
-----txtRazon
-----txtDireccion
FABIO G GARCIA R. CME

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, por ejemplo, txtRazon va ubicado al lado derecho de lblRazon.
Acomode los espacios de manera que todo quede bien a la vista del usuario:

- 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.25 y height = 162
lstPrecio con width = 67.55 y height = 162
lstImporte con width = 77.25 y height = 162
en el orden de creacin, ubquelos a la misma altura uno junto de otro.
Adems, 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. CME

TALLER DE FORMULARIOS EN EXCEL

Arriba de lst Descripcion pones un lblDescripcion con caption descripcion


y as con las otras dos listas restantes.

- Continuamos con la ltima parte de su diseo:


inserte tres cuadros de texto debajo inmediato de lstImporte con los siguientes
atributos:
txtSubtotal con width = 61.5 y enabled = false
txtIVA con width = 61.5 y enabled = false (estoy en Mxico, se nota????)
txtTotal con width = 61.5 y enabled = false
(Cuando enabled es falso el control est bloqueado para su uso, cuando es true
se puede usar)
-A estos tres txt's ubiqueles sus etiquetas, ejemplo al txtSubtotal le ubica a su
izquierda un lblSubtotal con caption = Subtotal, y as con los tres txt's
- Adems, inserte un txtLetras debajo del lstCantidad y estiras su tamao hacia la
FABIO G GARCIA R. CME

TALLER DE FORMULARIOS EN EXCEL

derecha hasta llegar a la lblSubtotal y luego estiras hacia abajo hasta coincidir con
lblIVA. Le pone multiline = true, enabled = false. Este txt no lleva etiqueta.
-Agregar un botn de comando llamado cmdBuscar con caption = Buscar Cliente y
lo ubicamos en la parte de ms abajo del formulario a la izquierda.
- Agregue un botn de comando llamado cmdProductos con caption = Productos y
ubquelo a la derecha de cmdBuscar
- Agregue un botn de comando llamado cmdAceptar con caption = Aceptar y
ubquelo a la derecha de cmdProductos
- Agregue una casilla de verificacin o checkbox con nombre chkImprimir y caption
= Imprimir al aceptar y ubquela a la derecha de cmdCancel este es el aspecto
final que debe tener el formulario:

PROGRAMANDO LOS EVENTOS


- Hacer doble click encima del form en alguna regin donde no tenga ningn
control.
FABIO G GARCIA R. CME

TALLER DE FORMULARIOS EN EXCEL

- Aparece la ventana de cdigo. si se fija, en la parte de arriba del lado izquierdo


tiene el nombre de todos los controles que contiene el formulario, incluyendo el
propio formulario pero con el nombre de UserForm, y del lado derecho estn los
eventos de los mismos. Entonces para programar un evento, escogemos en el
lado izquierdo el control y del lado derecho el evento a programar.
- Escoger el control UserForm (el formulario)

- Luego escoger el evento ACTIVATE

- VBA va a insertar el encabezado y final del evento activate. Las lneas de cdigo
en ese espacio se van a ejecutar cuando el formulario se active.

FABIO G GARCIA R. CME


10

TALLER DE FORMULARIOS EN EXCEL

Las lneas de abajo del evento click se pueden eliminar para no causar confusin.
Y luego, digite dentro del evento activate del formulario las siguientes lneas:

Private Sub UserForm_Activate()


Me.txtFecha.Text = Date
End Sub
A continuacin pulse F5 y verifica que en el txtFecha se ha escrito la fecha
automticamente.
Si hasta aqu todo va bien, continuamos con los eventos de los dems controles
como sigue:
control cmdAceptar, evento Click

Private Sub cmdAceptar_Click()


If MsgBox( finalizar la captura de la factura?", vbQuestion + vbYesNo) = vbNo
Then Exit Sub
guardarFactura
MsgBox (chkImprimir.Value)
If Me.chkImprimir.Value = True Then ImprimirFactura
End Sub
Control cmdBuscar, evento Click
Private Sub cmdBuscar_Click()
frmBuscarCliente.Show ' mostrar el formulario de buscar clientes
End Sub
Control cmdProductos, evento Click
Private Sub cmdProductos_Click()
frmAgregarProducto.Show ' mostrar el formulario de agregar productos
End Sub
Control UserForm, evento activate
Private Sub UserForm_Activate()
FABIO G GARCIA R. CME
11

TALLER DE FORMULARIOS EN EXCEL

Me.txtFecha.Text = Date ' para poner la fecha cuando se ejecute el form


End Sub
Al final de la ventana de cdigo, se van a crear tres procedimientos que no estn
ligados al evento de ningn control, y que pueden ser ejecutados cuando se
requiera, aun sin ejecutar ningn evento.
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.lstImporte.ListCount - 1
dTotal = dTotal + Val(Me.lstImporte.List(i))
Next
Me.txtSubtotal.Text = dTotal
If dTotal > 0 Then ' aqu se hacen los clculos para el subtotal, iva y total
Me.txtIVA.Text = Round((Val(Me.txtSubtotal.Text) / 100) * 16, 2)
Me.txtTotal.Text = Val(Me.txtSubtotal.Text) + Val(Me.txtIVA.Text)
End If
End Sub
Private Sub guardarFactura()
Dim i As Integer
Sheets( "facturas ).Activate ' activamos la hoja en la que vamos a trabajar
If Trim(Range( "A2" ).Value) = "" Then ' localizamos la celda en donde vamos a
empezar a insertar
Range( "A2" ).Activate
Else
Range( A1 ).End(xlDown)(xlDropDown).Activate
End If
ActiveCell.Value = Me.txtNoFactura.Text ' insertamos los datos
ActiveCell.Next.Value = Me.txtFecha.Text
ActiveCell.Next.Next.Value = Me.txtRazon.Text
For i = 0 To Me.lstCantidad.ListCount
ActiveCell.Next.Next.Next.Value = Me.lstDescripcion.List(i)
ActiveCell.Next.Next.Next.Next.Value = Me.lstPrecio.List(i)
ActiveCell.Next.Next.Next.Next.Next.Value = Me.lstCantidad.List(i)
ActiveCell.Next.Next.Next.Next.Next.Next.Value = Me.lstImporte.List(i)
FABIO G GARCIA R. CME
12

TALLER DE FORMULARIOS EN EXCEL

Next
End Sub
Private Sub ImprimirFactura() ' esta hace lo mismo pero con la hoja de impresin
Dim i As Integer
Sheets( IMPRESION ).Activate
Range( "a1:h25" ).ClearContents ' limpiamos la hoja para la nueva impresin (esta
lnea es necesaria)
Range( g2 ).Value = Me.txtFecha.Text
Range( C2 ).Value = Me.txtRazon.Text
Range( C3 ).Value = Me.txtDireccion.Text
Range( b8 ).Select
For i = 0 To Me.lstCantidad.ListCount - 1
ActiveCell.Value = Me.lstCantidad.List(i)
ActiveCell.Next.Value = Me.lstDescripcion.List(i)
ActiveCell.Next.Next.Value = Me.lstPrecio.List(i)
ActiveCell.Next.Next.Next.Next.Value = Me.lstPrecio.List(i)
ActiveCell.Next.Next.Next.Next.Next.Value = Me.lstImporte.List(i)
ActiveCell(xlDropDown).Activate
Next
Range( g19 ).Value = Me.txtSubtotal.Text
Range( g20 ).Value = Me.txtIVA.Text
Range( g21 ).Value = Me.txtTotal.Text
Range( b20 ).Value = Me.txtLetras.Text
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True,
IgnorePrintAreas:=False
End Sub
- Las capturas

FABIO G GARCIA R. CME


13

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. CME


14

TALLER DE FORMULARIOS EN EXCEL

Y eso es todo con respecto a la facturacin.


CARGAR CLIENTES
- cierra el formulario frmFacturacion
- agrega otro formulario llamado frmBuscarCliente con caption = Buscar Cliente
- agregale los siguientes controles.
lblClientes con caption = Clientes
cmbClientes con style = 2 frmStyleDropDownList (lista para escoger items)
cmdAceptar con caption = Aceptar
Ubquelos de la siguiente manera:
lblClientes en la parte ms arriba, luego abajo el cmbClientes y abajo de este
FABIO G GARCIA R. CME
15

TALLER DE FORMULARIOS EN EXCEL

coloque el cmdAceptar.

Los eventos:

control cmdClientes, evento Change


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

TALLER DE FORMULARIOS EN EXCEL


If Trim(Range( A3 ).Value) = "" Then
Me.cmbClientes.AddItem (Range( A2 ).Value)
Exit Sub
End If
sUltimaCelda = Range( A1 ).End(xlDown).Address
For Each f In Range( A2:" & sUltimaCelda).Cells
Me.cmbClientes.AddItem (f.Value)
Next
End Sub
Asi se debe ver en la ventana de codigo

FABIO G GARCIA R. CME


17

TALLER DE FORMULARIOS EN EXCEL

Ya se pueden cargar a los clientes en la factura.


AGREGAR PRODUCTOS a la factura es similar a cargar los clientes, solo que
vamos a llenar las listas.

- Cierre los formularios abiertos


- Agregue un nuevo formulario llamado frmAgregarProducto y le coloca caption =
Agregar Productos
- 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 , se puede observar el diseo:

Cdigo de los eventos:


Private Sub cmbClave_Change()
If Me.cmbClave.Value = "" Then Exit Sub
Dim sUltimaCelda As String
FABIO G GARCIA R. CME
18

TALLER DE FORMULARIOS EN EXCEL

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

TALLER DE FORMULARIOS EN EXCEL

KeyAscii = 0
End If
End Sub
Private Sub UserForm_Activate()
Dim sUltimaCelda As String
Me.cmbClave.Clear
Sheets( PRODUCTOS" ).Activate
If Trim(Range( A2 ).Value) = "" Then Exit Sub
If Trim(Range( A3 ).Value) = "" Then
Me.cmbClave.AddItem (Range( A2 ).Value)
Exit Sub
End If
sUltimaCelda = Range( A1 ).End(xlDown).Address
For Each f In Range( A2:" & sUltimaCelda).Cells
Me.cmbClave.AddItem (f.Value)
Next
End Sub
- Aqu estn las capturas para que vean la identacin (tabulacin)

FABIO G GARCIA R. CME


20

TALLER DE FORMULARIOS EN EXCEL

- EL MENU es para finalizar el ejemplo:

FABIO G GARCIA R. CME


21

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
- ubquelos en el orden de creacin uno al lado de otro, se visualiza:

- En el evento Click del control cmdFacturar digite:


Private Sub cmdFacturar_Click()
frmFacturacion.Show
End Sub

FABIO G GARCIA R. CME


22

Anda mungkin juga menyukai