factura en excel con visual 2

22
TALLER DE FORMULARIOS EN EXCEL FABIO G GARCIA R. – CME 1 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

Upload: pape-melo

Post on 25-Dec-2015

47 views

Category:

Documents


2 download

DESCRIPTION

Factura en Excel Con Visual 2

TRANSCRIPT

Page 1: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME 1

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

Page 2: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME 2

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

Page 3: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME 3

solo vamos a tomar en cuenta los lugares que hay que llenar, ya que en el papel

están marcados las líneas. En pocas palabras, excel solo va a imprimir lo que

debería 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 idéntica 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 están 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, sácale una copia fotostática a su factura e imprime la plantilla de Excel en

Page 4: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME 4

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)

Page 5: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME 5

DISEÑO DE LOS FORMULARIOS

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

Los formularios a crear son:

- Captura de clientes

- Captura de productos

- Impresión de factura

- Catálogo de productos

- Catálogo 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

impresión de la factura.

La creación de los formularios omitidos los debe hacer por su cuenta.

La manera de cambiar las propiedades también esta explicado con anterioridad,

también vamos a omitir esa explicación.

Page 6: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME 6

La creación de formularios e inserción de controles también 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

Page 7: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME 7

-----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 creación, ubíquelos a la misma altura uno junto de otro.

Además, 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

Page 8: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME 8

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 diseño:

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 México, 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

- Además, inserte un txtLetras debajo del lstCantidad y estiras su tamaño hacia la

Page 9: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME 9

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

- Agregue un botón de comando llamado cmdProductos con caption = Productos y

ubíquelo a la derecha de cmdBuscar

- Agregue un botón de comando llamado cmdAceptar con caption = Aceptar y

ubíquelo a la derecha de cmdProductos

- 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

- Hacer doble click encima del form en alguna región donde no tenga ningún

control.

Page 10: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME

10

- Aparece la ventana de código. 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 están 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 líneas de código

en ese espacio se van a ejecutar cuando el formulario se active.

Page 11: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME

11

Las líneas de abajo del evento click se pueden eliminar para no causar confusión.

Y luego, digite dentro del evento activate del formulario las siguientes líneas:

Private Sub UserForm_Activate()

Me.txtFecha.Text = Date

End Sub

A continuación pulse F5 y verifica que en el txtFecha se ha escrito la fecha

automáticamente.

Si hasta aquí todo va bien, continuamos con los eventos de los demás 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()

Page 12: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME

12

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

End Sub

Al final de la ventana de código, se van a crear tres procedimientos que no están

ligados al evento de ningún control, y que pueden ser ejecutados cuando se

requiera, aun sin ejecutar ningún 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 cálculos 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)

Page 13: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME

13

Next

End Sub

Private Sub ImprimirFactura() ' esta hace lo mismo pero con la hoja de impresión

Dim i As Integer

Sheets( “IMPRESION” ).Activate

Range( "a1:h25" ).ClearContents ' limpiamos la hoja para la nueva impresión (esta

línea 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

Page 14: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME

14

Page 15: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME

15

Y eso es todo con respecto a la facturación.

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

Ubíquelos de la siguiente manera:

lblClientes en la parte más arriba, luego abajo el cmbClientes y abajo de este

Page 16: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME

16

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

Page 17: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME

17

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

Page 18: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME

18

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 diseño:

Código de los eventos:

Private Sub cmbClave_Change()

If Me.cmbClave.Value = "" Then Exit Sub

Dim sUltimaCelda As String

Page 19: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME

19

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 números

If KeyAscii < 48 Or KeyAscii > 57 Then

Page 20: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME

20

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í están las capturas para que vean la identación (tabulación)

Page 21: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME

21

- EL MENU es para finalizar el ejemplo:

Page 22: Factura en Excel Con Visual 2

TALLER DE FORMULARIOS EN EXCEL

FABIO G GARCIA R. – CME

22

-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

- ubíquelos en el orden de creación uno al lado de otro, se visualiza:

- En el evento Click del control cmdFacturar digite:

Private Sub cmdFacturar_Click()

frmFacturacion.Show

End Sub