Formulario ingreso y egreso de stock





En el ejemplo que se presenta a continuación encontrarás un pequeño sistema que gestiona de stock de mercadería en Excel, se realiza integralmente en Excel con ayuda de Formularios y macros de VBA, presenta formularios parra carga y descarga del stock.

Antes de continuar te recomiendo que leas un excelente libro sobre Excel el que te ayudará operar las planillas de cálculo, haz click acá, si quieres un libro sobre Excel, en inglés, entonces debes hacer click acá. 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.

Si estás usando macros para automatizar tu libro de Excel seguramente te es necesario saber seleccionar o referenciar celdas, en FORMAS DE SELECCIONAR O REFERENCIAR CELDAS CON VBA (Spanish Edition) encontrarás una excelente ayuda; si trabajas con fechas en Excel, fíjate en el siguiente link que te puede ser de utilidad FORMATOS Y FUNCIONES DE FECHA Y HORA DE MICROSOFT EXCEL (Spanish Edition)

 


El ejemplo que aquí se presenta gestiona el inventario de mercadería o stock, tiene dos formularios básicos, uno para compras y otro para ventas, con ellos se ingresa y egresa el stock respectivamente, Cuenta también el libro de Excel con cuatro hojas, denominadas stock, ventas, compras y códigos.

La forma más fácil de entender la programación de los formularios es descargar el ejemplo que se podrá hacer desde el link situado al final del post.

El Formulario de compras tiene un combobox con varios textbox y dos botones de comando, al iniciarse el formulario se carga el nombre de todos los artículos registrados en la hoja Códigos, una vez seleccionado en el combobox un articulo específico, se cargan en los textbox todos los datos correspondientes al mismo, algunos ítem los busca en la hoja códigos y otros en la hora Sctocks, como por ejemplo la cantidad de stock que se carga en el cuadro respectivo.

El formulario de compras tiene dos botones de comando, el primero sirve para guardar, este el es que contiene la mayoría del código, el otro botón es para salir o cerrar el formulario sin hacer cambios en la base de datos, los textbox tienen también una serie de programación o códigos que multiplican valores o hacen otros procedimientos, al presionar el botón aceptar, previo a guardar los datos realiza una serie de validaciones tendiente a evitar error en la carga de datos.


El botón de ventas,  funciona en forma muy parecida al formulario de compras, la diferencia básica es que permite realizar modificar o disminuir el stock cada vez que se realiza una venta; también al seleccionar un dato en el combobox, busca el registro respectivo y carga los datos en los textbox. Una diferencia importante es el textbox donde se inserta el número de factura, el código o macro determina en forma automática cual es número correlativo siguiente o número de factura siguiente, el botón aceptar realiza una serie de validaciones antes de guardar los datos, el otro botón sirve para salir o cerrar el formulario sin modificar datos en la base.

Cuando se compra mercadería se busca el dato correspondiente en la hoja de Stock y suma el Stock inicial más la compra de bienes realizada, de esta manera se actualiza la cantidad de unidades de stock vigentes, como así también el precio de compra, si es distinto al que aparece por defecto.

En el caso de ventas, la macro inserta en el formulario busca el dato correspondiente en la base de datos y lo actualiza disminuyéndolo en base a la cantidad vendida, se valida que no se pueda vender más mercadería que la que figura en stock. 

En el vídeo encontrarás la explicación del funcionamiento de la macro que gestiona ingreso y egreso de stock o inventario a través de formularios de VBA, comparte con tus amigos en las redes sociales y no olvides suscribir al canal para recibir actualizaciones.




Te invito a descargar el ejemplo y analizarlo en detalle, puede servir de base para algo más complejo que estés realizando, pudiéndolo adaptar a tus necesidades, también es útil porque se podrá observar como se trabaja con combobox, textbox, formularios, si requieres otro ejemplo sobre trabajar con Formularios  haz click en el link y si requieres más ejemplos de macros, te recomiendo que mires el siguiente link click acá; si te gustó o sirvió por favor comparte con tus amigos en las redes sociales, podrás compartir el blog o el post desde los iconos del final del post.


