PROGRAMAR EN VBA MACROS PARA EXCEL: Como crear una factura o sale invoice guardar cliente nuevo

Como crear una factura o sale invoice guardar cliente nuevo





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


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.

  

Al escribir el nombre del cliente y éste no se encuentre en la base de datos sale un msgbox que permite dar opción a agregar el cliente que se ha escrito en el textbox, en caso que se elija que no se requiere cargar el cliente se cierra el msgbox y permite seguir realizando la factura; en caso que se requiera cargar el cliente se muestra un formulario que permite ingresar los datos y grabar en la base de datos al cliente nuevo, pasando los datos del domicilio cargado al textbox correspondiente del formulario donde se está generando la factura.

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.

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 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 automaticamentebuscar en listbox mientras escribes en textboxComo conectar Excel con Word crear archivo e insertar textoComo pasar datos de listbox con enter y muchos ejemplos más.










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 "http://www.programarexcel.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 Sub

Private Sub CommandButton2_Click()
Unload UserForm4
End Sub




Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


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