Prototipos en Visual Basic para Aplicaciones

Citation
, XML
Authors

Abstract

El propósito de este knol es enseñar de manera rápida e informal la programación de Office (particularmente Excel) para crear prototipos usando Visual Basic para Aplicaciones.

Todo está orientado al desarrolo de prototipos o micro aplicaciones y entrega las bases para aprender a programar prototipos desde cero

Enlaces relacionados

Buenas Prácticas de Programación en VBA 

Programar Access con VBA 

Ejemplo 1: 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

Ejemplo 2: 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


Ejemplo 3: Cuentas Corrientes

Este prototipo ingresa nuevas cuentas con sus datos, va ingresando movimientos, entrega los saldos y emite una cartola de movimientos
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)
Private Sub CommandButton4_Click()
    Rem para emitir cartola
    Rem se carga userform4
    Load UserForm4
    Rem se muestra userforrm4
    UserForm4.Show
End Sub
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
Cuyos componentes programables son
Command Button 1 (ingresar el movimiento)
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
La User Form al activarse
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
Luego el User Form 3 para agregar nuevas cuentas, Insert, User Form
Cuyo código es:
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
Para el Combo Box 1 (elige cuenta)
Private Sub ComboBox1_Click()
    Hoja3.Activate
    ultimo = Hoja2.Cells(1, 1)
    linea = 1
    For z% = 2 To ultimo
        indice = z%
        CodCliente = ComboBox1.ListIndex + 1
        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
            Hoja3.Cells(linea, 1) = Hoja2.Cells(indice, 1)
            Hoja3.Cells(linea, 2) = Hoja2.Cells(indice, 2)
            Hoja3.Cells(linea, 3) = Hoja2.Cells(indice, 3)
            Hoja3.Cells(linea, 4) = Hoja2.Cells(indice, 4)
            Hoja3.Cells(linea, 5) = Hoja3.Cells(indice, 5)
            linea = linea + 1
        End If
    Next z%
End Sub
Para la Activación del User Form
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
Y eso sería todo

About these ads
Follow

Get every new post delivered to your Inbox.