Código que se inserta en un módulo

Sub muestrauf1()
UserForm1.Show
End Sub
Sub muestrauf2()
UserForm2.Show

End Sub





Código que se inserta en el Formulario 1

Public a, b As Long
Public vtb10 As Long
Private Sub ComboBox1_Change()
On Error Resume Next
busco = ComboBox1
Set codigo = Sheets("Códigos").Range("C1:C1000").Find(busco, LookIn:=xlValues, LookAt:=xlWhole)
dire = codigo.Address(False, False)
TextBox1 = Sheets("Códigos").Range(dire).Offset(0, -2)
TextBox2 = Sheets("Códigos").Range(dire).Offset(0, -1)
TextBox3 = Sheets("Códigos").Range(dire).Offset(0, 1)
TextBox4 = Sheets("Códigos").Range(dire).Offset(0, 2)
TextBox8 = 50
TextBox9 = TextBox4.Value * (1 + (TextBox8.Value / 100))

busco = ComboBox1
Set codigo = Sheets("Stock").Range("C1:C1000").Find(busco, LookIn:=xlValues, LookAt:=xlWhole)

If Not codigo Is Nothing Then
uf = codigo.Row
TextBox10 = Sheets("Stock").Cells(uf, 7)
vtb10 = TextBox10.Value
End If



TextBox1.Locked = True
TextBox2.Locked = True
TextBox3.Locked = True
TextBox4.Locked = True

TextBox1.TabStop = False
TextBox2.TabStop = False
TextBox3.TabStop = False
TextBox4.TabStop = False
TextBox6.SetFocus
End Sub

Private Sub CommandButton1_Click()
On Error Resume Next
If ComboBox1 = Empty Then
MsgBox ("Debe seleccionar producto"), vbInformation
ComboBox1.SetFocus
Exit Sub
End If

If TextBox6 = Empty Then
MsgBox ("Debe ingresar fecha"), vbInformation
TextBox6.SetFocus
Exit Sub
End If

If TextBox5 = Empty Then
MsgBox ("Debe ingresar cantidad"), vbInformation
TextBox5.SetFocus
Exit Sub
End If

busco = ComboBox1
Set codigo = Sheets("Stock").Range("C1:C1000").Find(busco, LookIn:=xlValues, LookAt:=xlWhole)

If Not codigo Is Nothing Then
uf = codigo.Row

Sheets("Stock").Cells(uf, 1) = TextBox1
Sheets("Stock").Cells(uf, 2) = TextBox2
Sheets("Stock").Cells(uf, 3) = ComboBox1
Sheets("Stock").Cells(uf, 4) = TextBox3
Sheets("Stock").Cells(uf, 5) = TextBox4
Sheets("Stock").Cells(uf, 7) = Sheets("Stock").Cells(uf, 7) + TextBox5
Sheets("Stock").Cells(uf, 8) = Sheets("Stock").Cells(uf, 5) * Sheets("Stock").Cells(uf, 7)
Sheets("Stock").Cells(uf, 9) = TextBox9
TextBox9 = Format(TextBox9, "$ ##,##0.00")
Else
uf = Sheets("Stock").Range("A" & Rows.Count).End(xlUp).Row
uf = uf + 1
Sheets("Stock").Cells(uf, 1) = TextBox1
Sheets("Stock").Cells(uf, 2) = TextBox2
Sheets("Stock").Cells(uf, 3) = ComboBox1
Sheets("Stock").Cells(uf, 4) = TextBox3
Sheets("Stock").Cells(uf, 5) = TextBox4
Sheets("Stock").Cells(uf, 7) = Sheets("Stock").Cells(uf, 7) + TextBox5
Sheets("Stock").Cells(uf, 8) = Sheets("Stock").Cells(uf, 5) * Sheets("Stock").Cells(uf, 7)
Sheets("Stock").Cells(uf, 9) = TextBox9
End If


