El curso escrito
Esta es una reescritura del Curso Básico de VBA que publiqué hace unos 15 años atrás. Como el VBA sigue vigente pensé que sería bueno hacer una nueva versión del curso que elimine la palabrería inútil y muchos contenidos de relleno que tenía el curso anterior. Aquí vamos:
Para que sirve el VBA
En pocas palabras, para programar los componentes de Microsoft Office tales como Word, Excel, Access, Poower Point y Visio. En este curso los ejemplos serán solo de Word y Excel. Es un subconjunto casi completo del lenguaje de programación Visual Basic 6.0. O sea, si tienen instalado el Office o cualquiera de sus componentes, no necesitan más para programar en VBA.
La advertencia de seguridad: Al abrir macros en Word97 puede negar acceso por la configuración de seguridad presdeterminada. En este caso hay que ir a Herramientas, Macros, Seguridad y se cambia a nivel medio como muestra la figura.
Nivel medio significa que avisará antes de ejecutar un macro mostrando una pantalla de advertencia sobre la posibilidad de virus (como VBA es un lenguaje completo, se puede encapsular virus dentro de un documento de Office). Cuando ejecutamos nuestros macros simplemente ponemos "Habilitar macros" después de la advertencia.
Luego en el Word -por ejemplo- escogeremos Herramientas, Macros, Editor de Visual Basic y aparecerá lo siguiente:
Este es el entorno de trabajo donde podemos distinguir:
Explorador de proyectos. El explorador de proyectos es una herramienta de exploración y gestión que muestra una lista jerárquica de cada proyecto abierto. También muestra cada una de las componentes asociadas con los proyectos, como los documentos de Word, formularios, módulos de clase y referencias. En palabras sencillas hay que dejarlo tal como está. A medida que agreguemos objetos a nuestro progranma irán apareciendo en el explorador y nos servirá para movernos de un componente a otro.
Ventana de propiedades. La ventana de Propiedades muestra las propiedades para el objeto activo (Formulario de usuario o control). Ofrece una manera visual de configurar y modificar propiedades. En la ventana de propiedades , las propiedades se pueden listar alfabéticamente o por categorías. En palabras sencillas, cuando agregamos un objeto este tiene varias “propiedades” como su color, tamaño, tipo de letra, etc. En esta ventana podemos cambiar las propiedades del objeto “activo” (iluminado) en ese momento.
Barra de herramientas. Es donde aparecen los botones para las funciones mas usadas, esta justo abajo de la Barra de menús que tiene los menús con todas las opciones del Visual BAsic Area de trabajo. Es donde colocamos nuestros objetos (Formularios o controles) y les agregamos código
Como se hacen los programas en Visual Basic:
Los programas en Visual Basic se hacen en dos etapas
a) Se dibujan las pantallas
b) Se coloca código a los objetos
Primer ejemplo: convertidor de monedas
Para este ejemplo primero dibujaremos las pantallas que en VBA se llaman Formularios de Usuario (User Forms), asi es que usando la barra de menús procedemos a Insertar, UserForm, nos aparece lo siguiente:
En nuestra Area de trabajo un formulario llamado UserForm1 (nombre por defecto) y abajo una caja de herramientas con los componentes que podemos colocar dentro de ese formulario.
Fijense que la barra superior de UserForm1 está de color azul (iluminada) lo que indica que es el componente activo en este momento.
Ahora experimentemos con las propiedades de la UserForm1. Primero hagamos click en la propiedad “Caption” y cambiemos el valor por defecto (UserForm1) escribiendo encima de eso “Convertidor de Dolares a Pesos)”. Vean como cambia el título de nuestro formulario.
Seguidamente cambiemos la propiedad “Back color” haciendo click en ella y luego un click sobre el botón con flecha que aparece a la derecha. Aparecerá una paleta de colores. Haga click sobre cualquier color y verá como cambia el fondo de nuestro formulario. Busquen otras propiedades y cambien sus valores. Si no notan ningún efecto restauren la propiedad a su valor original (con el tiempo se familiarizarán con cada una de las propiedades disponibles para cada componente de la caja de herramientas).
Si, se pierde la caja de herramientas, la podrán recuperar fácilmente con “Ver” “Caja de Herramientas” de la barra del menú. Si no encuentran alguna propiedad (por ejemplo “Name” recuerden que la ventana de propiedades las puede mostrar en orden alfabetico o por categorías, busque en ambos lados pulsando en la ventana correspondiente en la parte superior de las propiedades.
Usaremos tres clases de controles en nuestro proyecto: labels (etiquetas), textboxes (cajas de dialogo o de texto) y un commandbutton (botón de comando), todas estos controles se sacan de la caja de herramientas de abajo del formulario y cada uno tiene sus propiedades.
Los labels son los marcados con la letra “A” en la caja de herramientas, haciendo click sobre el icono y luego colocándose sobre el formulario se dibuja, arrastrando el mouse cambia el tamaño en que desea que aparezca su label. Luego en la ventana de propiedades cambia la propiedad “Caption” del primer label escribiendo “Dolares” en lugar de label1. También puede cambiar la propiedad “Name” a ldolares (por labeldolares). Repita el procedimiento creando otro label con caption “Pesos” y nombre lpesos (por labeltpesos).
Luego escoja un textbox del la caja de herramientas (el icono con “ab”) y dibujelo al lado del label ldolares, borrele la propiedad “Caption” (que quede en blanco) y cambie la propiedad “Name” a tdolares. Con el mismo procedimiento cree un textbox llamado tpesos al lado del label lpesos.
Luego arrastre un boton de la caja de herramientas (el rectangulo sin nombre) y dibujelo en el formulario, luego cambiele la propiedad “Caption” a “Borrar”. Si ha llegado hasta el punto que muestra la figura ya tiene la mitad del programa listo.
Note que en éste ejemplo cambié la propiedad “Backcolor” del formulario y la propiedad “Font” de los labels a “Bold” y “10 pt”.
Aquí tenemos nuestra pantalla rudimentariamente dibujada. Ahora nos falta poner el código, para ello debemos pensar “que es lo que queremos que haga el programa”. En éste caso yo deseo que “cuando escriba una cifra en el textbos de dolares aparezca su equivalencia en el textbox pesos y viceversa”.
O sea que el programa debe actuar cada vez que escribamos algo en uno de los textbox y luego de presionar Enter.
Para eso tenemos que poner un código a cada uno de los textbox indicando que deseamos que ocurra cada vez que escribimos algo y apretamos Enter (eso se llama un "evento"). Para poner código en el textbox de “tdolares” hacemos doble click sobre él y aparecerá la “ventana de códigos” con dos ventanillas en la parte superior; la de la izquierda dirá ldolares (el nombre del objeto) y en la derecha una lista deplegable con todos los “eventos” permitidos para ese objeto (change, click, mousedown, etc…). De esa lista escogemos el evento “Exit” (que significa que presionamos la tecla Enter) y escribimos en la ventana el siguiente código:
Private Sub tdolares_Exit(ByVal Cancel As MSForms.ReturnBoolean)
tpesos.text = Val(tdolares.text) * 500
End Sub
Es decir que cuando escribimos algo en el textbox llamado tdolares y luego presionamos Enter se calculará el varol equivalente en pesos. Nótese que lo que escribimos en el textbox llamado tdolares queda almacenado en la propiedad “tdolares.text”,, le extraemos su valor con val(tdolares), multiplicamos este valor por 500 y lo asignamos como propiedad “text” al textbox llamado “tdolares”. Al principio puede parecer enredado pero una vez que nos acostumbramos a los objetos a los que les cambiamos sus propiedades esto se convierte en pan comido. Para salir de la ventana de códigos y volver al formulario simplemente hacemos click en “UserForm1″ del explorador de proyectos (ventana superior izquierda)
Para el otro textbox (tpesos) también hacemos doble click, escogemos el evento “exit” y escribimos:
Private Sub tpesos_Exit(ByVal Cancel As MSForms.ReturnBoolean)
tdolares.text = Val(tpesos.text) /500
End Sub
Si está todo correcto no sería mala idea que lo grabaran, haciendo click sobre el icono del diskette.
Para probarlo, en la barra de herramientas hay tres botones similares a los de una grabadora. Para que parta el programa presionen el boton correspondiente al “Play” o bien presionen F5 (da lo mismo).
Para diseñar las pantallas rápidamente podemos Copiar, Pegar, Formato, Alinear a la izquierda, Espacio Horizontal, Igualar, etc.a nuestros componentes.
Segundo ejemplo: un Formulario en Word VBA
La automatización de formularios en Word es una de las aplicaciones más útiles del VBA, mostraré paso a paso como hacer un ejemplo sencillo que puede modificarse y adaptarse a muchos otros formatos
Botón derecho
Nuevo
Nuevo documento del Word
Cambiar nombre a FormularioConMacros.doc
Herramientas
Opciones
Seguridad
Seguridad de macros (cambiar a medio)
Herramientas
Macro
Macros
Nombre de la macro: formulario1
Macros en: FormularioConMacros.doc (documento)
Crear
insertar
UserForm
(si el cuadro de herramientas no se ve) ver, Cuadro de Herramientas Crear Userform con 3 labels, 3 textboxes y 1 commandbuttom como muestra la figura siguiente
Volver a FormularioCon Macros.doc
Doble clic en CommandButton1
Debe aparecer
Private Sub CommandButton1_Click()
End Sub
Colocar cursor arriba de End Sub
Escribir el siguiente código (puede hacer un copy-paste)
With Selection
.ParagraphFormat.LineSpacingRule = wdLineSpaceSingle ‘Coloca espacio de líneas en “espacio simple”
.TypeParagraph ‘Pasa a linea siguiente
.TypeParagraph ‘Pasa a linea siguiente
.Font.Bold = True ‘Coloca negrita
.TypeParagraph ‘Pasa a linea siguiente
.TypeParagraph ‘Pasa a linea siguiente
.TypeParagraph ‘Pasa a linea siguiente
.Font.Size = 16 ‘Coloca tamaño de letra en 16
.ParagraphFormat.Alignment = wdAlignParagraphCenter ‘Alineado al centro
.TypeText Text:=”CERTIFICADO” ‘Escribe texto
.Font.Size = 12 ‘Coloca tamaño de letra en 12
.TypeParagraph ‘Pasa a linea siguiente
.Font.Bold = False ‘Desactiva negrita
.ParagraphFormat.Alignment = wdAlignParagraphLeft ‘alineacion a la izquierda
.TypeParagraph ‘Pasa a linea siguiente
.TypeText Text:=”Certifico que el señor “ ‘Escribe texto
.Font.Bold = True ‘Activa las negritas ‘Escribe texto
.TypeText Text:=TextBox1.Text ‘Escribe el contenido de textbox1.text
.Font.Bold = False ‘Desactiva las negritas
.TypeText Text:=”, domciliado en “ ‘Escribe texto
.TypeText Text:=TextBox2.Text ‘Escribe el contenido de textbox2.text
.TypeText Text:=” teléfono “ ‘Escribe texto
.TypeText Text:=TextBox3.Text ‘Escribe el contenido de textbox3.text
.TypeText Text:=” es una persona honorable, de buenas costumbres, “ ‘Escribe texto
.TypeText Text:=” que no consume alcohol y su comportamiento moral es intachable.” ‘Escribe texto
.TypeParagraph ‘Pasa a linea siguiente
.TypeParagraph ‘Pasa a linea siguiente
.TypeText Text:=” Se extiende el presente certificado a petición “ ‘Escribe texto
.TypeText Text:=” del interesado con objeto de su postulación al Opus Dei” ‘Escribe texto
.TypeParagraph ‘Pasa a linea siguiente
.TypeParagraph ‘Pasa a linea siguiente
.Font.Name = “Arial” ‘Cambia el font a Arial
.Font.Size = 10 ‘Coloca tamaño en 10
.TypeText Text:=”Arica “ ‘Escribe texto
.TypeText Text:=Date$ ‘Escribe la fecha
.TypeParagraph ‘Pasa a linea siguiente
.TypeParagraph ‘Pasa a linea siguiente
.TypeParagraph ‘Pasa a linea siguiente
.TypeParagraph ‘Pasa a linea siguiente
.TypeParagraph ‘Pasa a linea siguiente
.TypeParagraph ‘Pasa a linea siguiente
.TypeParagraph ‘Pasa a linea siguiente
.TypeParagraph ‘Pasa a linea siguiente
.ParagraphFormat.Alignment = wdAlignParagraphCenter ‘Alineación al centro
.Font.Bold = True ‘Activa negritas
.TypeText Text:=” RR. PP. TOMAS BRADANOVIC S.J. “ ‘Escribe texto
.Font.Bold = False ‘Desactiva negritas
End With ‘Termina el ciclo Selection
Unload UserForm1
#160;Clic en “Grabar”
Salir del editor e ir a la página en blanco de Word
Poner mouse sobre barra de herramientas
Boton derecho, personalizar
Macros
Guardar en: FormularioConMacros.doc
Project.NewMacros.formulrio1
Con la ventana “personalizar” abierta
Botón derecho, cambiar imagen del botón
Grabar la página
Eso es todo, haciendo click sobre el nuevo botón se comienza a ejecutar el macro. No explicaré el programa línea por línea porque se encuentra auto documentado en los comentarios
Tercer ejemplo: Prototipos en VBA-Excel
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.
1.- 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
2.- 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
3.- 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:
Para el Command Button 1 (ingresar cuenta)
Y eso sería todo
Como programar en VBA sin conocer el modelo de objetos
El modelo de objetos de VBA (Microsoft Foundation Classes) contiene todas las funciones y herramientas que se necesitan para programar cualquier componente del Officce, el problema que es enorme y solo examinar el complicado árbol de objetos, clases y subclases tomaría montenes de tiempo.
Existe un truco que permite averiguar de manera rápida que objetos hay que usar y como para distintas tareas, esto se hace usando la grabadora de macros.
Abrimos un documento en blanco y nos vamos a Herramientas, Macros, Grabar Nueva Macro, Aceptar (quedará grabado son el nombre por defecto Macro1). Aparecerá la imagen de una mini "grabadora" que indica que estamos grabando el macro.
Supongamos que queremos ver como se programa para acceder a los encabezados y pies de página, como estamos grabando la macro hacemos la operación que queremos automatizar de modo manual, en este caso escogemos Ver, Encabezados y pies de página, escribimos un encabezado, nos cambiamos al pie, escribimos un pie (cualquiera, solo de ejemplo) y hacemos clic en el botón que detiene la grabadora.
Luego vamos a Herramientas, Macros, Macros, Editar y veremos todo el código ya hecho, listo para ser cortado y pegado en nuestro programa, en este caso sería:
Como pueden ver la grabadora de macros escribió por nosotros todo el código que necesitamos, incluso ahora lo podemos analizar y oprimizar para nuestra aplicación en particular. Esata es una manera muy rápida y práctica de ir aprendiendo el modelo de objeto solo a medida que se va necesitando.
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
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
Como programar en VBA sin conocer el modelo de objetos
El modelo de objetos de VBA (Microsoft Foundation Classes) contiene todas las funciones y herramientas que se necesitan para programar cualquier componente del Officce, el problema que es enorme y solo examinar el complicado árbol de objetos, clases y subclases tomaría montenes de tiempo.
Existe un truco que permite averiguar de manera rápida que objetos hay que usar y como para distintas tareas, esto se hace usando la grabadora de macros.
Abrimos un documento en blanco y nos vamos a Herramientas, Macros, Grabar Nueva Macro, Aceptar (quedará grabado son el nombre por defecto Macro1). Aparecerá la imagen de una mini "grabadora" que indica que estamos grabando el macro.
Supongamos que queremos ver como se programa para acceder a los encabezados y pies de página, como estamos grabando la macro hacemos la operación que queremos automatizar de modo manual, en este caso escogemos Ver, Encabezados y pies de página, escribimos un encabezado, nos cambiamos al pie, escribimos un pie (cualquiera, solo de ejemplo) y hacemos clic en el botón que detiene la grabadora.
Luego vamos a Herramientas, Macros, Macros, Editar y veremos todo el código ya hecho, listo para ser cortado y pegado en nuestro programa, en este caso sería:
Sub Macro2()
‘
‘ Macro2 Macro
‘ Macro grabada el 24-12-98 por TOMAS BRADANOVIC
‘
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Or ActiveWindow.ActivePane.View.Type _
= wdMasterView Then
ActiveWindow.ActivePane.View.Type = wdPageView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
Selection.TypeText Text:= _
“Tomás Bradanovic, Consultoría en Proyectos de Inversión Públ”
Selection.TypeText Text:=”ica”
Selection.TypeParagraph
Selection.HeaderFooter.Shapes.AddLine(72#, 93.6, 540#, 93.6).Select
If Selection.HeaderFooter.IsHeader = True Then
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
Else
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
End If
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldNumPages
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldNumPages
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldPage
NormalTemplate.AutoTextEntries(“Página X de Y”).Insert Where:=Selection. _
Range
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Sub
Como pueden ver la grabadora de macros escribió por nosotros todo el código que necesitamos, incluso ahora lo podemos analizar y oprimizar para nuestra aplicación en particular. Esata es una manera muy rápida y práctica de ir aprendiendo el modelo de objeto solo a medida que se va necesitando.
Suscribirse a:
Entradas (Atom)
Buen aporte esperamos que sigas compartiendo mas informacion actualizada en especial los snippets
ResponderEliminar