Los he llamado prototipos solo por poner un nombre. Se trata de pequeños programas hechos en Excel, con propósito pedagógico para mostrar como se codifican algunas tareas básicas de entrada y actualización de datos.
Se muestran tres ejemplos que pueden servir de base para otros programas funcionales: una agenda un pequeño programa de inventario y un pequeño programa de cuenta corriente. No se usan archivos pues se usa la misma hoja de Excel como soporte para almacenar los datos, esto muestra la versatilidad y posibilidades de uso del VBA integrado con Excel.
Prototipos en VBA
miércoles, 13 de mayo de 2009
martes, 12 de mayo de 2009
Ejemplo 1 Programación de una agenda
Se trata de programar una agenda, programa que pida datos personales tales como nombre, dirección, teléfono, etc. y los almacene en la misma hoja excel
En la hoja Excel se habilitan los macros cambando las opciones de seguridad si es necesario y se ingresa al entorno de programación con Herramientas, Macros, Editor de Visual Basic
Una vez allí se escoge Insertar, Userform y usando la caja de herramientas se colocan los textbox y el command button
En el Command Button se agrega el siguiente código
Private Sub CommandButton1_Click()
indice = Hoja1.Cells(1, 1)
If indice = "" Then
indice = 1
Hoja1.Cells(1, 1) = indice
End If
indice = indice + 1
Hoja1.Cells(1, 1) = indice
Hoja1.Cells(indice, 1) = TextBox1.Text
Hoja1.Cells(indice, 2) = TextBox2.Text
Hoja1.Cells(indice, 3) = TextBox3.Text
Hoja1.Cells(indice, 4) = TextBox4.Text
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox1.SetFocus
End Sub
Listo, eso es todo
lunes, 11 de mayo de 2009
Ejemplo 2, programación de un Inventario
Este prototipo ingresa nuevos artículos que deja guardados en la hoja Excel y permite hacer ventas rebajando el saldo. Consta de dos formularios, el principal tiene la ventana para rebajar las ventas (Insertar, User form)
La programación de los elementos de la form es la siguiente
Para el combobox (se cambió en nombre a ComboNombre)
Private Sub ComboNombre_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Rem al escoger un item del combobox hace lo siguiente
Rem coloca el costo en textbox1
TextBox1.Text = Hoja1.Cells(2, 2)
Rem coloca el precio de venta (lista) en textbox2
TextBox2.Text = Hoja1.Cells(2, 3)
End Sub
Para el Command Button 1 (Agregar artículo)
Private Sub CommandButton1_Click()
Rem para agregar un nuevo articulo
Rem se carga userform2
Load UserForm2
Rem se muestra userforrm2
UserForm2.Show
End Sub
Para el Command Button 2 (Ingresar venta)
Private Sub CommandButton2_Click()
Rem al ingresar la venta
Rem el saldo esta en hoja1.cells de la linea de combo que elegimos
Rem que en la hoja exel seria la posicion combonombre.listindex + 1
Rem recordar el formato Hoja1.Cells(linea,columna)
Rem luego toma el valor (cantidad) almacenado en esa celda y le resta el valor de textbox3.text
Hoja1.Cells(ComboNombre.ListIndex + 1, 2) = Hoja1.Cells(ComboNombre.ListIndex + 1, 2) - TextBox3.Text
Rem con eso deja la cantidad rebajada
Rem luego limpia los textbox combo y pone el foco en combonombre
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
ComboNombre.Text = ""
ComboNombre.SetFocus
End Sub
Para Textbox3 (después de ingresar la cantidad vendida)
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Rem calcula el total de la venta y lo coloca en textbox4.text
TextBox4.Text = TextBox2.Text * TextBox3.Text
End Sub
Para cuando se cargue la User Form
Private Sub UserForm_Activate()
Rem llena los valores del combo cada vez que parte el programa userform_activate
Rem para ello primero parte de la posicion 2
Rem y cambia los valores de z desde 1 a 500
Rem y con el metodo additem llena al combo de valores (nombres de articulos)
If Hoja1.Cells(1, 1) <> "" Then
For z = 1 To 500
ComboNombre.AddItem Hoja1.Cells(z, 1)
Next z
Rem deja en blanco el combo
ComboNombre.Text = ""
End If
End Sub
Luego se crea la segunda User From con Insertar, Userform