Sheets("Compras").Cells(2, 1).EntireRow.Insert
Sheets("Compras").Cells(2, 1) = TextBox6
Sheets("Compras").Cells(2, 2) = TextBox2
Sheets("Compras").Cells(2, 3) = ComboBox1
Sheets("Compras").Cells(2, 4) = TextBox3
Sheets("Compras").Cells(2, 5) = TextBox5
Sheets("Compras").Cells(2, 6) = TextBox4
Sheets("Compras").Cells(2, 7) = TextBox7


ComboBox1 = Clear

For Each t In UserForm1.Controls
If TypeName(t) = "TextBox" Then
t.Value = ""
End If
Next

'TextBox1 = Clear
'TextBox2 = Clear
'TextBox3 = Clear
'TextBox4 = Clear
'TextBox5 = Clear
'TextBox6 = Clear
'TextBox7 = Clear
Sheets("Stock").Select

End Sub
Private Sub CommandButton2_Click()
Sheets("Stock").Select
Unload Me
End Sub

Private Sub TextBox5_AfterUpdate()
On Error Resume Next
TextBox10 = vtb10 + TextBox5.Value
End Sub

Private Sub TextBox5_change()
On Error Resume Next
a = TextBox4.Text
b = TextBox5.Text
TextBox7 = Format((a * b), "$ ##,##0.00")
End Sub

Private Sub TextBox8_Change()
On Error Resume Next
TextBox9 = TextBox4.Value * (1 + (TextBox8.Value / 100))
TextBox9 = Format(TextBox9, "$ ##,##0.00")
End Sub

Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
ComboBox1.Clear
Sheets("Códigos").Select
Range("C2").Select
While ActiveCell <> Empty
ComboBox1.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Wend
End Sub




Código que se inserta en el Formulario 2

Public a, b As Long
Public t As Object

Private Sub ComboBox1_Change()
busco = ComboBox1
Set codigo = Sheets("Códigos").Range("C1:C1000").Find(busco, LookIn:=xlValues, LookAt:=xlWhole)
dire = codigo.Address(False, False)
TextBox3 = Sheets("Códigos").Range(dire).Offset(0, 1)

Sheets("Ventas").Select
If Range("b2") = Empty Then
TextBox2 = 1
GoTo ir:
End If
pf = 2
uf = Sheets("Ventas").Range("B" & Rows.Count).End(xlUp).Row
Max = Application.WorksheetFunction.CountA(Range("B" & pf & ":B" & uf))
TextBox2 = Max + 1

ir:
Sheets("Stock").Select

busco = ComboBox1
Set codigo = Sheets("Stock").Range("C1:C1000").Find(busco, LookIn:=xlValues, LookAt:=xlWhole)

If Not codigo Is Nothing Then
uf = codigo.Row
TextBox5 = Sheets("Stock").Cells(uf, 9)
TextBox7 = Sheets("Stock").Cells(uf, 7)
End If



TextBox2.Locked = True
TextBox3.Locked = True
TextBox6.Locked = True
TextBox7.Locked = True

TextBox2.TabStop = False
TextBox3.TabStop = False
TextBox5.TabStop = False
TextBox7.TabStop = False
TextBox4.SetFocus




End Sub

Private Sub CommandButton1_Click()
On Error Resume Next
If ComboBox1 = Empty Then
MsgBox ("Debe seleccionar producto"), vbInformation
ComboBox1.SetFocus
Exit Sub
End If

If TextBox1 = Empty Then
MsgBox ("Debe ingresar fecha"), vbInformation
TextBox1.SetFocus
Exit Sub
End If


If TextBox4 = Empty Then
MsgBox ("Debe ingresar cantidad"), vbInformation
TextBox4.SetFocus
Exit Sub
End If

If TextBox5 = Empty Then
MsgBox ("Debe ingresar precio"), vbInformation
TextBox5.SetFocus
Exit Sub
End If



busco = ComboBox1
Set codigo = Sheets("Stock").Range("C1:C1000").Find(busco, LookIn:=xlValues, LookAt:=xlWhole)

If Not codigo Is Nothing Then
uf = codigo.Row
Sheets("Stock").Cells(uf, 7) = Sheets("Stock").Cells(uf, 7) - TextBox4

