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
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:
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.
Guarde el archivo para que no pierda los cambios, (murphy dice que windows solo
falla cuando se tiene algo sin guardar en pantalla)
-----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
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:
- 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.
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:
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
coloque el cmdAceptar.
Los eventos:
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
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)