En este caso solos se programa el Command Buttom
Private Sub CommandButton1_Click()
Rem posicion del indice en la celda 1,1
indice = Hoja1.Cells(1, 1)
Rem si el indice es cero se cambia a uno
If indice = "" Then
indice = 1
Hoja1.Cells(1, 1) = indice
End If
Rem incrementa el indice en 1 lugar que es la fila donde debe grabar
indice = indice + 1
Rem coloca el nuevo valor del indice -incrementado- en la celda 1,1
Hoja1.Cells(1, 1) = indice
Rem escribe los contenidos de los textbox en la hoja 1
Rem la fila es el valor del indice y la columna varia segun el contenido
Hoja1.Cells(indice, 1) = TextBox1.Text
Hoja1.Cells(indice, 2) = TextBox2.Text
Hoja1.Cells(indice, 3) = TextBox3.Text
Hoja1.Cells(indice, 4) = TextBox4.Text
Rem limpia todos los textbox
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
Rem coloca el foco en textbox1
TextBox1.SetFocus
End Sub
sábado, 9 de mayo de 2009
Ejemplo 3, prototipo de una cuenta corriente

Este prototipo ingresa nuevas cuentas con sus datos, va ingresando movimientos, entrega los saldos y emite una cartola de movimientos
La programación de los componentes de este form es:
Private Sub CommandButton4_Click()
Rem para emitir cartola
Rem se carga userform4
Load UserForm4
Rem se muestra userforrm4
UserForm4.Show
End Sub
Para el Command Button 1 (ingresar cuenta)
Y eso sería todo
El primer form que se ingresa es el que entrega los saldos y permite ir a ingresar cuentas y cartolas, Insertar, Userform
La programación de los componentes de este form es:
Para el ComboNombre
Private Sub ComboNombre_Click()
Rem al escoger un item del combobox hace lo siguiente
Rem coloca el costo en textbox1
saldo = 0
CodCliente = ComboNombre.ListIndex + 1
TextBox1.Text = Hoja1.Cells(CodCliente, 2)
Rem coloca el precio de venta (lista) en textbox2
TextBox2.Text = Hoja1.Cells(CodCliente, 3)
TextBox3.Text = Hoja1.Cells(CodCliente, 4)
ultimo = Hoja2.Cells(1, 1)
For z% = 2 To ultimo
If CodCliente = Hoja2.Cells(z%, 1) Then
monto = Hoja2.Cells(z%, 4)
If Hoja2.Cells(z%, 5) = "Debe" Then
monto = -1 * monto
End If
saldo = saldo + monto
End If
Next z%
TextBox4.Text = saldo
End Sub
Para el Command Button 1 (Agregar nueva cuenta)
Private Sub CommandButton1_Click()
Rem para agregar nueva cuenta
Rem se carga userform3
Load UserForm3
Rem se muestra userforrm2
UserForm3.Show
End Sub
Para el Command Button 3 (para ir agregando movimientos)
Private Sub CommandButton3_Click()
Rem para agregar un nuevo movimiento
Rem se carga userform2
Load UserForm2
Rem se muestra userforrm2
UserForm2.Show
End Sub
Para el Command Button 4 (para emitir cartola)
Para Text Box 3 (coloca total venta)
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Rem calcula el total de la venta y lo coloca en textbox4.text
TextBox4.Text = TextBox2.Text * TextBox3.Text
End Sub
Para cuando se activa la User Form
Private Sub UserForm_Activate()
Rem llena los valores del combo cada vez que parte el programa userform_activate
Rem para ello primero parte de la posicion 2
Rem y cambia los valores de z desde 1 a 500
Rem y con el metodo additem llena al combo de valores (nombres de articulos)
If Hoja1.Cells(1, 1) <> "" Then
For z = 1 To 500
ComboNombre.AddItem Hoja1.Cells(z, 1)
Next z
Rem deja en blanco el combo
ComboNombre.Text = ""
End If
End Sub
Luego Insert, User form para el User Form de Insertar Movimiento
La User Form al activarse (ingresar el movimiento)
Private Sub UserForm_Activate()
Rem llena los valores del combo cada vez que parte el programa userform_activate
Rem para ello primero parte de la posicion 2
Rem y cambia los valores de z desde 1 a 500
Rem y con el metodo additem llena al combo de valores (nombres de articulos)
If Hoja1.Cells(1, 1) <> "" Then
For z = 1 To 500
ComboNombre.AddItem Hoja1.Cells(z, 1)
Next z
Rem deja en blanco el combo
ComboNombre.Text = ""
End If
End Sub
El Comand Button1
Private Sub CommandButton1_Click()
Rem posicion del indice en la celda 1,1
indice = Hoja2.Cells(1, 1)
Rem si el indice es cero se cambia a uno
If indice = "" Then
indice = 1
Hoja2.Cells(1, 1) = indice
End If
Rem incrementa el indice en 1 lugar que es la fila donde debe grabar
indice = indice + 1
Rem coloca el nuevo valor del indice -incrementado- en la celda 1,1
Hoja2.Cells(1, 1) = indice
Rem escribe los contenidos de los textbox en la hoja 1
Rem la fila es el valor del indice y la columna varia segun el contenido
Hoja2.Cells(indice, 1) = ComboBox2.ListIndex + 1
Hoja2.Cells(indice, 2) = TextBox1.Text
Hoja2.Cells(indice, 3) = TextBox2.Text
Hoja2.Cells(indice, 4) = TextBox3.Text
Hoja2.Cells(indice, 5) = ComboBox1.Text
Rem limpia todos los textbox
TextBox2.Text = ""
TextBox3.Text = ""
Rem coloca el foco en textbox1
ComboBox2.SetFocus
End Sub
Luego el User Form 3 para agregar nuevas cuentas, Insert, User Form
Cuyo código asl activarse es:
Private Sub UserForm_Activate()
ComboBox1.AddItem "Haber"
ComboBox1.AddItem "Debe"
ComboBox1.Text = ComboBox1.List(1)
TextBox1.Text = Date
ComboBox2.SetFocus
If Hoja1.Cells(1, 1) <> "" Then
For z = 1 To 500
ComboBox2.AddItem Hoja1.Cells(z, 1)
Next z
Rem deja en blanco el combo
ComboBox2.Text = ""
End If
End Sub
Para el Command Button 1 (ingresar cuenta)
Private Sub CommandButton1_Click()
Rem posicion del indice en la celda 1,1
indice = Hoja1.Cells(1, 1)
Rem si el indice es cero se cambia a uno
If indice = "" Then
indice = 1
Hoja1.Cells(1, 1) = indice
End If
Rem incrementa el indice en 1 lugar que es la fila donde debe grabar
indice = indice + 1
Rem coloca el nuevo valor del indice -incrementado- en la celda 1,1
Hoja1.Cells(1, 1) = indice
Rem escribe los contenidos de los textbox en la hoja 1
Rem la fila es el valor del indice y la columna varia segun el contenido
Hoja1.Cells(indice, 1) = TextBox1.Text
Hoja1.Cells(indice, 2) = TextBox2.Text
Hoja1.Cells(indice, 3) = TextBox3.Text
Hoja1.Cells(indice, 4) = TextBox4.Text
Rem limpia todos los textbox
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
Rem coloca el foco en textbox1
TextBox1.SetFocus
End Sub
Finalmente se inserta el User From 4 para emitir cartola Insert, User Form
Solo contiene un Combo Box con el siguiente código
Private Sub UserForm_Activate()
If Hoja1.Cells(1, 1) <> "" Then
For z = 1 To 500
ComboBox1.AddItem Hoja1.Cells(z, 1)
Next z
Rem deja en blanco el combo
ComboBox1.Text = ""
End If
End Sub
indice = indice + 1
Rem coloca el nuevo valor del indice -incrementado- en la celda 1,1
Hoja1.Cells(1, 1) = indice
Rem escribe los contenidos de los textbox en la hoja 1
Rem la fila es el valor del indice y la columna varia segun el contenido
Hoja1.Cells(indice, 1) = TextBox1.Text
Hoja1.Cells(indice, 2) = TextBox2.Text
Hoja1.Cells(indice, 3) = TextBox3.Text
Hoja1.Cells(indice, 4) = TextBox4.Text
Rem limpia todos los textbox
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
Rem coloca el foco en textbox1
TextBox1.SetFocus
End Sub
Y eso sería todo
Suscribirse a:
Comentarios (Atom)