Sheets("Ventas").Cells(2, 1).EntireRow.Insert
Sheets("Ventas").Cells(2, 1) = TextBox1
Sheets("Ventas").Cells(2, 2) = TextBox2
Sheets("Ventas").Cells(2, 3) = TextBox3
Sheets("Ventas").Cells(2, 4) = ComboBox1
Sheets("Ventas").Cells(2, 5) = TextBox4
Sheets("Ventas").Cells(2, 6) = TextBox5
Sheets("Ventas").Cells(2, 7) = TextBox6
End If

ComboBox1 = Clear

'Dim t As Object
For Each t In UserForm2.Controls
If TypeName(t) = "TextBox" Then
t.Value = ""
End If
Next
Sheets("Stock").Select
End Sub
Private Sub CommandButton2_Click()
Sheets("Stock").Select
Unload Me
End Sub

Private Sub TextBox4_change()
On Error Resume Next
a = TextBox4.Text
b = TextBox5.Text
TextBox6 = Format((a * b), "$ ##,##0.00")
End Sub

Private Sub TextBox4_AfterUpdate()
If Val(TextBox4) > Val(TextBox7) Then
MsgBox ("No puede vender mayor cantidad que el stock"), vbInformation, "AVISO"
TextBox4 = Clear
TextBox6 = Clear
TextBox4.SetFocus
End If
End Sub

Private Sub TextBox5_change()
On Error Resume Next
a = TextBox4.Text
b = TextBox5.Text
TextBox6 = Format((a * b), "$ ##,##0.00")
End Sub

Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
ComboBox1.Clear
Sheets("Códigos").Select
Range("C2").Select
While ActiveCell <> Empty
ComboBox1.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Wend
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      

Como usar la Función Concatenar




Antes de comenzar, te recomiendo que leas un excelente libro sobre Excel el que te ayudará operar las planillas de cálculo, haz click acá, si quieres un libro sobre Excel, en inglés, entonces debes hacer click acá. 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.

Si estás usando macros para automatizar tu libro de Excel seguramente te es necesario saber seleccionar o referenciar celdas, en FORMAS DE SELECCIONAR O REFERENCIAR CELDAS CON VBA (Spanish Edition) encontrarás una excelente ayuda; si trabajas con fechas en Excel, fíjate en el siguiente link que te puede ser de utilidad FORMATOS Y FUNCIONES DE FECHA Y HORA DE MICROSOFT EXCEL (Spanish Edition)

 


La función Concatenar que trae incorporada Excel tiene la siguientes sintaxis:

Concatenar(Texto1; Texto2; ... Texto255)

Texto1 a Texto255: son las cadenas de texto a concatenar pueden ser hasta 255 cadenas de texto.

También se puede utilizar el simbolo "&" para concatenar obteniendo el mismo resultado; si se desea que aparezca un espacio entre las cadenas de texto concatenadas se deben usar comillas (" ").

En el ejemplo podrás observar las distintas formas para concatenar texto, desde el link del final se puede descargar el mismo y analizar como se usa la formula para concatenar en Excel, en listado de funciones de texto de Excel, encontrarás un listado de todas las funciones de texto que trae Excel como así también su explicación y traducción a otros idiomas.



Forma que se inserta la fórmula para concatenar en una celda





En esta fórmula se inserta entre las cadenas de texto un espacio, como se puede observar el resultado es la concatenación de las dos cadenas de texto con un espacio entre medio. 

=CONCATENAR(A2;" ";B2)


DayraSolDayra Sol


Con esta fórmula se obtiene el mismo resultado que la fórmula anterior, con la diferencia que se usa el simbolo "&" en vez de "CONCATENAR".

=A3& " "&B3


Mary Stuart Mary Stuart



Mediante esta fórmula se agrega una coma detrás de la primer cadena de texto, a su vez deja un espacio entre la coma y la segunda cadena de texto.

=CONCATENAR(A4", ";B4)


Tomy Lee Tomy, Lee


