Comenzando a programar en VBA

Nota Preliminar: Al abrir macros en Word97 aparece una pantalla de advertencia sobre la posibilidad de virus (como VBA es tan poderoso, ahora se puede encapsular perfectamente un virus dentro de un documento de Office),les recomiendo que hagan caso omiso de esta advertencia y enciendan el casillero para que no vuelva a hacer la pregunta.

Para hacer un programa en VBA necesitas el Office 97. En este ejemplo programaremos un documento de Word. Para ello solo debemos abrir un nuevo documento de Word y escoger Herramientas, Macros, Editor de Visual Basic, con lo que aparecerá una pantalla como esta:

Para los que conocen el VB 5.0 esta pantalla les resultará muy familiar a los que han trabajado con VB5.0, para los que conocen versiones anteriores es lo mismo, solo que el mapa del proyecto y la ventana de propiedades están a la izquierda siempre visibles.

La primera diferencia con VB esta en el mapa del proyecto que aparece en la ventana superior izquierda y muestra un árbol de directorios con Normal, Project(Documento1), Referencia a Microsoft Word, etc..(a veces aparecen más ramas según la instalación del Office). En esta ventana nosotros escogemos donde se va a guardar nuestro proyecto y tenemos dos alternativas; si nos ubicamos en Normal nuestro macro será accesible para cualquier documento que abramos en Word. Si nos ubicamos en Project(Documento 1) el macro solo estará disponible para el documento específiuco que estamos creando. En nuesto ejemplo grabaremos un macro solo en nuestro documento, por lo que nos colocamos en Project(Documento1).

El primer paso al crear un macro en VBA es darle un nombre, para ello tenemos que ir a Insertar, Modulo del menú con lo cual aparecerá en el mapa de proyecto un Modulo1. Nos vamos a la ventana de propiedades (abajo izquierda) y le cambiamos la propiedad (Name) a Prueba1 (podemos colocar cualquier nombre por supuesto). Este será el nombre de llamada del macro. Hacemos doble click sobre el y aparecerá la ventana para ingresar el código de la macro. En nuestro ejemplo (así como en la mayoría de los casos) queremos que nuestro programamuestre una Form al iniciarse así es que escribimos:

Sub prueba1()

UserForm1.show

End Sub

Luego tenemos que crear nuestra form, usando Insertar, UserForm, con lo que aparecerá lo siguiente:

Con las herramientas de la caja arrastramos las textbox, labels y CommandButtom para obtener una form del tipo

Para hacerlo rápidamente usamos las opciones Copiar, Pegar, Formato, Alinear a la izquierda, Espacio Horizontal, Igualar, etc..

Una vez que tenemos creada nuestra UserForm pasamos a programarla, primero haremos click sobre cada text box para que las entradas se conviertan automáticamente a mayúsculas al colocar Enter. Para ello hacemos doble click sobrte las textbox, nos cambiamos a Exit y ponemos

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

TextBox1.Text = UCase(TextBox1.Text)

End Sub

Nota para los que conocen versiones anteriores al VB5.0: En las versiones anteriores si queríamos que el foco pasara hacia el textbox de abajo al colocar Enter usabamos Keypress y luego hacíamos un If Keyascii=13 then....

En la versión 5.0 se usa Exit y el foco pasa automáticamente hacia abajo. Otra importante diferencia con las versiones anteriores es que el órden en que pasa el foco al colocar Enter puede ser especificado usando Ver, Orden de Tabulación. Así puedes colocar el orden como quieras pasando hacia arriba o abajo los distintos elementos del UserForm. Para poder usar esta opción tiene que estar la UserForm visible (no la ventana de códigos).

Bueno, hasta aquí no hay ninguna novedad con respecto a VB5.0. La programación específica de VBA la colocaremos en el botón OK (CommandButton1). Hacemos doble click sobre este botón y escribimos:

Private Sub CommandButton1_Click()
With Selection
.Font.Size = Val(10)
.ParagraphFormat.LineSpacingRule = wdLineSpaceSingle
.TypeParagraph
.Font.Name = "arial black"
.ParagraphFormat.Alignment = wdAlignParagraphCenter
.TypeText Text:=vbTab & "Programa de Prueba"
.ParagraphFormat.Alignment = wdAlignParagraphLeft
.TypeParagraph
.TypeParagraph
.Font.Name = "Arial"
.TypeText Text:=vbTab & "NOMBRE " & vbTab & TextBox1.Text
.TypeParagraph
.TypeText Text:=vbTab & "DIRECCION" & vbTab & TextBox2.Text
.TypeParagraph
.TypeText Text:=vbTab & "TELEFONO " & vbTab & TextBox3.Text
.TypeParagraph
.TypeParagraph
End With
End Sub

¡Y ya tenemos listo nuestro primer programa!. ahora lo grabamos haciendo click en el icono del diskette de la barra de herramientas del VBA y le colocamos un nombre (en este caso yo lo grabé como Prueba 1 VBA) Luego cerramos todo..

Para ejecutarlo ingresamos abrimos el documento Prueba 1 VBA.doc y escogemos Herramientas, Macros, Macros, iluminamos el macro prueba1 y hacemos doble click. Deberá aparecer la pantalla siguiente:

Al ingresar los datos y hacer click en el botón Ok, se creará el documento. Este ejemplo es muy básico por su propósito didáctico. Después de pulsar el Botón Ok tendremos que cerrar la UserForm1 Clickeando en la X de la esquina superior, posteriormente veremos que prácticamente todo puede ser automatizado.

Lo más bonito de todo esto es que si copian el documento "prueba 1 de VBA.doc" en un diskette y lo colocan en CUALQUIER computador que tenga Office 97, el programa funciona igual sin importar cuan complejo sea. Es decir CERO trabajo de instalación. Les adjunto este primer documento programado, para que lo examinen y lo comparen con el que han hecho ustedes mismos en este ejercicio. Eso si cambienle el nombre si lo van a grabar en el mismo directorio del disco duro donde escribirán la prueba, para evitar regrabarlo..

Bueno, ya hicimos un programa y seguramente tendrán serias dudas por los "chorizos" de código del tipo ".ParagraphFormat.Alignment = wdAlignParagraphCente" y otras lindezas que colocamos en el botón Ok. La pregunta del millón es ¿tendré que aprenderme ESOS comandos antes de programar en VBA?, la respuesta es que afortunadamente no es necesario. No hay que saber nada de la "Microsoft Foundation Classes" para programar pues hay un truco muy sencillo que nos entrega de manera automática todos los comandos que necesitemos.

Pero eso será tema de la próxima sesión. Espero que todo les resulte Ok y no se hayan aburrido.

 

Autor: Tomás Bradanovic
http://members.spree.com/sip/tombrad

Entrega 1 - Entrega 2 - Entrega 3 - Entrega 4 - Entrega 5 - Entrega 6 - Entrega 7 - Entrega 8 - Entrega 9
Descargar