Академический Документы
Профессиональный Документы
Культура Документы
3 3.1 4 4.1 4.2 5 5.1 6 6.1 6.2 6.3 6.4 6.5 6.6 7
7.1 7.2 8 8.1 8.1.1 8.1.2 8.1.3 8.1.4 9 10 10.1 10.2 10.3
SENTENCIAS DE SELECCIN ........................................................... 27 SENTENCIAS DE REPETICIN (BUCLES) ........................................ 30 DEPURACIN DEL CDIGO .................................................................... 34 PUNTOS DE INTERRUPCIN (BREAKPOINTS)................................ 34 INSERCIN DE PUNTOS DE INTERRUPCIN EN EL CDIGO . 35 ELIMINAR PUNTOS DE INTERRUPCIN .................................... 36 MODO INTERRUPCIN ................................................................ 36 CUADRO DE SUGERENCIA DE DATOS ...................................... 37
COMUNICACIN ENTRE PROCEDIMIENTOS Y FUNCIONES ............... 40 OBJETOS DE EXCEL ............................................................................. 42 OBJETO APPLICATION ...................................................................... 42 Pseudoobjeto ActiveWorkbook. ............................................................ 45 Coleccin WorkSheet (Worksheets) ..................................................... 45
End Sub ........................................................................................................... 45 10.4 10.5 10.6 10.7 11 11.1 11.2 Objeto Range. ...................................................................................... 48 Objeto Font. .......................................................................................... 51 Coleccin DocumentProperty (DocumentProperties). .......................... 51 Coleccin Shape (Shapes). .................................................................. 52 OBJETOS DE WORD ............................................................................. 54 Objetos comunes con Excel. ................................................................ 54 Coleccin Document (Documents). ...................................................... 55
11.3 11.4 11.5 11.6 11.7 11.8 12 12.1 12.2 12.3 12.4 12.5 12.6 13 13.1 13.2 13.3 13.4 13.5
Pseudoobjeto ActiveDocument. ........................................................... 57 Objeto Range. ...................................................................................... 57 Coleccin Section (Sections). ............................................................... 59 Coleccin Paragraph (Paragraphs). ..................................................... 59 Coleccin Sentence (Sentences). ........................................................ 61 Coleccin Word (Words). ..................................................................... 62 OBJETOS DE ACCESS .......................................................................... 63 Objeto Application ................................................................................ 63 Coleccin Database (Databases). ........................................................ 64 Coleccin Property (Properties). .......................................................... 64 Coleccin Recordset (Recorsets). ........................................................ 65 Coleccin Field (Fields). ....................................................................... 66 Objeto DoCmd. ..................................................................................... 67 COMUNICACIN ENTRE APLICACIONES ........................................... 68 Apertura De Aplicaciones ..................................................................... 69 Utilizacin de Aplicaciones ya Existentes ............................................. 70 Finalizacin de una Aplicacin ............................................................. 70 Utilizacin de los Objetos de una Aplicacin ........................................ 70 Comunicacin con Access ................................................................... 71
MACROS
Antes de entrar en la programacin de Office, conviene estudiar un aspecto ntimamente relacionado con lo anterior: se trata de la utilizacin de macros. Una macro es un conjunto de acciones que estn reunidas y automatizadas, de modo que se ejecutan como una nica accin. Realmente, se trata de un programa en Visual Basic que realiza de forma automtica una serie de operaciones a menudo repetitivas y rutinarias. Tanto Excel como Word proporcionan un sencillo mtodo de creacin de macros: se trata de la grabadora de macros. Sin embargo, sta no aparece en Access, sino que en su lugar disponemos en esta aplicacin de un editor de macros con unas acciones ya predefinidas.
2. A continuacin, se observar que la opcin del men Herramientas-Macro-Grabar nueva macro ha sido sustituida por Herramientas-Macro-Detener grabacin. Esto nos indica que la mayora de las acciones que realicemos a continuacin, hasta seleccionar dicha opcin de la barra de mens, pasarn a formar parte de la macro
que est siendo grabada. Del mismo modo, aparecer en la pantalla el botn Detener grabacin.
3. Una vez efectuadas todas las acciones que deseamos formen parte de la macro, pulsaremos el botn Detener grabacin o la opcin correspondiente de la barra de mens.
2. Se podr ejecutar la macro por completo (Ejecutar) o bien descomponindola en las diferentes acciones que la forman (Paso a paso).
Ventana Inmediato
Ventana UserForm
Veamos a continuacin la utilidad de cada una de las ventanas o cuadros que se observan:
Explorador de proyectos. Esta ventana muestra una lista jerrquica de los proyectos y todos los elementos contenidos en los mismos y a los que hace referencia cada uno de ellos. Cada documento, libro o base de datos que se abra en Word, Excel o Access, respectivamente, lleva asociado un proyecto de VBA. Un proyecto de VBA puede estar formado por un nmero arbitrario de mdulos de cdigo o UserForms.
Examinador de objetos. Representa algo similar a un mapa para recorrer los objetos, mtodos, propiedades y eventos relacionados con un control ActiveX o una aplicacin
(Word, Excel o Access). Mediante el Examinador de objetos, la forma de programar un objeto determinado se simplifica.
Mdulo de cdigo. En esta ventana se escribe el cdigo en Visual Basic que posteriormente se ejecutar. Hay tres tipos de mdulos de cdigo: estndar, clase y formulario, cada uno de los cuales posee un cometido especfico. Estos mdulos tienen la misin de agrupar mdulos de cdigo con una funcin comn.
Ventana UserForm. Esta ventana contiene un UserForm (Formulario del usuario), con el cual se pueden crear cuadros de dilogo personalizados para su uso en los programas de VBA. Mediante un UserForm y los controles ActiveX del cuadro de herramientas se podr construir cualquier cuadro de dilogo personalizado, adaptado a las necesidades del programa.
Cuadro de herramientas. En l encontramos una serie de controles ActiveX , de modo que podemos seleccionarlos y arrastrarlos hacia el UserForm (al igual que se haca con la caja de herramientas sobre un formulario de Access).
Ventana Inmediato. En ella, podremos introducir y ejecutar una lnea de cdigo en Visual Basic, y ver de inmediato el resultado que se obtendra. Por tanto, se utilizar a la hora de depurar cdigo de Visual Basic. Otras ventanas que podemos hacer aparecer en el entorno de programacin, y que sirven para realizar la depuracin del cdigo, son:
Ventana Inspeccin. Se puede seleccionar una variable de un mdulo de cdigo y arrastrarla a la ventana Inspeccin, de modo que cada vez que vare el valor de dicha variable durante la ejecucin del cdigo, el nuevo valor aparecer de forma automtica en esta ventana. Por tanto, nuevamente se utilizar a la hora de la depuracin del cdigo.
Locales. Su funcionamiento es similar al de la ventana Inmediato, con la diferencia de que no es necesario aadir las variables a inspeccionar, sino que, de forma predeterminada, aparecen automticamente los valores de todas las variables declaradas en el procedimiento actual.
Ventana Propiedades. Muestra las propiedades de un control ActiveX, de un UserForm o de un Mdulo de cdigo. Las propiedades pueden aparecer ordenadas de dos formas distintas: Alfabticamente.
Por categoras.
Lista de Propiedadesess
Valores correspondientes
Hay que sealar que, como se ha mencionado antes, el entorno de programacin para Access presenta algunas diferencias, puesto que nicamente incluye las ventanas de Mdulo de cdigo, Examinador de objetos y Depuracin (sta ltima engloba las ventanas Inspeccin y Locales).
2.3.3. UTILIZACIN DEL EDITOR DE MACROS DE ACCESS. El proceso para crear macros en Access difiere bastante al que se sigue en Word o Excel. Se seguirn los siguientes pasos: 1. Desde la ventana de la base de datos, seleccionamos la ficha Macros.
Modificar
Nombre de la macro
Accin de la macro
3. Aparecer el Editor de macros, con este aspecto y componentes Nombre de la macro. Si reunimos varias acciones en una sola, podemos asociar a cada una de ellas un nombre representativo. Condicin de ejecucin. Se puede especificar un criterio, de modo que la accin se ejecutar nicamente si ste se cumple. Por defecto, el criterio es Verdadero, lo cual significa que la accin siempre se ejecutar al poner en marcha la macro. Accin. En este apartado, se ha de especificar la accin que se ha de realizar sobre la base de datos, eligiendo la que se desee de una lista desplegable que podemos visualizar, siendo las ms usuales las siguientes:
AbrirConsulta : abre una sonsulta de seleccin o de referencias cruzadas, o bien ejecuta una consulta de acciones. La consulta puede abrirse en el modo Diseo, Hoja de datos o Presentacin preliminar (para ver cmo resultara al imprimir).
AbrirFormulario : abre un formulario en el modo Formulario, Diseo, Hoja de datos o Presentacin preliminar.
AbrirInforme : abre un informe en el modo Diseo, Presentacin preliminar, o bien lo imprime directamente.
AbrirTabla : abre una tabla en el modo Diseo, Hoja de datos o Presentacin preliminar.
AplicarFiltro
importantes.
BuscarRegistro : busca el primer registro que coincide con el criterio especificado; la bsqueda se puede realizar en el formulario o en la hoja de datos activa (tabla o consulta).
BuscarSiguiente : busca el siguiente registro que coincide con los criterios especificados en la accin BuscarRegistro ms reciente o en el cuadro de dilogo Buscar.
Cerrar.
Cierra la ventana especificada o la ventana activa en caso de no ninguna. Si el objeto que hay en la ventana
especificar
EstablecerValor
consulta, etc.) , en caso de no especificar ninguno, en la base de datos en que fue creado.
IrARegistro
SeleccionarObjeto
accin.
Argumentos de accin. Dependiendo de la accin seleccionada, habr que
especificar unos determinados argumentos o parmetros para la ejecucin de la misma. Por ejemplo, para la accin AbrirTabla, debemos indicar aspectos como el nombre de la tabla a abrir y el modo de apertura (Diseo, Hoja de datos, etc.)
Cuadro de informacin. Muestra un breve comentario sobre la accin seleccionada,
concibe como el conjunto de relaciones entre los distintos objetos; adems, cada objeto puede estar compuesto de otros objetos (subobjetos).
Clase. Conjunto de objetos distintos del mismo tipo. Estado. Caractersticas o propiedades de un objeto en un momento dado. Comportamiento : Operaciones realizables por el objeto.
Por ejemplo, podramos tener un objeto Ascensor, el cual estara formado por los subobjetos Puerta automtica, Cabina, Botn de alarma, Botn de parada, Botn a la planta 1, Botn a la planta 2, etc. En cuanto a su estado, podramos tener las propiedades Ocupado (con los valores S o No), Tipo de movimiento (Subiendo, Bajando, Ninguno), etc. Respecto a su comportamiento, podramos tener las operaciones Subir, Bajar, Detenerse, Abrir puerta automtica, etc. Por otro lado, se puede observar que los subobjetos Botn de parada, Botn a la planta 1, Botn a la planta 2, etc., formaran parte de una clase llamada Botones, ya que cada uno es un objeto distinto pero todos pertenecen a un mismo tipo de objeto.
prcticamente todo puede concebirse como objeto (botones, tablas, consultas, documentos, hojas de clculo, etc.).
Colecciones. Objetos distintos que son del mismo tipo. Siempre aparecen en
plural (Worksheets, Shapes, Workbooks, etc.), y equivaldran a lo que hemos llamado Clases. Por ejemplo, Worksheets y Workbooks representan, respectivamente, la coleccin o conjunto de hojas de clculo abiertas y de libros abiertos en Excel, Documents representa la coleccin de documentos abiertos en Word, etc.
Miembros. Conjunto formado por el estado y el comportamiento que se puede
aplicar a un objeto concreto. Dentro de este apartado, podemos diferenciar dos conceptos:
Mtodos. Acciones que pueden realizarse sobre o con un objeto (abrir, cerrar, eliminar, etc.)
Eventos. Sucesos que tienen lugar en un momento dado, ante los cuales puede responder un objeto (pulsar tecla, pulsar botn derecho del ratn, etc.). Por defecto, ante un evento un determinado objeto no proporciona ninguna respuesta, cuya configuracin queda en manos del usuario.
Se ha indicado anteriormente que prcticamente todos los objetos pueden subdividirse en otros objetos menores (subobjetos). Esto significa que tendremos un cierto orden o jerarqua de objetos, de modo que un objeto de un primer nivel podra dividirse en objetos que lo forman en el siguiente nivel. Siguiendo el ejemplo del objeto Ascensor, tendramos este diagrama jerrquico:
Cabina Puerta
Botones (clase)
Ascensor
Botn a planta 1
Botn a planta 2
Botn parada
Centrndonos en Office, encontramos una serie de niveles jerrquicos, de modo que en un nivel superior, tendramos el objeto aplicacin ( Application). Esto significa que el objeto mayor al cual podemos hacer referencia es la propia aplicacin con la que estemos trabajando (Excel, Access o Word). A continuacin, se muestra una posible primera jerarqua de las aplicaciones Excel y Word. En la aplicacin Excel, podemos tener varios libros abiertos, y cada uno de ellos puede tener un cierto nmero de hojas de clculo. En cuanto a la aplicacin Word, pueden existir en un momento dado una cierta cantidad de documentos abiertos, cada uno de los cuales est formado por diferentes secciones (fragmentos de un documento independientes entre s).
3 Excel
2 Word
Application
Application
Documents Workbooks
Worksheets
Sections
Ya se ha comentado brevemente que una de las ventanas del Editor de Visual Basic es el Examinador de objetos; se trata de un mapa o manual de instrucciones donde se puede buscar iinformacin referente a un objeto de Office. Panel A continuacin, se muestran y explican los distintos de componentes que lo forman. detalles
Lista desplegable Proyecto-Biblioteca. Disponemos de una Biblioteca de
Objetos, que no es ms que un archivo con informacin sobre objetos, propiedades, mtodos y enumeraciones. Hay bibliotecas referentes a Excel, a Access, etc. Seleccionaremos la biblioteca donde buscar (por defecto, la bsqueda se realiza en <Todas>).
Texto de bsqueda. En este cuadro, introduciremos la expresin sobre la cual
un texto de bsqueda, una lista de bibliotecas menores, clases o miembros que cumplen el criterio de bsqueda. Los resultados se dividen en tres apartados.
Biblioteca. Clase.
Clase sobre la que se ha encontrado informacin. Miembro que cumple el criterio de bsqueda especificado.
Miembro.
determinada.
Lista de miembros. Aparece una lista con las Propiedades, mtodos y
enumeraciones que admite el elemento seleccionado de la lista Clases. Detalles. Se nos muestra informacin detallada sobre el miembro seleccionado de la Lista de miembros. En el apartado Lista de miembros hemos nombrado un concepto que conviene explicar antes de pasar a la escritura de programas en Visual Basic. Se trata de las enumeraciones. Una enumeracin es una lista finita de constantes enteras exclusivas, con un valor dentro de un rango predeterminado por Office. Esas constantes sirven para definir las propiedades de los objetos, sin tener que recordar los valores concretos. Por ejemplo, el tipo de letra negrita podra estar indicado por Word, como la constante de enumeracin wdBold, que correspondera a un cierto valor entero que no hemos de recordar. De este modo podramos poner un prrafo del documento en negrita escribiendo: Document.Section.font = wdBold
Las constantes de enumeracin comienza con distintos prefijos dependiendo de la aplicacin para la cual sean tiles. As, en Word comienzan por wd, mientras que en Access comienzan por ac y en Excel por xl. Las constantes generales de Visual Basic comienzan por vb, y las que pueden ser utilizadas en cualquier aplicacin de Office, por mso.
5 EL MDULO DE CDIGO
En la ventana de Mdulo de cdigo escribiremos los programas o mdulos necesarios. Estos mdulos podrn ser de dos tipos: Sub : procedimiento o rutina que no devuelve ningn valor; las lneas de cdigo que incluye realizan alguna accin, pero no devuelven o retornan ningn valor; el cdigo de un Sub va incluido entre estas dos lneas: Sub ... End Sub Function : a diferencia de los mdulos Sub, las funciones realizan un cierto clculo y retornan o devuelven un valor que puede ser utilizado en otros mdulos; el cdigo de una funcin est incluido entre estas dos lneas: Function
... EndFunction En el Mdulo de Cdigo, indicaremos, en la parte superior, con que objeto vamos a trabajar y cul va a ser el procedimiento o evento a definir. En el rea de
trabajo de la ventana, escribiremos las lneas de cdigo que definirn el procedimiento. Para hacer que las distintas ventanas del Editor de VBA aparezcan o desaparezcan, tenemos el men Ver.
punto, aparecer una lista con los miembros que podemos aplicar al objeto.
mtodo; entendiendo que cada mtodo es una funcin con una serie de argumentos o parmetros, tras escribir el nombre del mismo y pulsar la barra espaciadora, aparecer la lista de sus argumentos (los argumentos opcionales aparecen entre corchetes: [ ] ).
Sugerencia de datos automtica. Como se ver a continuacin, en VBA se
de ellos se le ha de asignar un tipo de dato; no es necesario memorizarlos, sino que, cuando sea necesario declarar una variable o constante, aparecer una lista con los tipos de datos disponibles en VBA.
6 TIPOS DE DATOS
Los mdulos de cdigo constan, fundamentalmente, de tres partes:
Declaraciones de constantes. Una constante es internamente una zona de
memoria donde el ordenador almacena de forma fija un dato, mientras dure la ejecucin del mdulo o programa que la contiene.
Declaraciones de variables. Una variable es, internamente, una zona
dememoria para el almacenamiento temporal de datos que se utilizan en los programas. Instrucciones. Realizan las acciones propiamente dichas. Respecto a las constantes y variables, stas han de poseer un determinado tipo, es decir, cada una puede almacenar datos que se encuentran en determinados intervalos de valores. Los tipos de datos ms usuales en VBAy los intervalos de valores correspondientes se muestran en esta tabla:
Tipo de Datos ms usuales Byte Integer (Entero) Long (Entero largo) Single (Real en coma flotante de precisin sencilla)
Intervalo de valores 0 a 255 -32.768 a 32.767 -2109 a 2109 Negativos: -3,41038 a -1,410-45 Positivos: 1,410-45 a 3,41038
Si no se declara una variable o constante, se supone que es de tipo Variant, lo cual conlleva una serie de inconvenientes: Se puede llegar a desaprovechar mucha memoria para datos sencillos (enteros, byte ...). Mientras que una variable de tipo byte utiliza slo 8 celdillas de memoria, una variable variant utiliza 128 celdillas. La ejecucin de los programas es ms lenta, pues no se sabe de antemano el dato que contendr una variable.
declaracin. Consiste en utilizar la variable directamente, sin indicar su tipo. Por tanto, al no indicar un tipo concreto, se supone tipo Variant.
Ejemplos:
Declaracin explcita. Se indica la existencia de una variable antes de su uso, indicando adems el tipo de datos que posee. Utilizaremos para ello las palab Dim y As. Si no se indica ningn tipo de datos, se supone que la variable es de tipo Variant.
Ejemplos: Dim vUnaVariable Dim sgNotaMedia As Single Dim sTexto As String Dim vMalaVariable As Variant
El tipo Variant ser til cuando no sepamos de antemano qu es lo que se va a almacenar en la variable. Por ejemplo, si esperamos que el usuario escriba el valor de una variable sin saber si va a ser un texto o un nmero, podremos utilizar este tipo de datos con ventaja.
El nombre ha de comenzar por un carcter alfabtico. No puede tener ms de 255 caracteres. No puede contener operadores matemticos ni signos de puntuacin. No puede corresponder a una palabra clave.
Recomendable: Se pueden utilizar prefijos para recordar fcilmente el tipo de datos de las variables.
Boolean: Byte:
sg :v o
String : st i d
by
Integer: Double:
Long:
Ejemplos: Const vUnaVariable As Variant = 6.5 Const sCiudad As String = Santa Cruz de Tenerife Const vNumeroPi = 3.141592
En la siguiente figura se pueden observar ejemplos de declaraciones en los distintos niveles. Al igual que exista, a la hora de poner nombres a las variables, la recomendacin de utilizar un prefijo para identificar en cualquier momento el tipo de datos de las mismas, tambin resulta recomendable anteponer nuevos prefijos a los anteriores, con el fin de saber en todo instante cul es el mbito de cada una de las variables o constantes. Estos prefijos, como se puede observar en la figura anterior, son: Para las variables locales: ninguno. Para las variables del Nivel de mdulo : m_ Para las variables del Nivel Pblico (globales) : g_
En ocasiones, sin embargo, es necesario modificar el orden de ejecucin descrito con anterioridad, es decir, se ha de modificar el orden de ejecucin de las instrucciones. De este modo, hay dos tipos principales de sentencias de control del orden de ejecucin: De seleccin (condicionales). De repeticin (bucles).
A continuacin, describiremos las estructuras de seleccin ms usuales en VBA, incluyendo algn ejemplo ilustrativo. Estructura If-Then-EndIf (Si-Entonces-Fin Si) Utilizando esta estructura, si se cumple la condicin indicada tras la palabra If se ejecutar el conjunto de acciones que aparezca antes de la palabra EndId. Veamos un ejemplo:
Condicin
vEntrada = InputBox (Escribe un nmero mayor que 10) If vEntrada < 10 Then MsgBox Error: Has escrito un nmero menor que 10 EndIf
Accin
Estructura If-Then-Else-EndIf (Si-Entonces-Si No-Fin Si) Si se cumple la condicin especificada tras If, se realiza la serie de acciones comprendidas antes de Else. En caso contrario, es decir si no se cumple, se realiza la serie de acciones comprendidas entre Else y EndIf. He aqu un ejemplo: Sub Condicion2() Dim vEntrada As Variant
Condicin
vEntrada = InputBox (Escribe un nmero mayor que 10) If vEntrada < 10 Then MsgBox Error: Has escrito un nmero menor que 10 Else
Accin si la condicin es cierta
End Sub Estructura If-Then-ElseIf-EndIf (Si-Entonces-Si No, Si-Fin Si) Esta estructura nos permite evaluar ms de una condicin dentro de un mismo bloque de seleccin. Cada instruccin ElseIf (podemos tener tantos como necesitemos) representa una nueva condicin. Tambin se puede incluir como ltima condicin la palabra Else que, de nuevo, indicar lo que se ha de hacer en caso de que la ltima condicin que se indique sea falsa. Observmoslo en el siguiente ejemplo: Sub Condicion3() Dim vEntrada As Variant
1 Condicin
vEntrada = InputBox (Escribe un nmero mayor que 10) If vEntrada < 10 Then
Accin si la 1 condicin es cierta
MsgBox Error: Has escrito un nmero menor que 10 ElseIf vEntrada = 10 Then
2 Condicin
Else MsgBox El nmero escrito ha sido: & vEntrada EndIf End Sub
Accin si las condiciones 1 y 2 son falsas
Estructura Select Case-Case Is-End Select (Seleccionar Caso) Esta estructura es mucho ms flexible que las anteriores. Permite mltiples selecciones, incluso entre una serie de valores no exclusivas. Cada instruccin Case representa una posible condicin, mientras que con CaseElse se indica la accin a realizar si se da cualquier otro caso distinto de los indicados con anterioridad. El siguiente ejemplo ilustra de forma bastante clara la forma de utilizar esta estructura: Sub SeleccionarCadaCaso() Dim iEntrada As Integer iEntrada = InputBox(Pon tu dato) Select Case iEntrada Case 1, 3, 5, 7, 9 Case 9, 10 Seleccionar la expresin a evaluar Primer caso evaluado
Accin si se cumple el primer caso
MsgBox Es un impar menor que 10 MsgBox Es el nmero 9 el 10 Case Is > 10 MsgBox Es un nmero mayor que 10 CaseElse MsgBox Qu nmero tan extrao...! End Select
Accin si no se cumple ninguno de los casos anteriores
End Sub
Estructura Do-Loop-Until (Hacer-Volver a iniciar bucle-Hasta) Con esta estructura hacemos que se ejecuten las instrucciones incluidas entre Do y Loop hasta que se cumpla una cierta condicin indicada tras la palabra Until. He aqu un ejemplo ilustrativo: Sub Bucle1() Dim iNumero As Integer Do iNumero = InputBox (Escribe un nmero; 1 para acabar) MsgBox Has escrito el nmero & iNumero Loop Until iNumero = 1 End Sub
Fin del bucle Condicin de terminacin Principio del bucle
Estructura Do-Loop-While (Hacer-Volver a iniciar bucle-Mientras) Utilizando esta estructura, se ejecutan las instrucciones incluidas entre Do y Loop mientras se cumpla una cierta condicin indicada tras la palabra While. La condicin ya no es de terminacin del bucle, sino de continuacin en el mismo. En el siguiente ejemplo podemos observarlo: Sub Bucle2() Dim iNumero As Integer Do
Principio del bucle
iNumero = InputBox (Escribe un nmero; 1 para acabar) MsgBox Has escrito el nmero & iNumero Loop While iNumero <>1 End Sub
Fin del bucle Condicin de continuacin
Estructura While-Wend (Mientras-FinMientras) Se trata de una estructura muy parecida al bucle Do-Loop-While. La diferencia radica en que la condicin de continuacin en el bucle se evala al principio del mismo. Por tanto, tambin difieren en el nmero mnimo de iteraciones que se van a realizar. Veamos el siguiente ejemplo: Sub Bucle3() Dim iNumero As Integer While iNumero <> 1
Principio del bucle y condicin
iNumero = InputBox (Escribe un nmero; 1 para acabar) MsgBox Has escrito el nmero & iNumero Wend
Fin del bucle
End Sub
Estructura For-Next (Para-Siguiente) Representa la instruccin de repeticin ms potente y flexible. Con ella, se consigue repetir las acciones incluidas entre las palabras For y Next. Se incluir en esta estructura una variable de tipo Integer que se va incrementando de forma automtica; dicha variable tendr un valor inicial y otro final; en la primera iteracin, la variable toma el valor inicial, mientras que en las siguientes, se incrementa, automticamente como ya se ha indicado, el valor de dicha variable. Los incrementos pueden ser negativos o superiores a la unidad (para indicarlo, se utilizar la palabra reservada Step); en la ltima iteracin, la variable toma el valor final. Sub BucleFor()
Principio del bucle Variable de bucle y su valor inicial Valor final
Hemos de aadir algunas observaciones con respecto a las distintas estructuras de repeticion explicadas anteriormente: En ciertos casos, puede resultar til, desde el mismo interior de un bucle, indicar una condicin prematura de terminacin; esto se realiza utilizando la instrucciones Exit Do (para los bucles Do-Loop) o Exit For (para los bucles ForNext).
Los bucles Do-Loop pueden incluir las condiciones Until o While tras la palabra Do, y no tras Loop. En ese caso, la condicin se evala por primera vez antes de entrar en el bucle (en el caso de Loop While, el funcionamiento sera, por tanto, anlogo al bucle While-Wend).
En ocasiones, la variable entera que se utiliza en un bucle For-Next puede ser sustituida por otra expresin ms compleja. Esto se utiliza normalmente para recorrer los distintos objetos que forman parte de otro objeto mayor o de una coleccin. Para obtener este funcionamiento, se han de utilizar las palabras reservadas For Each-In (Para cada-en). Observemos este ejemplo: Sub ParrafosDeWord() Dim oParrafoWord As Object For Each oParrafoWord In ActiveDocument.Range.Paragraphs MsgBox oParrafoWord Next oParrafoWord End Sub
Para eliminar el punto de interrupcin colocado en una lnea, podemos escoger alguno de los pasos siguientes: Pulsar F9 tras poner el cursor en la lnea marcada. Picar en Depuracin-Alternar punto de interrupcin tras poner el cursor en la lnea marcada. Pulsar en el punto de insercin que ha aparecido en la barra izquierda junto a la lnea. Pulsar en Depuracin-Borrar todos los puntos de interrupcin; esto eliminar cualquier punto de insercin del cdigo.
A partir de ese momento, podremos realizar distintas acciones: inspeccionar los valores de las variables seguir el curso del programa paso a paso (es decir, lnea a lnea) mediante F8; la lnea que se vaya a ejecutar en cada momento aparecer sealada por la flecha de la izquierda seguir con la ejecucin normal del programa mediante F5 detener la ejecucin del programa mediante Ejecutar-Restablecer o el botn correspondiente de la barra de herramientas
El funcionamiento del cuadro es el siguiente: al colocar el puntero de ratn sobre alguna variable o propiedad, aparece en un pequeo recuadro su valor en el momento actual, es decir, en el instante en que la ejecucin est detenida. Vemoslo en la figura siguiente:
7.1.5. AADIR VARIABLES A LA VENTANA INSPECCIN En la ventana Inspeccin, de la cual ya se habl anteriormente, se pueden estudiar variables; el valor de cada variable que aparezca en esta ventana se actualizar automticamente, segn avance la ejecucin del programa (para activar o desactivar esta ventana, podemos seleccionar Ver-Ventana Inspeccin). Para aadir una variable que se desea estudiar en la ventana Inspeccin, realizaremos esta secuencia de operaciones: picar dos veces sobre la variable, o bien seleccionarla arrastrando con el ratn arrastrar la variable seleccionada a la ventana Inspeccin (o picar en Depuracin-Agregar Inspeccin).
Al realizar estas operaciones, por ejemplo, sobre la variable iCuantasPalabras, podramos obtener algo semejante a la siguiente figura:
Se observa que existen cuatro columnas o campos en la ventana Inspeccin, de modo que el significado de cada uno de ellos es el siguiente: Expresin. Variable o combinacin de las mismas que se desea inspeccionar. Valor. Valor de Expresin en el momento actual; en ocasiones, tendremos como valor <Fuera de contexto> (es decir, variable no utilizada). Tipo. Tipo de datos de la variable o expresin; en ocasiones, tendremos el valor Empty (es decir, variable no declarada).
Contexto. mbito de las variables; normalmente, se mostrar el Mdulo y Procedimiento donde se ha declarado la variable.
7.1.6. UTILIZACIN DE LA VENTANA LOCALES PARA LA DEPURACIN La estructura y el contenido de la ventana Locales son muy similares a los de la ventana Inspeccin (para activar la ventana Locales, seleccionaremos VerVentana Locales). Sin embargo, existen algunas diferencias notables: no aparece la columna Contexto, que s tenamos en la ventana Inspeccin aparecen los valores de todas las variables del procedimiento actual, y no slo de las que se explcitamente se indiquen habr que ejecutar el procedimiento para observar las variables, es decir, antes de la ejecucin no aparece ninguna de ellas
El aspecto de la ventana Inspeccin, en un momento dado, podra ser el que se muestra e la figura siguiente; el signo + indica que al pulsarlo se pueden ver los valores de todas las variables o propiedades contenidas en el objeto que aparece a su derecha.
7.1.7. UTILIZACIN DE LA VENTANA INMEDIATO PARA LA DEPURACIN La ventana Inmediato tiene dos usos principales: imprimir el valor de una expresin, constante o variable determinada; para ello, se escribir la instruccin Debug.Print , seguida de la variable a imprimir, en la ventana del Mdulo de cdigo.
2.2 Argumento
Sub EscribirResultado(ByVal sgArgumentoArea As Single) 9.1.1.1.1.1.1 MsgBox "El rea de la circunferencia es " & sgArgumentoArea 9.1.1.1.1.1.2 End Sub
Sub ProcedimientoPrincipal() Dim sgRadio As Single Dim sgArea As Single sgRadio = InputBox("Escribe el radio de la circunferencia") sgArea = sgAreaCircunferencia(sgRadio) EscribirResultado (sgArea) 9.1.1.1.1.2 End Sub
Llamada al procedimiento EscribirResultado()
Llamada a la funcin sgAreaCircunferencia() y asignacin a la variable sgArea
10 OBJETOS DE EXCEL
Podemos ver a continuacin un resumen de la jerarqua de los objetos ms importantes de los que disponemos en Excel. Por supuesto, hay muchos otros, pero, adems de resultar prcticamente imposible dominarlos todos, conviene utilizar nicamente ciertos objetos que nos proporcionan toda la funcionalidad que necesitamos a la hora de escribir nuestros
Application
mdulos VBA.
Workbook
Window
Document Property
9.2. COLECCIN WINDOW (WINDOWS). Esta coleccin de objetos representa todas las ventanas que hay abiertas en un momento dado en Excel. Observemos algunos ejemplos:
9.3. COLECCIN WORKBOOK (WORKBOOKS) Esta coleccin representa el conjunto de libros abiertos en un momento dado en Excel. Veamos algunos mtodos tiles relacionados con estos objetos:
Sub AbrirLibro()
Activate. Activa el libro que se le indique de los que estn abiertos; la especificacin del libro se podr hacer por su nombre o por su ndice de orden de apertura (antigedad). Veamos algunos ejemplos:
Add. Crea un libro nuevo en la aplicacin, en principio sin nombre. Veamos un ejemplo:
Sub AadirGuardar() Dim oMiLibro As Object Set oMiLibro=WorkBooks.Add oMiLibro.ActiveSheet.Range(A1:A100).Value = =rand()*20 oMiLibro.SaveAs filename:=C:\Pruebas\Aleatorios.xls
End Sub
Close. Cierra un libro, con opcin a guardar los cambios. Obsrvese el ejemplo:
Sub CerrarLibroGuardar() Dim oMilibro As Object Set oMilibro = Workbooks.Open (FileName:=C:\AIA\Notas.xls) oMiLibro.ActiveSheet.Range(L3).Value=9.5 oMiLibro.Close savechanges := True End Sub
Existen dos mtodos relacionados con la apertura y cierre de libros; estos mtodos son Application.GetOpenFilename y Application.GetSaveAsFilename. Se pueden utilizar en cualquier aplicacin de Office. Abren los cuadros de dilogo de Abrir y Guardar como, respectivamente, pero no realizan tales acciones, sino que devuelven una cadena de caracteres, con el nombre indicado por el usuario, la cual ha de usarse con el mtodo Save.
Existe una diferencia obvia entre el objeto Workbook y el pseudoobjeto ActiveWorkbook, y es que mientras que se pueden tener varios objetos Workbook en un momento dado en Excel, slo tendremos un objeto ActiveWorkbook.
End Sub
Cells. Permite hacer referencia a una celda concreta de la hoja, como se observa en el ejemplo:
UsedRange. Nos permite hacer referencia al conjunto de celdas no vacas que existen en la hoja de clculo, es decir, el rea rectangular de la hoja de clculo que engloba a todas y cada una de las celdas en las cuales existe algn valor. Observemos este ejemplo, en el que suponemos que la hoja de clculo Hoja3 slo contiene estos valores, y cuyo resultado sera 6.3. A 1 2 3 4 3.5 2 2.9 7.25 6.3 B C
End Sub
Activate. Activa la celda que se le indique, mediante dos formas distintas de parametrizacin, segn vemos en estos ejemplos:
Add. Permite aadir una nueva hoja de clculo a un libro, justo delante de la hoja activa.
Printout. Imprime una hoja de clculo, como se puede observar en este ejemplo: Sub AadirHoja() Workbooks(NotasAIA).Activate ActiveWorkbook.Worksheets(Hoja1).Printout End Sub
Copy. Crea un libro nuevo y copia en l la hoja indicada; el nuevo libro slo contendr esa hoja. Sub CopiarHoja() Workbooks(NotasAIA).Activate ActiveWorkbook.Worksheets(Hoja1).Copy
End Sub
Sub PonerUnValor() Dim NuevaHoja As Object Set NuevaHoja=Worksheets.Add NuevaHoja.Range(C3).Value = 6 End Sub
Cells. Hace referencia a una celda concreta dentro del rango, indicando la fila y la columna. El siguiente ejemplo asigna el valor 1 a la celda C5 de la hoja Hoja3 del libro activo.
CurrentRegion. Hace referencia a un conjunto de celdas limitado por celdas vacas o los bordes de la hoja. Obsrvese la diferencia con el mtodo UsedRange del objeto Worksheet. En general, el mtodo CurrentRegion no englobar todas las celdas no vacas, salvo en el caso en que entre ellas no haya ninguna fila o columna vaca. Veamos a continuacin dos ejemplos de utilizacin de este mtodo; en el segundo de ellos, contamos los nmeros negativos que existen en la columna A, sin saber en qu fila hemos de acabar de inspeccionar.
Sub ContarNegativos() Dim oCelda As Object Dim iNegativo As Integer For Each oCelda InWorksheets(2).Range("A1").CurrentRegion If oCelda.Value < 0 Then iNegativo = iNegativo + 1 End If Next MsgBox El total de negativos es & iNegativo End Sub
Columns. Hace referencia a una columna de un rango. El siguiente ejemplo modifica el contenido de todas las celdas de la columna C que pertenecen al rango.
Rows. Hace referencia a una determinada fila de un rango. El siguiente ejemplo modifica el contenido de todas las celdas de las filas 4 y 5 que pertenecen al rango.
Offset. Representa un desplazamiento de fila y columna respecto a una celda. Observmoslo en este ejemplo, que asigna distintos textos a las celdas de la columna B, dependiendo del valor de la celda contigua de la columna A.
Sub ExamenDeColumna() Dim oCelda As Object For each oCelda In Worksheets(1).Range(A1:A30).Cells If IsNumeric(oCelda.Value) Then oCelda.Offset(0,1).Value = Nmero Else oCelda.Offset(0,1).Value = Quiz sea un texto... End If Next
End Sub
Sub PropiedadesDeLibro() OProp As Object For Each oProp In ActiveWorkbook.BuiltinDocumentProperties MsgBox oProp.Name & = & oProp.Value Next End Sub Sub PonerValor() Dim sNombre As String sNombre=InputBox(Escribe el nombre del autor del libro) ActiveWorkbook.BuiltinDocumentProperties("Author") = sNombre EndSub
La coleccin de objetos Shape representa las formas u objetos de dibujo/grficos. Observemos un primer ejemplo sencillo: Sub ContarGraficos() MsgBox ActiveWorkbook.Worksheets(1).Shapes.Count End Sub
Name. Cada grfico o forma posee un nombre. Por defecto, ser el tipo de forma y el ndice de creacin en orden creciente. El siguiente ejemplo cambia el nombre de un objeto de dibujo, que se trata de una lnea y fue el segundo objeto grfico que se cre en la hoja. Sub CambiarNombre() Workbooks(1).Worksheets(2).Shapes(Line 2).Name=Linea End Sub
AddShape. Aade una forma grfica a la hoja de clculo. Habr que indicar el tipo de forma y sus caractersticas, como se puede observar en estos ejemplos:
AddLine. Aade una lnea en la hoja, indicando los puntos inicial y final.
Height. Hace referencia a la altura de la forma. Width. Hace referencia al ancho de la forma.
El siguiente ejemplo modifica las dimensiones de una forma de dibujo que existe en la hoja Hoja3, llamado Rectangulo.
11 OBJETOS DE WORD
A continuacin, se observa un grfico-resumen de la jerarqua de objetos existentes en Word. Al igual que ocurra en Excel, existen muchos otros objetos, pero resultara prcticamente imposible aprenderlos todos, adems del hecho de que algunos de ellos
Application
Document
Window
Document Property
Range
Section
Paragraph
Sentence
Word
Sub MaximizarWord()
Sub AbrirDocumento() Dim oMiDoc As Object Set oMiDoc = Documents.Open (filename:=C:\Windows\Resumen.doc) End Sub
Activate. Activa el documento que se indique de los que estn abiertos en un momento dado. La forma de hacer referencia a los documentos funciona de forma parecida a como se haca con los libros en Excel, pero a la hora de referenciarlos mediante un ndice, ste es inverso respecto al orden de apertura de los documentos. Vemoslo en dos ejemplos:
Sub AadirDocumento() Dim oNuevoDocu As Object Set oNuevoDocu = Documents.Add End Sub
Sub AadirYGuardar() Dim oMiDocu As Object Set oMiDocu=Documents.Add oMiDocu.Words(1).InsertBefore text:=Primeras Palabras. oMiDocu.SaveAs filename:=C:\Alumnos\ApuntesAIA.doc End Sub
Sub CerrarDocumento()
Sub ImprimirDocumento()
Sub DocumentoActivo() If Documents.Count >0 Then MsgBox El documento activo es & ActiveDocument.Name
11.3.1.1.1 Else 11.3.1.1.2 MsgBox No hay documentos abiertos
Sub EscribirDelante() Dim oUnRango As Object Set oUnRango = ActiveDocument.Range(start:=0, end:=0) oUnRango.InsertBefore text:=Primeras Palabras End Sub
InsertAfter. Siguiendo un formato similar al mtodo anterior, inserta un texto detrs del rango.
Sub EscribirDetrsDelDecimo() Dim oRango As Object Set oRango = ActiveDocument.Range(start:=0, end:=10) oRango.InsertAfter text:=ltimas Palabras End Sub
Sub EliminarSieteCaracteres() Dim oRango As Object Set oRango = ActiveDocument.Range(start:=2, end:=9) oRango.Delete End Sub
Sub VerSustituirTexto() Dim oRango As Object, sTexto As String Set oRango = ActiveDocument.Range(start:=0, end:=11) sTexto=oRango.Text If sTexto = Viejo Texto Then oRango.Text =Nuevo Texto End If End Sub
Bold, Italic, Underline. Estas propiedades especifican el estilo de letra del texto contenido en el rango. Tambin se puede utilizar la propiedad Name del subobjeto Font para seleccionar el tipo de letra del rango, como se observa en el siguiente ejemplo:
Sub DarFormatoAlTexto() Dim oRango As Object oRango = ActiveDocument.Range(start:=10, end:=20) With oRango .Font.Name = Century Gothic .Bold= False .Italic=True .Underline = True End Sub
Sub TercerParrafo() Dim oElParrafo As Object MsgBox ActiveDocument.Paragraphs.Count Set oElParrafo = ActiveDocument.Paragraphs(3) End Sub
Alignment. Alinea el prrafo con respecto a la pgina (izquierda, derecha, centrado, justificado). Sub CentrarParrafo() 11.6.1.1 Dim oUnParrafo As Object Set oUnParrafo = ActiveDocument.Paragraphs(1) oUnParrafo.Alignment = wdAlignParagraphCenter End Sub
LineSpacing. Especifica un espaciado entre las lneas de un prrafo, medido en puntos. Adems, disponemos de los mtodos Space1, Space15, Space2 para espaciados predeterminados bastante usuales. Sub EspaciarParrafo() ActiveDocument.Paragraphs(3).LineSpacing=16 End Sub
Add. Aade un nuevo prrafo, que en principio no ser ms que un salto de lnea. Sub AadirParrafo() 11.6.1.2 Dim oParrafo As Object Set oParrafo = ActiveDocument.Paragraphs.Add o.Parrafo.Space15 End Sub
Range. Transforma el prrafo en un objeto Range. De este modo, al resultado se le podrn aplicar todos los mtodos del objeto Range. Hay que sealar que esta propiedad tambin existe para los objetos Section. Veamos un ejemplo bastante completo: Sub RangoParrafo() 11.6.1.3 Dim oParrafo As Object Set oParrafo = ActiveDocument.Paragraphs.Add With oParrafo.Range .Bold =True .Text =Este es el nuevo prrafo .InsertAfter text:= y esto va a continuacin End With End Sub
Hay que sealar que se pueden englobar varios prrafos en un rango, de modo que podremos manejarlos conjuntamente. En el siguiente ejemplo, cambiamos el estilo de letra de 3 prrafos:
Sub RangoDeTresParrafos() Dim oRango As Object, oDocu As Object Set oDocu = Documents(CartaBanco.doc)
Set oRango = oDocu.Range (start:= oDocu.Paragraphs(2).Range.Start, _ end:= oDocu.Paragraphs(4).Range.End) With oRango .Bold =True .Italic= True End With End Sub
Sub Frases() Dim oUnaFrase As Object Set oUnaFrase = ActiveDocument.Sentences(3) oUnaFrase.Font.Name = Wide Latin oUnaFrase.Italic = True oUnaFrase.InsertBefore Text:= Esta es la cuarta frase. End Sub
Como ocurra con los objetos Paragraph, se pueden englobar varias frases en un rango. El siguiente ejemplo subraya las frases segunda, tercera y cuarta.
Sub RangoFrases() Dim oRango As Object, oDocu As Object Set oDocu = Documents(2) Set oRango = oDocu.Range (start:= oDocu.Sentences(2).Start, _ end:= oDocu.Sentences(4).End) oRango.Underline =True End Sub
cambiamos la presentacin de las quince primera palabras del documento e insertamos un texto al principio del documento. Sub Mayusculas() Dim oRango As Object, oDocu As Object Set oDocu = Documents(Resumen.doc) Set oRango = oDocu.Range (Start:=oDocu.Words(1).Start, End := oDocu.Words(15).End) With oRango .Case = wdUpperCase .InsertBefore Text := Texto anterior .Italic = True EndWith End Sub
12 OBJETOS DE ACCESS
A continuacin, se muestra un resumen de la jerarqua de objetos en Access; por supuesto,
Application
existen muchos otros objetos, pero nicamente nos centraremos en los ms tiles.
Database
DoCmd
RecordSet Property
Field
CloseCurrentDatabase.
un ejemplo sencillo:
End Sub
OpenCurrentDatabase.
Sub BaseDatosActual() Dim oBdatos As Object Set oBdatos = Application.CurrentDb MsgBox La B.D. activa es & oBDatos.Name End Sub
Sub VerPropiedades() Dim oBD As Object, oPropi As Object Set oBD = Application.CurrentDB For each oPropi In oBD.Properties MsgBox Propiedad = & oPropi.Name & Valor = & oPropi.Value Next
End Sub
Sub AbrirRegistrosTablaCons() Dim oRegTabla As Object, oRegCons Set oRegTabla = CurrentDB.OpenRecordset(Equipos) Set oRegCons = CurrentDb.OpenRecordset(Consulta2) MsgBox La Tabla abierta es & oRegTabla.Name End Sub
RecordCount. Proporciona el nmero de registros que contiene el RecordSet, como se observa en el siguiente ejemplo: Sub ContarRegistros() Dim oRegistros As Object Set oRegistros =CurrentDB.OpenRecordset(Pacientes) MsgBox Nmero de pacientes = & oRegistros.RecordCount End Sub
MoveFirst, MoveLast. Buscan el primer y el ltimo registro del RecordSet, respectivamente. Por defecto, al abrir una tabla o consulta, estaremos situados en el primero. Veamos un ejemplo: Sub Registros() Dim oRegis As Object Set oRegis = CurrentDB.OpenRecordset(ConsultaPorPas) oRegis.MoveLast End Sub
MoveNext.
EOF. Indica si hemos llegado al final del Recordset, es decir, ya no existen ms registros.
End Sub
OpenTable, OpenForm, OpenReport. Abre, respectivamente, la tabla, formulario o informe que se indique y, opcionalmente, el modo de apertura (acViewPreview, acViewNormal, acViewDesign). Observemos este ejemplo, que abre cada uno de tales objetos:
Sub AbrirObjetos() Application.DoCmd.OpenTable Candidatos, acViewDesign Application.DoCmd.OpenForm FormVotantes DoCmd.OpenReport InfProyec, acViewPreview End Sub
GoToControl. Nos sita en un control (botn, campo, etc.) de una tabla, formulario o informe abierto. Obsrvese en el siguiente ejemplo:
Sub IrAControl()
FindRecord, FindNext. Busca un registro que contenga un valor especificado en el campo actual, y el siguiente registro que lo contenga, respectivamente, como se ve a continuacin: Sub Buscar() DoCmd.OpenTable Partidos DoCmd.GoToControl Tendencia DoCmd.FindRecord Centro DoCmd.FindNext End Sub
Close. Cierra un objeto que estuviese abierto; se debe indicar adems su tipo (acTable, acForm, acReport). Observemos el siguiente ejemplo:
DoCmd.Close acForm, FormVotantes DoCmd.Close acTable, Partidos, SaveYes DoCmd End Sub
Para que unas aplicaciones pueden utilizar o hacer referencia a otras, es necesario utilizar sentencias de declaracin, similares a las variables. Los tipos de datos u objetos que podemos declarar, de modo que cada uno de ellos har referencia a una aplicacin, son los siguientes: Word.Application Excel.Application Access.Application
Un detalle importante es que, si no se indica lo contrario, una aplicacin slo reconoce sus propios objetos. Para que reconozca y puede utilizar otra aplicacin
distinta y sus correspondientes objetos, debemos hacer uso de las referencias, que se han de seleccionar desde la opcin Referencias del men Herramientas del Editor de VBA. He aqu las referencias que podemos de seleccionar y el tipo de aplicacin al que corresponde cada una de ellas: MicroSoft Word 8.0 Object Library Word.Application.8 MicroSoft Excel 8.0 Object Library Excel.Application.8 MicroSoft Access 8.0 Object Library Access.Application.8
Hay que resear que la propiedad Visible nos permite hacer visible la aplicacin; por defecto, el valor que contiene es False (salvo para Access, que es True), es decir, la ventana de la aplicacin permanece invisible.
New. Esta palabra reservada abrevia la forma de creacin de una aplicacin, pues permite crearla al mismo tiempo que se declara la variable correspondiente. Veamos un ejemplo: Sub DesdeWord() Dim apliExcel As New Excel.Application apliExcel.Visible=True End Sub
Sub DesdeAccess() Dim apliWord As Object Set apliWord = GetObject ( ,Word.Application.8) End Sub
End Sub
Sub DesdeExcel() Dim apliWord As Word.Application, oDocu As Object Set apliWord = CreateObject(Word.Application.8) Set oDocu = apliWord.Documents.Open (filename:=C:\Mio.doc) MsgBox Palabras = & oDocu.Words.Count oDocu.Close apliWord.Quit End Sub
La comunicacin con Access desde Word o Excel presenta algunas salvedades. En Access, como ya se indic, no puede permanecer abierta ms de una base de datos al mismo tiempo. Esto hace que los mtodos de que se dispone en tales aplicaciones no coinciden exactamente con los de Access. Desde Word y Excel, podemos hacer uso de los mtodos OpenCurrentDatabase, que abre una base de datos indicando su nombre y ubicacin, y CloseCurrentDatabase, que cierra la base de datos que est en uso, lo cual permitir abrir otras. Vemoslos en un ejemplo:
Sub DesdeWord() Dim apliAccess As New Access.Application apliAccess.OpenCurrentDatabase C:\AIA\encuesta.mdb apliAccess.DoCmd.OpenTable Votantes apliAccess.DoCmd.Close acTable,Votantes apliAccess.CloseCurrentDatabase apliAccess.Quit End Sub
FOR ... NEXT, pero cuando desconocemos el nmero de veces que se ha de repetir el bucle debemos ir a una estructura del tipo DO WHILE ... LOOP, o alguna de sus variantes. Esto es lo que vamos a ver en esta ocasin.
transforme en falsa para que no se siga repitiendo el bucle de forma indefinida. En el momento en el que la condicin es falsa el bucle ya no se ejecuta y se devuelve el control del flujo del programa a las sentencias que se encuentres debajo del Loop. Hemos diseado un ejemplo donde generamos nmeros aleatorios entre 1 y 100, y se los asignamos a la variable i. i = Int(Rnd * 100) + 1 Con la variable s vamos a sumar los valores que va tomando i. Esto es lo que se denomina un ACUMULADOR, que va aadiendo valores a la variable s. s=s+i Esta expresin no se debe interpretar como lo haramos en matemticas. En programacin el signo igual indica que lo que hay a la derecha se va a asignar a la variable que hay a la izquierda. La interpretacin correcta es que tomamos el antiguo valor de la variable s y le sumamos lo que vale i, y esa suma se asigna al nuevo valor que ahora toma la variable s. Los valores que van tomando las variables i y s se escriben en las columnas 2 y 3, que son las columnas B y C. Para que la fila vaya cambiando en el instruccin Cells(fila, columna) hemos creado una variable que precisamente se llama fila y que dentro del bucle, y al final de ste, incrementa uno. fila=fila+1 De esta forma, la filas se van incrementando de uno en uno a medida que el bucle va haciendo sus ciclos. Esto es lo que en informtica se llama CONTADOR. La condicin que hace que se repita el bucle es s<1000, lo que provoca que el bucle
se repita MIENTRAS se cumpla que s, que es el acumulado de la variable i, sea inferior a 1000.
El resultado es que disponemos de dos columnas con nmeros aleatorios. En la columna B los nmeros aleatorios son enteros entre 1 y 100, y en la columna C se encuentran sus acumulados. El ltimo nmero de la columna C ser un nmero entre 1000 y 1099, que al ser mayor o igual a 1000, har que la macro se detenga. Necesitamos borrar el rango que hemos escrito en las columnas B y C, para que al generar una nueva serie ve valores se haga sobre una zona limpia. Esto se hace con la macro Borra.
Esta estructura es similar a la anterior pero la condicin se evala al final. La consecuencia inmediata de esto es que el flujo del programa entra en el bucle directamente la primera ver que se ejecuta. Al final se evala la condicin y se decide si se repite el bucle, pero al menos se ha ejecutado una vez.
La condicin se evala y el bucle se repite hasta que se cumpla la condicin. Hemos tenido que cambiar la condicin para obtener resultados similares. Ahora la condicin es s>=1000 ya que el bucle se repite hasta que se cumpla la condicin. Tambin podramos haber puesto el comando NOT, sin necesidad de tocar la condicin. Quedara as: Loop Until Not (s < 1000)
Hoja 2
En la Hoja2 disponemos de una tabla y deseamos desplazarnos por ella hasta que encontremos una celda vaca. Sub Desplaza() Do While Not IsEmpty(ActiveCell) ActiveCell.Offset(1, 0).Activate Loop End Sub
Nos situamos en una celda que contiene datos, por ejemplo, la celda B4 y ejecutamos la macro. al finalizar la ejecucin el cursor aparecer en la primera celda vaca que encuentre en la columna B. La lnea ActiveCell.Offset(1, 0).Activate lo que hace es desplaze el cursor una celda hacia abajo respecto a su posicin actual. Como esta lnea esta dentro de un bucle se ejecutar repetidamente hasta que el flujo del programa se salga de bucle. El bucle se repite mientras la celda activa no sea una celda vaca. Esto supone, que el cursor se vaya desplazando por la columna donde se dejara inicialmente y que no pare de bajar hasta que se encuentre con una celda vaca. Este bucle es muy til para encontrar en una base de datos el final de la tabla. Para ello, debemos situar el cursor en la columna donde se encuentre el campo llave o campo clave. Esto ha de ser as ya que sabemos que al tratarse de una variable sin espacios vacos el cursor bajar hasta el final.
Prctica (Hoja 3)
Le invitamos a crear un cdigo que se desplace hacia arriba y que se site en una tabla en la cabecera de la columna donde se entrontrara inicialmente el cursor.
En la Hoja3, site el cursor en la celda B24. El objetivo es que la macro desplace el cursor de forma ascendente hasta la celda que hace el papel de cabecera de esta columna, en nuestro caso, la celda B3.