Esta fórmula permite concatenar dos o más cadenas de texto sin agregado de espacio, comas o algún otro símbolo, simplemente une las dos cadenas de texto de este ejemplo.

=CONCATENAR(A5;B5)


Dany Armegol DanyArmegol


En esta fórmula se combina el uso de "&" y "CONCATENAR", además de agregar texto que no se encuentra en la celdas para formar una frase.

=CONCATENAR("Mi nombre es ";A7;" ";B7; " y mi hermano se llama " & A8 & " "& B8)

Dayra Sol Mi nombre es Dayra Sol y mi hermano se llama Tomy Lee
Tomy Lee


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      

Limpiar todos los textbox de un formulario





El presente post tiene por objeto mostrar como podemos borrar todos los Textbox de un formulario en forma simplificada y todos a la vez, en el ejemplo, que se descarga desde el link del final, podrás observar su funcionamiento, también encontrarás ejemplos relacionados con formularios en llenar listbox dependiendo de un combobox o combobox cuyos items dependen de otro combobox y si necesitas más ejemplos de formularios, en el link encontrarás muchos ejemplos más.

Te recomiendo que leas un excelente libro sobre Excel el que te ayudará operar las planillas de cálculo, haz click acá, si quieres un libro sobre Excel, en inglés, entonces debes hacer click acá. 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.

Si estás usando macros para automatizar tu libro de Excel seguramente te es necesario saber seleccionar o referenciar celdas, en FORMAS DE SELECCIONAR O REFERENCIAR CELDAS CON VBA (Spanish Edition) encontrarás una excelente ayuda; si trabajas con fechas en Excel, fíjate en el siguiente link que te puede ser de utilidad FORMATOS Y FUNCIONES DE FECHA Y HORA DE MICROSOFT EXCEL (Spanish Edition)

 

Para borrar o limpiar un textbox se puede usar el código:

TextBox1 = Empty

La codificación anterior sirve perfectamente para limpiar o dejar en blanco los textbox, cosa que se requiere por lo general cuando ya se guardaron los datos necesarios del formulario y se necesita que quede listo para ingresar el siguiente registro, ahora bien que sucede si hay 4 o 6 texbox, no pensemos en un formulario más complejo que contenga 50 o 100 textbox, en este último caso y si usamos el código anterior tendríamos que borrar uno por uno los textbox lo cual es algo trabajoso e irracional si existe una codificación mucho más simple, en el ejemplo se muestran las dos formas una donde se borra uno a uno los textbox y otra aplicando una forma simplificada.

Esta forma simplificada no es otra cosa que realizar un bucle para determinar todos los texbox del formulario y limpiarlos, si se observa la codificación hay un bucle que realiza el procedimiento para todos los objetos del userform o formulario, posteriormente determina si el control es un textbox lo limpia o deja en blanco.

Descarga el ejemplo, al iniciar verás un botón, el cual presionándolo se ejecuta una macro que muestra un formulario el cual cuenta con dos combobox y varios textbox, seleccionando un items del primer combobox el segundo se carga con distintos items dependiendo de lo que es elegido en el primer combobox, seleccionando un items en el segundo combobox, busca en la base de datos y cuando encuentra el dato requerido se llenan los textbox con dato de la base datos, ahora en el botón limpiar texbox, si se presiona se podrá observar como se limpian todos los textbox.


Presionando Alt + F11 se inicia el editor de VBA, desde ahí podrás ver la codificación de todo el formulario, el mismo no tiene ningún tipo de bloqueo, en alguna parte de la codificación verás que que usa el código  TextBox1 = Empty para limpiar los textbox, que al ser seis  se escribe uno por cada textbox y en el código del botón limpiar macro se utiliza el bucle que se presenta en este ejemplo; si bien con las dos formas se obtiene el mismo resultado, la codificación es más simple eficiente en el último caso, logrando limpiar todos los texbox de un formulario.


Código que se inserta en un botón





Private Sub CommandButton4_Click()
Dim t As Object
For Each t In UserForm2.Controls
If TypeName(t) = "TextBox" Then
t.Value = ""
End If
Next
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