.
Este el segundo de ocho post, en los que se expondrá como realizar una factura o comprobante de venta, se mostró anteriormente como seleccionar cliente en listbox buscar sus datos y cargarlos a la factura; en esta oportunidad voy a explicar como cargar un nuevo cliente en el caso que al escribir en el textbox no se encuentre el cliente escrito en la base de datos y por ende no se muestre en el listbox, pasando los datos de los textbox a la hoja de Excel.
En las próximas entregas se mostrará como grabar en la base de datos los registros, como imprimir la factura, como guardarla en PDF y XLSX y por último como enviar la factura por mail mediante Outlook con imagen guardada en nuestra PC insertada en el cuerpo del mail con archivo de factura comprobante de venta o sale invoice adjunto.
Seguidamente se listan los links a los restantes post:
Como crear una factura o sale invoice seleccionando cliente de listbox
Como crear una factura o sale invoice guardar cliente nuevo
Como crear una factura o sale invoice seleccionando articulos en listbox
Como crear una factura o sale invoice eliminar articulos del listbox
Como crear una factura o sale invoice y guardar registro
Como crear una factura o sale invoice guardar e imprimir
Como crear una factura o sale invoice y guardar en PDF
Como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por MAIL
Como crear una factura o sale invoice y descontar de Stock o Inventario
Antes de seguir recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.
El ejemplo de macro que se muestra en este post, que permite mostrar como guardar datos de un formulario con textbox en una hoja de Excel, se puede descargar desde el link del final, siendo de acceso libre y gratuito.
El ejemplo contiene dos formularios uno con la factura de venta o sale invoice y otro formulario que es el que se utiliza para dar de alta o cargar clientes nuevos, la codificación del segundo formulario es más sencilla y es la siguiente, como se observa lo que hace la macro es pasar a la hoja de Excel los datos cargados en los textbox, realizado este paso cierra el formulario y se muestra el formulario de la factura para que se pueda seguir realizando la sale invoice o comprobante de venta; la codificación completa de los dos formularios que integran el ejemplo se muestra al final.
If UserForm4.TextBox1 = Empty Or UserForm4.TextBox2 = Empty Or UserForm4.TextBox3 = Empty Or UserForm4.TextBox4 = Empty Then Exit Sub
Set a = Sheets(«Clientes»)
uf = a.Range(«A» & Rows.Count).End(xlUp).Row + 1
a.Cells(uf, «A») = Val(UserForm4.TextBox1)
a.Cells(uf, «B») = UserForm4.TextBox2
a.Cells(uf, «C») = UserForm4.TextBox3
a.Cells(uf, «D») = UserForm4.TextBox4
UserForm2.TextBox1 = UserForm4.TextBox3
UserForm2.TextBox2 = UserForm4.TextBox4
MsgBox («Los datos se gaurdarón con éxito»), vbInformation, «AVISO»
Unload UserForm4
End Sub
En la parte inferior se encuentra toda la codificación correspondiente al formulario y módulo que se utiliza para que la macro busque a medida que se escribe en textbox y muestre los datos coincidentes en el listbox y una vez encontrado seleccionar el cliente con un click en el listbox y pasar los datos a los textbox respectivos.
El vídeo que sigue muestra una explicación más detallada y gráfica de la macro presentada, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como por ejemplo Como ingresar barras de fecha en Textbox automaticamente, buscar en listbox mientras escribes en textbox, Como conectar Excel con Word crear archivo e insertar texto, Como pasar datos de listbox con enter y muchos ejemplos más.
if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}
Código que se inserta en un módulo
Public cod, art, mar, pv, ctr, creg
Sub muestra1()
UserForm2.Show
End Sub
Código que se inserta en un formulario
Private Sub CommandButton1_Click()
Unload UserForm2
End Sub
Private Sub Label4_Click()
ActiveWorkbook.FollowHyperlink «https://macrosenexcel.com/p/home.html»
End Sub
Private Sub ListBox2_Click()
On Error Resume Next
ctr = 1
TextBox1 = Empty
TextBox2 = Empty
fila = Me.ListBox2.ListIndex
Me.TextBox1 = ListBox2.List(fila, 2)
Me.TextBox2 = ListBox2.List(fila, 3)
ListBox2.Visible = False
ctr = 0
End Sub
Private Sub TextBox1_AfterUpdate()
creg = ListBox2.ListCount
If creg = 0 Then
ListBox2.Visible = False
RESP = MsgBox(«Presione SI para cargar cliente o NO para cancelar y proseguir la realización del comprobante de venta», vbYesNo, «REQUIERE CARGAR EL CLIENTE NUEVO»)
If RESP = 6 Then
uf = Sheets(«Clientes»).Range(«A» & Rows.Count).End(xlUp).Row
UserForm4.TextBox1 = Application.WorksheetFunction.Max(Sheets(«Clientes»).Range(«A2» & «:A» & uf + 1)) + 1
UserForm4.TextBox3 = UserForm2.TextBox1
UserForm4.TextBox2.SetFocus
UserForm4.Show
Else
UserForm2.TextBox2.Locked = False
UserForm2.TextBox2 = Empty
UserForm2.TextBox2.SetFocus
End If
End If
End Sub
Private Sub TextBox1_Change()
If ctr = 1 Then Exit Sub
On Error Resume Next
Set b = Sheets(«Clientes»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
If Trim(TextBox1.Value) = «» Then
Me.ListBox2.RowSource = «Clientes!A2:D» & uf
Exit Sub
End If
b.AutoFilterMode = False
Me.ListBox2.Clear
Me.ListBox2.RowSource = Clear
Me.ListBox2.ColumnCount = 4
For i = 2 To uf
strg = b.Cells(i, 3).Value
If UCase(strg) Like «*» & UCase(TextBox1.Value) & «*» Then
Me.ListBox2.AddItem b.Cells(i, 1)
Me.ListBox2.List(Me.ListBox2.ListCount – 1, 1) = b.Cells(i, 2)
Me.ListBox2.List(Me.ListBox2.ListCount – 1, 2) = b.Cells(i, 3)
Me.ListBox2.List(Me.ListBox2.ListCount – 1, 3) = b.Cells(i, 4)
End If
Next i
Me.ListBox2.ColumnWidths = «15 pt;50 pt;80 pt;80»
ListBox2.Visible = True
End Sub
Private Sub TextBox2_AfterUpdate()
TextBox2.Locked = True
End Sub
Private Sub UserForm_Initialize()
Nfac = Application.WorksheetFunction.Max(Sheets(«DbFac»).Range(«A2» & «:A» & uf + 1)) + 1
Label2.Caption = Format(Nfac, «00000000»)
TextBox3.SetFocus
End Sub
Código que se inserta en un formulario
Private Sub CommandButton1_Click()
If UserForm4.TextBox1 = Empty Or UserForm4.TextBox2 = Empty Or UserForm4.TextBox3 = Empty Or UserForm4.TextBox4 = Empty Then Exit Sub
Set a = Sheets(«Clientes»)
uf = a.Range(«A» & Rows.Count).End(xlUp).Row + 1
a.Cells(uf, «A») = Val(UserForm4.TextBox1)
a.Cells(uf, «B») = UserForm4.TextBox2
a.Cells(uf, «C») = UserForm4.TextBox3
a.Cells(uf, «D») = UserForm4.TextBox4
UserForm2.TextBox1 = UserForm4.TextBox3
UserForm2.TextBox2 = UserForm4.TextBox4
MsgBox («Los datos se gaurdarón con éxito»), vbInformation, «AVISO»
Unload UserForm4
End SubPrivate Sub CommandButton2_Click()
Unload UserForm4
End Sub
Sub muestra1()
UserForm2.Show
End Sub
Código que se inserta en un formulario
Private Sub CommandButton1_Click()
Unload UserForm2
End Sub
Private Sub Label4_Click()
ActiveWorkbook.FollowHyperlink «https://macrosenexcel.com/p/home.html»
End Sub
Private Sub ListBox2_Click()
On Error Resume Next
ctr = 1
TextBox1 = Empty
TextBox2 = Empty
fila = Me.ListBox2.ListIndex
Me.TextBox1 = ListBox2.List(fila, 2)
Me.TextBox2 = ListBox2.List(fila, 3)
ListBox2.Visible = False
ctr = 0
End Sub
Private Sub TextBox1_AfterUpdate()
creg = ListBox2.ListCount
If creg = 0 Then
ListBox2.Visible = False
RESP = MsgBox(«Presione SI para cargar cliente o NO para cancelar y proseguir la realización del comprobante de venta», vbYesNo, «REQUIERE CARGAR EL CLIENTE NUEVO»)
If RESP = 6 Then
uf = Sheets(«Clientes»).Range(«A» & Rows.Count).End(xlUp).Row
UserForm4.TextBox1 = Application.WorksheetFunction.Max(Sheets(«Clientes»).Range(«A2» & «:A» & uf + 1)) + 1
UserForm4.TextBox3 = UserForm2.TextBox1
UserForm4.TextBox2.SetFocus
UserForm4.Show
Else
UserForm2.TextBox2.Locked = False
UserForm2.TextBox2 = Empty
UserForm2.TextBox2.SetFocus
End If
End If
End Sub
Private Sub TextBox1_Change()
If ctr = 1 Then Exit Sub
On Error Resume Next
Set b = Sheets(«Clientes»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
If Trim(TextBox1.Value) = «» Then
Me.ListBox2.RowSource = «Clientes!A2:D» & uf
Exit Sub
End If
b.AutoFilterMode = False
Me.ListBox2.Clear
Me.ListBox2.RowSource = Clear
Me.ListBox2.ColumnCount = 4
For i = 2 To uf
strg = b.Cells(i, 3).Value
If UCase(strg) Like «*» & UCase(TextBox1.Value) & «*» Then
Me.ListBox2.AddItem b.Cells(i, 1)
Me.ListBox2.List(Me.ListBox2.ListCount – 1, 1) = b.Cells(i, 2)
Me.ListBox2.List(Me.ListBox2.ListCount – 1, 2) = b.Cells(i, 3)
Me.ListBox2.List(Me.ListBox2.ListCount – 1, 3) = b.Cells(i, 4)
End If
Next i
Me.ListBox2.ColumnWidths = «15 pt;50 pt;80 pt;80»
ListBox2.Visible = True
End Sub
Private Sub TextBox2_AfterUpdate()
TextBox2.Locked = True
End Sub
Private Sub UserForm_Initialize()
Nfac = Application.WorksheetFunction.Max(Sheets(«DbFac»).Range(«A2» & «:A» & uf + 1)) + 1
Label2.Caption = Format(Nfac, «00000000»)
TextBox3.SetFocus
End Sub
If UserForm4.TextBox1 = Empty Or UserForm4.TextBox2 = Empty Or UserForm4.TextBox3 = Empty Or UserForm4.TextBox4 = Empty Then Exit Sub
Set a = Sheets(«Clientes»)
uf = a.Range(«A» & Rows.Count).End(xlUp).Row + 1
a.Cells(uf, «A») = Val(UserForm4.TextBox1)
a.Cells(uf, «B») = UserForm4.TextBox2
a.Cells(uf, «C») = UserForm4.TextBox3
a.Cells(uf, «D») = UserForm4.TextBox4
UserForm2.TextBox1 = UserForm4.TextBox3
UserForm2.TextBox2 = UserForm4.TextBox4
MsgBox («Los datos se gaurdarón con éxito»), vbInformation, «AVISO»
Unload UserForm4
End Sub
Private Sub CommandButton2_Click()
Unload UserForm4
End Sub
.
If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.
Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends