DESDE EL PUNTO DE VISTA GENERAL, PODEMOS DECIR QUE LAS MACROS NOS AYUDAN A AUTOMATIZAR TAREAS. SON PARTE DE CDIGO DE PROGRAMACIN QUE ES INTERPRETADO POR EXCEL Y LLEVA A CABO DISTINTAS ACCIONES
El Lenguaje VBA
2
El lenguaje de programacin de las macros Visual Basic para Aplicaciones (VBA), es un lenguaje de programacin comn, pero su entorno de desarrollo est plenamente integrado con las aplicaciones Microsoft Office, es decir no puede ejecutarse en forma autnoma. La forma en la que debemos guardar los archivos de Excel que contengan macros es libros de Excel habilitados para macros, su extensin ser .XLSM
Esta ficha de opciones es especfica para interactuar con VBA, pero no se encuentra disponible con la instalacin bsica. Para activarla seleccionamos el BOTON OFFICE OPCIONES DE EXCEL MAS FRECUENTES OPCIONES PRINCIPALES PARA TRABAJAR CON EXCEL MOSTRAR FICHA PROGRAMADOR EN LA CINTA DE OPCIONES.
Ficha Programador: grupo cdigo: seguridad de macros. Distintos grupos de opciones, dentro del Centro de Confianza:
Editores y Ubicaciones de confianza: son macros firmados digitalmente para verificar la autenticidad. De esta forma, si se ejecuta un cdigo que no cumpla con estos criterios, el centro de confianza deshabilitar el cdigo en forma automtica y aparecer un mensaje, para dejar la macro deshabilitada o habilitarla. Configuracin de ActiveX: permite habilitar o deshabilitar la utilizacin de estos controles (Los controles Active X son pequeos bloques empleados para la
creacin de programas, que se pueden usar para crear aplicaciones distribuidas que funcionen a travs de Internet empleando navegadores web. Algunos ejemplos incluyen aplicaciones para la recopilacin datos, para la visualizacin de determinados tipos de datos o para reproducir animaciones. El Malware, como los virus informticos o el spyware, podra infectar accidentalmente al usuario al visitar ste cualquier sitio web contaminado o malicioso que gestione las descargas haciendo uso de controles ActiveX.)
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
La Grabadora de Macros
5
en que la activamos (Grabar macro). Los nombres que le asignemos deben comenzar con una letra o un carcter de subrayado. No es posible incluir nombres que entren en conflicto, por ejemplo A2
Ejercicio 1
6
algunas celdas. Observa el cdigo. Recordemos que nuestras macros comienzan por defecto con referencias fijas, estos podremos modificarlo activando el botn usar referencias relativas o borrando la lnea de cdigo que hace referencia a la seleccin de las celdas
cuadro de dilogo que se abre al presionar el comando MACROS, pero tambin podremos asignarles una macro a diferentes formas y objetos. LOS BOTONES DE FORMULARIO, son los preferidos, solo hay que dibujarlos y presionar la opcin GRABAR. Tambin podremos asignar una macro a una imagen, presionando el botn dcho. sobre ella, encontraremos la opcin ASIGNAR MACRO Adems podemos incluir nuestras macros en la barra de acceso rpido, para eso dentro de las OPCIONES DE EXCEL incluidas en el BOTN DE OFFICE, elegimos PERSONALIZAR
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Ejercicio 2
8
El Editor de VBA
9
instruccin por instruccin el cdigo de programacin de las macros y realizar las modificaciones necesarias. Hay varias formas de acceder: BOTN VISUAL BASIC dentro de la ficha del PROGRAMADOR Botn MODIFICAR dentro del cuadro de dilogo MACRO ALT + F11
LAS VENTANAS
10
Las activamos con las opciones incluidas en el men VER VENTANA DE CDIGO
En esta se trabaja directamente con el cdigo de programacin VENTANA INMEDIATO Podemos ejecutar cdigo VBA, si escribimos directamente la instruccin y presionamos Enter. Nos permite probar el funcionamiento de instrucciones, sin tener que ejecutar una macro en su totalidad. VENTANA INSPECCIN Podemos seguir el funcionamiento de ciertas instrucciones de nuestros procedimientos si les agregamos una inspeccin. Estas expresiones de inspeccin se actualizan en forma automtica cuando se entra en modo de interrupcin (suspensin temporal de la ejecucin de la macro).
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
11
VENTANA LOCALES
Permiten ver los valores que poseen las variables definidas dentro de una macro durante su ejecucin, ejecutando en modo paso a paso (F8). VENTANA EXPLORADOR DE PROYECTOS Desde aqu podremos navegar por las estructura VBA de los archivos excel que estn abiertos. VENTANA PROPIEDADES Visualiza las diferentes propiedades de cada uno de los objetos de VBA que seleccionemos.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
WITHEND WITH
13
(tome nota)
Consta de 2 partes: un objeto definido sobre el cual actuarn las instrucciones y una serie de comandos que actuaran sobre ese objeto (generalmente cambios en el formato). Selection.Font.Bold = True Selection.Font.Name = Arial Selection.Font.Size = 16 Selection.Font.Underline = xlUnderlineStyleNone Tambin se podra usar as: With Selection.Font Bold = True Name = Arial Size = 16 Underline = xlUnderlineStyleNone End With
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
A Practicar !
14
Agregue la ficha de opciones Programador. Recorra los distintos comandos includos en el grupo
Cdigo Con la grabadora, realice una macro que permita desplazarse dentro de una planilla, movindose una pantalla hacia la derecha. Luego haga otras que realicen lo mismo pero hacia la izquierda, hacia arriba y hacia abajo.(AvPag y RePag, ALT + AvPag o ALT + RePag) Tenga en cuenta que ser necesario utilizar referencias absolutas. Asigne las macros anteriores a botones, imgenes y barra de acceso rpido con su correspondiente cono.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
A Practicar!
15
cdigo, elimine lneas innecesarias. Cree una macro que modifique las opciones de relleno, fuente, tamao y color de fuente con la grabadora. Reemplace la construccin With que aparece en el cdigo generado por las instrucciones por separado.
Hemos trabajado con diferentes objetos, como una celda, una hoja, un libro, etc. Sobre estos objetos podemos aplicar MTODOS(acciones que pueden realizar los objetos). En VBA, antes de aplicar un mtodo debemos identificar al objeto. Ej: Sub Fuente() Selection.Font.Bold = True End Sub
Podemos definir a los EVENTOS como toda ACCIN que puede ser reconocida por un objeto, por ejemplo, el clic del mouse sobre un botn o la pulsacin de alguna tecla Una COLLECIN es un OBJETO QUE CONTIENE VARIOS OBJETOS.Por ej: la coleccin de WORKBOOKS (que tambin es un objeto) contiene todos los objetos WORKBOOK abiertos. Sub Cerrar_libro() ActiveWorkbook. Close End Sub Sub Cerrar_todos() Workbooks.Close End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
17
Proteger la Hoja Activa Sub protejohoja() ActiveSheet.Protect contrasea End Sub Desproteger la Hoja Activa
18
cuando abrimos archivos es posible ejecutar macros que realicen ciertas acciones en forma automtica. Este tipo de macros son privadas del libro o de la hoja en cuestin y por lo tanto comienzan con la construccin Private Sub y terminan con End Sub Ejemplo: Realicemos una macro autoejecutable, para que al abrir el libro nos ubique en la celda C5. -Seleccionamos el objeto ThisWorkbook, accedemos a la ventana cdigo y en la lista desplegable elejimos el objeto Workbook.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Dentro del procedimiento escribimos: Sheets(1).Select (hace refernecia a la primera hoja ubicada en nuestro libro, independientemente de cual sea su nombre) Range(C5).Select
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Supongamos que tenemos una hoja con varios datos y queremos posicionarnos en el ltimo para seguir cargando. Sheets(Datos).Select Range(A10000) Selection.End(xlUp).Select (Es ideal comenzar desde muy abajo, si lo hacemos con la grabadora nos ubicamos en la celda A10000 y luego presionamos las teclas CTRL + Flecha arriba, con esto nos ubicamos en el ltimo registro pero la idea es situarnos una fila abajo): inclumos ActiveCell.Offset(1,0).Select OFFset: nos permite desplazarnos a partir de una celda fija Offset(Row, column) valores positivos abajo y a la derecha, negativos hacia arriba y a la izquierda: Offset(2,-1)dos filas hacia abajo, 1 colummna a la izquierda.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Esto lo lograremos en la ventana de cdigo del objeto Thisworkbook, lista desplegable BeforeClose
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub
Otros Eventos del Workbook Activate y Deactivate (ejecuta la macro cuando tenemos varios libros abiertos a la vez y activamos o desactivamos alguno). BeforePrint (antes de imprimir) PrintPreview (nos mostrara la presentacin preliminar de una determinada seleccin). BeforeSave disparar la macro antes de grabar nuestro archivo.
Eventos Worksheet
23
relacionados con la hoja en la que se encuentra insertado el cdigo VBA Activate, Deactivate BeforeRightClick (presionamos el botn derecho del mouse.
macro la tecla MAYSCULA, para no reemplazar una atajo de excel, quedara CTRL + MAYSCULA + Carcter Para salir del editor de VBA podemos utilizar ALT + Q Para ejecutar una macro en forma automtica cuando se abre el archivo, debemos incluir el cdigo VBA dentro del objeto THISWORKBOOK Si deseamos que la macro siempre est disponible, para que se pueda cargar en forma automtica al abrir Excel debemos guardarla en c:\Documents ad Settings\Datos de Programa\Micrososft\Excel\XLSTART Para modificar las caracterstcas del Editor vamos al men Herramientas/Opciones
A Practicar!
25
de la pantalla al 75%. Puede utilizar la grabadora para generar las lneas de cdigo y luego incorporarla al Thisworkbook
Las Variables
26
Una variable es un lugar de almacenamiento con nombre, es decir un espacio de mem0ria que puede contener ciertos tipos de datos y que , a su vez, se puede modificar durante la ejecucin de la macro. Declaracin de Variables El nombre de las variables debe ser nico y no contener ms de 255 caracteres. Es recomendable declarar las variables y distinguir tres situaciones: Procedimiento: la variable que declaremos dentro de un procedimiento, Sub o Function Mdulo: sern declaradas fuera de cualquier procedimiento y son vlidas en todo el mdulo. Pblica: las variables que declaremos mediante la instruccin Public estarn disponibles para todos los procedimientos en todos los mdulos de todas las macros.
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Las Variables
27
Para declarar variables utilizamos la instruccin Dim. Si inclumos esta instruccin a nivel procedimiento, solo tendr efecto en la macro en cuestin. Ej: Dim variable1 as string Dim variable2 as boolean Si queremos utilizar las variables para distintas macros podemos definirlas en la seccin Declaraciones de la ventana cdigo y as lograr que tengan validez en todo el mdulo
Variables
29
Fechas y horas: Para almacenar fechas y horas se utiliza la palabra Date Tipo variant : Las variables de este tipo pueden almacenar cualquier tipo de
Mas variables
30
Constantes
31
Las constantes, como las variables, se utilizan para guardar datos y valores para nuestro programa, pero a diferencia de estas ltimas (las variables), el contenido que almacenen no cambia, siempre es constante. A diferencia de las variables que se declaran con la palabra Dim, las Constantes se declaran con la palabra Const. Const numero = 53 En la lnea anterior he creado una constante, que la llam numero y va a almacenar un nmero , y este valor, cuando se ejecute mi programa se mantendr invariable.
Constantes
32
Las constantes, como las variables, se utilizan para guardar datos y valores para nuestro programa, pero a diferencia de estas ltimas (las variables), el contenido que almacenen no cambia, siempre es constante. A diferencia de las variables que se declaran con la palabra Dim, las Constantes se declaran con la palabra Const. Const numero = 53 En la lnea anterior he creado una constante, que la llam numero y va a almacenar un nmero , y este valor, cuando se ejecute mi programa se mantendr invariable.
Option Explicit
33
El Option Explicit se utiliza a nivel de mdulo (sin ningn tipo de argumento
al inicio del mdulo) para forzar la declaracin explcita de todas las variables en este mdulo. Esta declaracin debe aparecer en la parte superior del mdulo, antes de cualquier procedimiento. Cuando esta declaracin se usa, un mensaje de error identifica cualquier variable no definida o mal escrita. Para que Option Explicit se inserte automticamente en cada nuevo libro: Ir a la barra del men del editor de macros. Men Herramientas Opciones En la ficha Editor, marca "Requerir declaracin de variables".
Los InputBox Con esta herramienta se mostrar un cuadro de dilogo en pantalla, en el cual se podr introducir un texto que devolver un string que se podr almacenar en una variable. Sintaxis InputBox(prompt[, title][, default][, xpos][, ypos][, helpfile, context]) La sintaxis de la funcin InputBox consta de estos argumentos: (Si deseamos omitir algunos argumentos de posicin, debemos incluir el delimitador de coma correspondiente).
ypos
Opcional. Expresin numrica que especifica, en twips, la distancia en sentido vertical entre el borde superior del cuadro de dilogo y el borde superior de la pantalla. Si se omite ypos, el cuadro de dilogo se coloca a aproximadamente un tercio de la altura de la pantalla, desde el borde superior de la misma.
Opcional. Expresin de cadena que identifica el archivo de Ayuda que se utilizar para proporcionar ayuda interactiva para el cuadro de dilogo. Si se especifica helpfile, tambin deber especificarse context. Opcional. Expresin numrica que es el nmero de contexto de Ayuda asignado por el autor al tema de Ayuda correspondiente. Si se especifica context, tambin deber especificarse helpfile.
helpfile
context
La siguiente orden genera un cuadro al cual le indicamos texto, ttulo y asignamos el texto que escriba el usuario a la variable cadena: Dim cadena As String cadena = InputBox("Introduzca el nombre del usuario", "Identificacin") Observar que como asignamos el resultado de la funcin InputBox a una variable, debemos encerrar los argumentos entre parntesis. El resultado en ejecucin es:
Sub Sumatoria() Dim valor1 As Double Dim valor2 As Double Dim total As Double valor1 = InputBox("Ingrese el primer valor a sumar") valor2 = InputBox("Ingrese el segundo valor a sumar") total = valor1 + valor2 Range("A1") = total End Sub
Los MsgBox
38 MsgBox: Muestra un mensaje en un cuadro de dilogo, espera a que el usuario haga clic en un botn y devuelve un tipo Integer correspondiente al botn elegido por el usuario. Sintaxis MsgBox(prompt[, buttons][, title][, helpfile, context]) La sintaxis de la funcin MsgBox consta de estos argumentos:
Parte prompt buttons Descripcin Requerido. Cadena que representa el prompt en el cuadro de dilogo. La longitud mxima de prompt es de aproximadamente 1024 caracteres, segn el ancho de los caracteres utilizados. Opcional. Expresin numrica que corresponde a la suma de los valores que especifican el nmero y el tipo de los botones que se pretenden mostrar, el estilo de icono que se va a utilizar, la identidad del botn predeterminado y la modalidad del cuadro de mensajes. Si se omite este argumento, el valor predeterminado para buttons es 0. Opcional. Expresin de cadena que se muestra en la barra de ttulo del cuadro de dilogo. Si se omite title, en la barra de ttulo se coloca el nombre de la aplicacin. Opcional. Expresin de cadena que identifica el archivo de Ayuda que se utiliza para proporcionar ayuda interactiva en el cuadro de dilogo. Si se especifica helpfile, tambin se debe especificar context. Opcional. Expresin numrica que es igual al nmero de contexto de Ayuda asignado por el autor al tema de Ayuda correspondiente. Si se especifica context, tambin se debe especificar helpfile.
VbQuestion
VbExclamation VbInformation
32
48 64
Buttons
40
VbDefaultButton1 VbDefaultButton2 VbDefaultButton3 VbDefaultButton4 VbApplicationModal 0 256 512 768 0 El primer botn es el predeterminado. El segundo botn es el predeterminado. El tercer botn es el predeterminado. El cuarto botn es el predeterminado. Aplicacin modal; el usuario debe responder al cuadro de mensajes antes de poder seguir trabajando en la aplicacin actual. Sistema modal; se suspenden todas las aplicaciones hasta que el usuario responda al cuadro de mensajes. Agrega el botn Ayuda al cuadro de mensaje. Especifica la ventana del cuadro de mensaje como la ventana de primer plano. El texto se alinea a la derecha. Especifica que el texto debe aparecer para ser ledo de derecha a izquierda en sistemas hebreo y rabe.
Ejemplo
41
La siguiente orden genera un cuadro al cual le indicamos ttulo, texto, le ponemos tres botones: S, No y Cancelar. Adems le incluimos el icono de pregunta: MsgBox "Esta seguro de que quiere continuar?", vbYesNoCancel + vbQuestion, "Confirmacin" El resultado en ejecucin es:
Ejercicios
42
1
Establezca y declare tres variables de tipo de dato distintas (String, Long, Date) a nivel del mdulo. Incluya un ImputBox cuyo origen sea una variable del tipo String que luego se muestre en un MsgBox con botones S y No (4) y un icono de pregunta.(32) Modifique la macro que permite realizar sumas para poder hacer multiplicaciones y haga los ajustes necesarios en el MsgBox.
Ajuste el MsgBox del punto anterior para que se muestren en el mismo mensaje los valores de cada una de las variables y su resultado.
Realice una nueva macro con ImputBox que le permita hacer la suma entre dos valores y luego multiplicarlos por un tercer valor. El resultado debe mostrarlo en un MsgBox y tambin volcarlo en alguna celda de la planilla.
por defecto al ejecutar una macro vemos todas las acciones que se realizan, esto puede provocar confusin y prdida de tiempo, para evitarlo podremos agregar la instruccin: Application.ScreenUpdating=True
En excel, disponemos de un libro oculto llamado personal.xls (en Excel 2007, tiene extensin xlsb, por lo que se llamar personal.xlsb), como seguramente ya conocers. Tambin sabrs seguramente, que este libro es de una gran utilidad si utilizas habitualmente los mismos macros en diferentes libros. En el libro personal.xls (o personal.xlsb, si usas Excel 2007) podemos tener almacenadas nuestras macros ms habituales, para poder utilizarlas en cualquier otro libro de excel, sin necesidad de tener que implementar el cdigo VBA en estos nuevos libros que vamos abriendo o creando. Para grabar una macro en el libro oculto personal.xls (o personal.xlsb, si usas Excel 2007), tan solo deberemos indicar en el momento de su creacin, que queremos que se almacene en el mencionado libro. Para ello, utilizaremos la grabadora de macros.
Dentro de la categora de Mdulos, podremos editar el cdigo del macro, borrarlo, o crear nuevos macros, y todos ellos los tendremos disponibles siempre, aunque estemos trabajando con uno, cinco, o veinte ficheros de excel diferentes. Cuando vayamos a ejecutar un macro, llamndolo desde Herramientas, Macro, Macros, nos aparecern las macros propias del libro con el cual estemos trabajando, junto con las macros grabadas en el fichero personal.xls (o personal.xlsb, si usas Excel 2007), tal y como se muestra en la siguiente imagen:
Si lo que deseamos es llamar a una funcin personalizada que tengamos en el libro personal, lo haremos de esta forma (suponiendo que la funcin que hayas creado se llame mifuncion):
=PERSONAL.XLS!mifuncion()
Construcciones Condicionales
48
Construccin IfThenElse
Con esta construccin podemos ejecutar un grupo de instrucciones dependiendo del resultado de una expresin. If condicin Then instrucciones en caso de cumplirse la condicin Else instrucciones en caso de no cumplirse la condicin. Aqu tambin es posible inclur la instruccin ElseIf que nos permitir inclur un nuevo bloque If End if
Ejemplos
49
Sub Ejemplo_if() If Range(A1) = 12 Then Range(B1)=Range(A1).Value Else Range(B3)=Range(A1).Value End If End Sub
ElseIf
Sub Operaciones_Msg() Dim valor1 As Double 50 Dim valor2 As Double Dim total As Double Dim operacion As String Dim signo As String valor1 = InputBox("Ingrese el primer valor") valor2 = InputBox("Ingrese el segundo valor") operacion = ucase(InputBox("ingrese la operacion:SUMA, RESTA, MULTIPLICA, DIVIDE")) If operacion = "SUMA" Then total = valor1 + valor2 signo = "+" ElseIf operacion = "RESTA" Then total = valor1 - valor2 signo = "-" ElseIf operacion = "MULTIPLICA" Then total = valor1 * valor2 Ucase:convierte de minus. a signo = "*" mayus. ElseIf operacion = "DIVIDE" Then Lcase :de mayusc. A minusc total = valor1 / valor2 signo = "/" End If MsgBox ("El resultado de:" & valor1 & signo & valor2 & " es: " & total) End Sub Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Al abrir un archivo
51
Private Sub Workbook_Open() Application.DisplayAlerts = False If ActiveWorkbook.ReadOnly Then MsgBox "El archivo est siendo utilizado por otro usuario, vuelva a intertarlo mas tarde, gracias", vbExclamation ActiveWorkbook.Close savechanges:=False End If End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Valor 1 2 3 4 5 6 7
Select Case
Ejecuta uno o varios grupos de instrucciones, dependiendo del valor
53
Funciones Personalizadas
54
FunctionEnd Function, u debemos designar variables que formarn los argumentos o parmetros de esta funcin:
Function Cargas(salario As Double, tipo As Integer) If tipo = 1 Then Cargas = salario * 0.33 ElseIf tipo = 2 Then Cargas = salario * 0.25 ElseIf tipo = 3 Then Cargas = salario * 0.18 End If End Function (Se ejecuta en excel desde la barra : =cargas(c5;d5)
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Los Bucles
55
DOLOOPWHILE
56
DO WHILELOOP Sub bucledo_while() Dim cantidad As Integer Dim condicion As Integer cantidad = 0 condicion = 15 Do While condicion > 0 condicion = condicion - 1 cantidad = cantidad + 1 Loop MsgBox ("el bucle se ejectuto " & cantidad & " veces") End Sub
DOLOOP WHILE Sub bucle_do_loop_while() Dim cantidad As Integer Dim condicion As Integer cantidad = 0 condicion = 15 Do condicion = condicion - 1 cantidad = cantidad + 1 Loop While condicion > 0 MsgBox ("el bucle se ejectuto " & cantidad & " veces") End Sub
Los Bucles
57
Do Until condicin instrucciones Loop Se ejecutar el bloque de condiciones hasta que la condicin includa tome el valor true
DOUNTILLOOP
58
DO UNTILLOOP Sub bucledo_until() Dim cantidad As Integer Dim condicion As Integer cantidad = 0 condicion = 0 Do Until condicion = 15 condicion = condicion + 1 cantidad = cantidad + 1 Loop MsgBox ("el bucle se ejectuto " & cantidad & " veces") End Sub
DOLOOP UNTIL Sub bucledo_loopuntil() Dim cantidad As Integer Dim condicion As Integer cantidad = 0 condicion = 0 Do condicion = condicion + 1 cantidad = cantidad + 1 Loop Until condicion = 15 MsgBox ("el bucle se ejectuto " & cantidad & " veces") End Sub
FORNEXT
59
instrucciones un determinado nmero de veces. Los bucles ForNext usan una variable contador cuyo nmero se aumenta o disminuye cada vez que se ejecuta el bucle, hasta alcanzar el valor establecido en la condicin. Por defecto este bucle aumenta su valor en 1, pero es posible dar pasos mas grandes si utilizamos la instruccin Steep. Ejemplo: For i = 1 to 40 steep 2 avanza de 2 en 2
Sub bucle_for() Dim i As Integer Dim contador As Integer For i = 1 To 15 contador = contador + 1 Next i MsgBox "El bucle for se ejecut " & contador & " veces", vbInformation, "Aviso End Sub
For EachNext
61
Esta variante del bucle ForNext repite el grupo de instrucciones para cada uno de los objetos de una coleccin o para cada elemento de una matrz. Por ejemplo, podramos afectar a todas las celdas de un determinado rango o a todos los objetos Sheet de la coleccin Sheets. En el siguiente ejemplo recorreremos cada uno de los objetos Hojas de la coleccin worksheets, para comprobar que la celda A1 est vaca:
Sub forhojas() Dim mihoja For Each mihoja In Worksheets If mihoja.Range("g1") = "" Then mihoja.Range("g2") = "funciona?" End If Next mihoja End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Exit
62
hasta de una funcin o de un procedimiento. EXIT DO: es la instruccin para salir de un bucle DoLoop. Le transfiere el control a la instruccin siguiente a Loop. EXIT FOR: sale de un bucle ForNext o For EachNext. Le transfiere el control a la instruccin siguiente a Next. EXIT FUNCTION, EXIT SUB: nos permiten salir inmediatamente de un procedimiento o funcin
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Ejemplo
63
Sub do_celdas_exit() Dim mifila Dim micol mifila = 1 micol = 1 Do Until mifila = 100 Cells(mifila, micol).Select If ActiveCell = 100 Then Exit Do End If mifila = mifila + 1 Loop
End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Sub validar_numero() Dim mivalor Do mivalor = InputBox("Ingrese el precio de venta del artculo: ") Loop Until IsNumeric(mivalor) [b4] = mivalor * 0.2 End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Function sumarporcolores(rango_suma) Dim color Dim micelda Dim suma color = ActiveCell.Interior.ColorIndex For Each micelda In rango_suma If micelda.Interior.ColorIndex = color Then sumarporcolores = sumarporcolores + micelda.Value End If Next End Function
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
Ocultar todo
66
Sub ocultar_todo() Dim mihoja As Worksheet For Each mihoja In Worksheets mihoja.Visible = xlVeryHidden ' mihoja.visible=xlsheetvisible ' para mostrar On Error GoTo salida 'el libro tiene que tener por lo menos 1 hoja visible, as que se pone esta sentencia para que no d error Next mihoja salida: Exit Sub End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
LOS FORMULARIOS
67
dilogo de VBA que pueden contener distintos controles y formularios secundarios. Permiten la interaccin entre la aplicacin y el usuario. Un formulario es un objeto Userform de la coleccin Userforms
Elegimos Men Insertar: Userform
Formularios
68
Al insertar un formulario, se dispondr del cuadro de herramientas compuesto por un conjunto de botones de control del formulario, los que se muestra en la siguiente figura.
Formularios
69
Por debajo de la ventana de proyectos se dispondr de la Ventana de Propiedades. En esta ventana se visualizar las propiedades que posee un determinado objeto. En la siguiente imagen se muestra la ventana de propiedades de un formulario, ya que ste es el que est activo.
Mostrar un formulario
70
Para mostrar un objeto Useform podemos utilizar los mtodos Show y Hide. De esta forma, con una macro podemos llamar a un formulario. Sub Mostrar_form() userform1.show End Sub Sub oculto_form userform1.hide End Sub
Asoc. club de Programadores -Macros-VBA - Lic. Carina V. Grosso
El Primer Formulario
72
Introducimos un Userform Modificamos el nombre con la propiedad Name y el ttulo con la propiedad Caption A modo de ejemplo incluremos un control CommandButton que al hacer clic sobre l cambie su nombre. Al hacer doble clic sobre un control, accedemos al cdigo VBA Private asignado a una determinada accin
Mi Primer Formulario
73
Procedimientos y Eventos
75
Siempre que trabajamos con formularios utilizamos macros relacionadas con eventos o acciones, ya sea al hacer un clic en un botn o desplegar una lista. Tambin es posible ejecutar macros relacionadas con eventos del formulario. Si hacemos doble clic sobre el cuerpo del formulario, accedemos al cdigo VBA relacionados con eventos del formulario