Sie sind auf Seite 1von 23

Programacin Excel VBA Nivel II Comprender objetos, propiedades, metodos y eventos

Un objeto representa un elemento de una aplicacin, como una hoja de clculo, una celda, un diagrama, un formulario o un informe. En cdigo de Visual Basic, un objeto debe identificarse antes de se pueda aplicar uno de los mtodos del objeto o cambiar el valor de una de sus propiedades. Una coleccin es un objeto que contiene varios objetos que normalmente, pero no siempre, son del mismo tipo. En Microsoft Excel, por ejemplo, el objeto Workbooks contiene todos los objetos Workbook abiertos. En Visual Basic, la coleccin Forms contiene todos los objetos Form existentes en una aplicacin. Los elementos de una coleccin se pueden identificar mediante su nmero o su nombre. Por ejemplo, en el siguiente procedimiento, Libro(1) identifica al primer objeto Workbook abierto.

Sub CierraPrimero() Libro(1).Close End Sub


El siguiente procedimiento utiliza un nombre especificado como cadena para identificar un objeto Form.

Sub CierraForm() Forms("MiForm.frm").Close End Sub


Tambin es posible operar al mismo tiempo sobre toda una coleccin de objetos siempre que los objetos compartan mtodos comunes. Por ejemplo, el siguiente procedimiento cierra todos los formularios abiertos.

Sub CierraTodos() Forms.Close End Sub


Mtodo es toda accin que puede realizar un objeto. Por ejemplo, Add es un mtodo del objeto ComboBox ya que sirve para aadir un nuevo elemento a un cuadro combinado. El siguiente procedimiento utiliza el mtodo Add para aadir un nuevo elemento a un ComboBox.

Sub AadeElemen(nuevoElemento as String) Combo1.Add nuevoElemento End Sub


Propiedad es un atributo de un objeto que define una de las caractersticas del objeto, tal como su tamao, color o localizacin en la pantalla, o un aspecto de su comportamiento, por ejemplo si est visible o activado. Para cambiar las caractersticas de un objeto, se cambia el valor de sus propiedades

Para dar valor a una propiedad, hay que colocar un punto detrs de la referencia a un objeto, despus el nombre de la propiedad y finalmente el signo igual (=) y el nuevo valor de la propiedad. Por ejemplo, el siguiente procedimiento cambia el ttulo de un formulario de Visual Basic dando un valor a la propiedad Caption.

Sub CambiaNombre(nuevoTitulo) miForm.Caption = nuevoTitulo End Sub


Hay propiedades a las que no se puede dar valor. El tema de ayuda de cada propiedad indica si es posible leer y dar valores a la propiedad (lectura/escritura), leer slo el valor de la propiedad (slo lectura) o slo dar valor a la propiedad (slo escritura). Se puede obtener informacin sobre un objeto devolviendo el valor de una de sus propiedades. El siguiente procedimiento utiliza un cuadro de dilogo para presentar el ttulo que aparece en la parte superior del formulario activo en ese momento.

Sub NombreFormEs() formNonmbre = Screen.ActiveForm.Caption MsgBox formNombre End Sub


Evento es toda accin que puede ser reconocida por un objeto, como puede ser el clic del mouse o la pulsacin de una tecla y para la que es posible escribir cdigo como respuesta. Los eventos pueden ocurrir como resultado de una accin del usuario o del cdigo de l programa, tambin pueden ser originados por el sistema.

Devolver objetos
Cada aplicacin tiene una forma de devolver los objetos que contiene. Sin embargo estos procedimientos no son siempre iguales, por ello debe consultar el tema de ayuda correspondiente al objeto o coleccin que est usando en la aplicacin para determinar la forma de devolver el objeto.

Declarar constantes
Al declarar una constante, se puede asignar a un valor un nombre que tenga algn significado apropiado. La instruccin Const se utiliza para declarar una constante y darle valor. Una constante no puede modificarse o cambiar de valor una vez que ha sido declarada. Se puede declarar una constante dentro de un procedimiento o al principio de un mdulo, en la seccin de Declarations. Las constantes a nivel de mdulo son privadas, a menos que se especifique lo contrario. Para declarar una constante pblica a nivel de mdulo, la instruccin Const debe ir precedida por la palabra clave Public. Se puede declarar explcitamente una constante como privada colocando la palabra clave Private antes de la instruccin Const para facilitar la lectura y comprensin del cdigo. Si desea ms informacin, consulte la seccin "Comprender el alcance y la visibilidad" en la Ayuda de Visual Basic. El siguiente ejemplo declara la constante Public EdadCon como un Integer y le asigna el valor 34.

Public Const EdadCon As Integer = 34


Las constantes se pueden declarar de uno de los siguientes tipos de datos: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String, o Variant. Dado que ya se conoce el valor de una constante, es muy fcil elegir el tipo de datos en la instruccin Const. Si desea ms informacin sobre tipos de datos, consulte la seccin "Tipo de datos Summary" en la Ayuda de Visual Basic. En una sola instruccin se pueden declarar varias constantes. Para especificar un tipo de datos, debe incluirse el tipo de datos para cada constante. En la siguiente instruccin se declaran como Integer y Currency a las constantes EdadCon y SalarioCon.

Const EdadCon As Integer = 34, SalarioCon As Currency = 35000

Comprender la sintaxis de Visual Basic


En la seccin de Ayuda de Visual Basic correspondiente a un mtodo, instruccin o procedimiento Function la sintaxis muestra todos los elementos necesarios para utilizar correctamente ese mtodo, instruccin o funcin. Los ejemplos siguientes explican como deben interpretarse los elementos sintcticos ms comunes. Sintaxis del mtodo Activate objeto.Activate En la sintaxis del mtodo Activate, la palabra "objeto" en cursiva es la posicin reservada para la informacin que introduce el usuario en este caso, cdigo que devuelve un objeto. Las palabras que se muestran en negrita deben escribirse exactamente tal y como se indica. Por ejemplo, el siguiente procedimiento activa la segunda ventana en el documento activo.

Sub Activar() Windows(2).Activate End Sub


Sintaxis de la funcin MsgBox MsgBox(texto[, botones] [, ttulo] [, archivoayuda, contexto]) En la sintaxis de la funcin MsgBox, las palabras en cursiva y negrita son argumentos con nombre de la funcin. Los argumentos que aparecen entre corchetes son opcionales. (No escriba los corchetes en el cdigo de Visual Basic). En el caso de la funcin MsgBox, el nico argumento que se debe incluir es el texto de la pregunta. Los argumentos para funciones y mtodos se pueden especificar en el cdigo mediante su posicin o por su nombre. Para especificar argumentos mediante su posicin, siga el orden que se indica en la sintaxis, separando los argumentos con una coma, por ejemplo:

MsgBox "Su respuesta es correcta!",0,"Cuadro de Respuesta"


Para especificar un argumento mediante su nombre basta con usar el nombre del argumento seguido de dos puntos y un signo igual (:=) y el valor del argumento. Los argumentos con nombre se pueden especificar en cualquier orden, por ejemplo:

MsgBox Title:="Cuadro de Respuesta", Prompt:="Su respuesta es correcta!"


La sintaxis de las funciones y algunos mtodos muestran los argumentos entre parntesis. Estas funciones y mtodos devuelven valores, por eso deben encerrarse los argumentos entre parntesis al asignar un valor a una variable. Si se ignora el valor de retorno o si no se pasan argumentos en forma alguna, no deben incluirse los parntesis. Los mtodos que no devuelven valores no necesitan que sus argumentos aparezcan encerrados entre parntesis. Estas normas son aplicables tanto si se usan argumentos posicionales o nominativos. En el siguiente ejemplo, el valor que devuelve la funcin MsgBox es un nmero que indica el botn seleccionado almacenado en la variable miVar. Dado que se utiliza el valor que devuelve la funcin, es preciso utilizar parntesis. Otro cuadro de mensaje presenta entonces en pantalla el valor de la variable.

Sub Pregunta() miVar = MsgBox(Prompt:="Me gusta mi trabajo.", _ Title:="Cuadro de respuesta", Buttons:="4")

MsgBox miVar End Sub


Sintaxis de la instruccin Option Option Compare {Binary | Text | Database} En la sintaxis de la instruccin Option Compare, las llaves y la lnea vertical indican una eleccin obligatoria entre tres opciones. (No escriba las llaves en la instruccin de Visual Basic). Por ejemplo, la siguiente instruccin especifica que dentro del mdulo, las cadenas se comparan en un criterio de ordenacin que no depende del maysculas o minsculas.

Option Compare Text


Sintaxis de la instruccin Dim Dim nombrevariable[([subscriptos])] [As tipo] [, nombrevariable[([subscriptos])] [As tipo]] . . . En la sintaxis de la instruccin Dim, la palabra Dim es una palabra clave exigida. El nico elemento necesario es nombrevariable (el nombre de la variable). Por ejemplo, la siguiente instruccin crea tres variables: miVar, siguienteVar y terceraVar. Estas variables se declaran automticamente como Variant.

Dim miVar, siguienteVar, terceraVar


El siguiente ejemplo declara una variable como String. Al incluir un tipo de datos se ahorra memoria y se pueden evitar errores en el cdigo.

Dim miRespuesta As String


Para declarar varias variables en una instruccin, debe incluirse el tipo de datos para cada variable. Las variables declaradas sin un tipo de datos se declaran automticamente como Variant.

Dim x As Integer, y As Integer, z As Integer


En la siguiente instruccin, a x e y se les asigna el tipo de datos Variant. Slo a z se le asigna el tipo de datos Integer.

Dim x, y, z As Integer
Si se declara una variable matriz, deben incluirse los parntesis. Los subscriptos son opcionales. La siguiente instruccin define las dimensiones de una matriz dinmica, miMatriz.

Dim miMatriz()

Declarar variables
Para declarar variables se utiliza normalmente una instruccin Dim. La instruccin de declaracin puede incluirse en un procedimiento para crear una variable de nivel de procedimiento. O puede colocarse al principio de un mdulo, en la seccin Declarations, para crear una variable de nivel de mdulo. El siguiente ejemplo crea la variable NombreTexto y especficamente le asigna el tipo de datos String.

Dim NombreTexto As String

Si esta instruccin aparece dentro de un procedimiento, la variable NombreTexto se puede usar slo en ese procedimiento. Si la instruccin aparece en la seccin Declarations del mdulo, la variable NombreTexto estar disponible en todos los procedimientos dentro del mdulo, pero no para los restantes mdulos del proyecto. Para hacer que esta variable est disponible para todos los procedimientos de un proyecto, basta con comenzar la declaracin con la instruccin Public, tal y como muestra el siguiente ejemplo:

Public NombreTexto As String


Si desea ms informacin sobre cmo dar nombre a sus variables, puede consultar la seccin "Visual Basic Naming Rules" en la Ayuda de Visual Basic. Las variables se pueden declarar como de uno de los siguientes tipos de datos: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (para cadenas de longitud variable), String * longitud (para cadenas de longitud fija), Object, o Variant. Si no se especifica el tipo de datos, el tipo de datos Variant es el predefinido. Tambin es posible crear un tipo definido por el usuario empleando la instruccin Type. Si desea ms informacin sobre tipos de datos puede consultar la seccin "Tipo de datos Summary" en la Ayuda de Visual Basic. Se pueden declarar varias variables en una instruccin. Para especificar el tipo de datos se debe incluir un tipo de datos para cada variable. En la siguiente instruccin se declaran las variables intX, intY, e intZ como del tipo Integer.

Dim intX As Integer, intY As Integer, intZ As Integer


En la siguiente instruccin, intX e intY se declaran como del tipo Variant; y slo intZ se declara como del tipo Integer.

Dim intX, intY, intZ As Integer


No es necesario especificar el tipo de datos en la instruccin de declaracin. Si se omite, la variable ser del tipo Variant.

Utilizar la instruccin Public


La instruccin Public se puede utilizar para declarar variables pblicas de nivel de mdulo.

Public NombreTexto As String


Las variables pblicas se pueden usar en cualquier procedimiento del proyecto. Si una variable pblica se declara en un mdulo estndar o en un mdulo de clase, tambin se podr usar en los proyectos referenciados por el proyecto en que se declara la variable pblica.

Utilizar la instruccin Private


La instruccin Private se puede usar para declarar variables privadas de nivel de mdulo.

Private MiNombre As String


Las variables Private pueden ser usadas nicamente por procedimientos pertenecientes al mismo mdulo. Nota Cuando se utiliza a nivel de mdulo, la instruccin Dim es equivalente a la instruccin Private. Sera aconsejable usar la instruccin Private para facilitar la lectura y comprensin del cdigo.

Utilizar la instruccin Static


Cuando se utiliza la instruccin Static en lugar de la instruccin Dim, la variable declarada mantendr su valor entre llamadas sucesivas.

Utilizar la instruccin Option Explicit

En Visual Basic se puede declarar implcitamente una variable usndola en una instruccin de asignacin. Todas las variables que se definen implcitamente son del tipo Variant. Las variables del tipo Variant consumen ms recursos de memoria que la mayor parte de las otros tipos de variables. Su aplicacin ser ms eficiente si se declaran explcitamente las variables y se les asigna un tipo de datos especfico. Al declararse explcitamente las variables se reduce la posibilidad de errores de nombres y el uso de nombres errneos. Si no desea que Visual Basic realice declaraciones implcitas, puede incluir en un mdulo la instruccin Option Explicit antes de todos los procedimientos. Esta instruccin exige que todas las variables del mdulo se declaren explcitamente. Si un mdulo incluye la instruccin Option Explicit, se producir un error en tiempo de compilacin cuando Visual Basic encuentre un nombre de variable que no ha sido previamente declarado, o cuyo nombre se ha escrito incorrectamente. Se puede seleccionar una opcin del entorno de programacin de Visual Basic para incluir automticamente la instruccin Option Explicit en todos los nuevos mdulos. Consulte la documentacin de su aplicacin para encontrar la forma de modificar las opciones de entorno de Visual Basic. Tenga en cuenta que esta opcin no tiene ningn efecto sobre el cdigo que se haya escrito con anterioridad. Nota Las matrices fijas y dinmicas siempre se tiene que declarar explcitamente.

Declarar una variable de objeto para automatizacin


Cuando se utiliza una aplicacin para controlar los objetos de otra aplicacin, debe establecerse una referencia a la biblioteca de tipos de la otra aplicacin. Una vez que se ha establecido la referencia, se pueden declarar variables de objeto conforme a su tipo ms especfico. Por ejemplo, si desde Microsoft Word se establece una referencia a la biblioteca de tipos de Microsoft Excel, se puede declarar una variable del tipo Worksheet desde Microsoft Word para representar un objeto Worksheet de Microsoft Excel. Si se utiliza otra aplicacin para controlar objetos de Microsoft Access, es posible, en la mayor parte de los casos, declarar variables objetos del tipo ms especfico. Se puede usar tambin la palabra clave New para crear automticamente una nueva definicin de un objeto. Sin embargo, puede ser necesario indicar que se trata de un objeto Microsoft Access. Por ejemplo, cuando se declara una variable de objeto para representar un formulario de Microsoft Access desde Microsoft Visual Basic, debe distinguirse entre el objeto Form de Microsoft Access y un objeto Form de Visual Basic. Para ello se incluye el nombre de la biblioteca de tipos en la declaracin de la variable, como muestra el siguiente ejemplo:

Dim frmPedidos As New Access.Form


Algunas aplicaciones no reconocen algunos de los tipos de objetos de Microsoft Access. En ese caso, incluso despus de establecer una referencia a la biblioteca de tipos de Microsoft Access, ser necesario declarar todas las variables objeto de Microsoft Access como del tipo Object. Tampoco puede usarse la palabra clave New para crear una nueva definicin del objeto. El siguiente ejemplo muestra cmo declarar una variable que represente una nueva definicin del objeto Application de Microsoft Access desde una aplicacin que no reconoce los tipos de objeto de Microsoft Access. La aplicacin crea entonces una nueva definicin del objeto Application.

Dim appAccess As Object Set appAccess = CreateObject("Access.Application")


Para determinar la sintaxis a utilizar con una aplicacin determinada debe consultarse la documentacin de la aplicacin.

Resumen de tipos de datos


La tabla siguiente muestra los tipos de datos compatibles, incluyendo el tamao de almacenamiento y el intervalo. Tamao de almacenamiento

Tipo de datos

Intervalo

Byte Boolean Integer Long (entero largo) Single (coma flotante/ precisin simple) Double (coma flotante/ precisin doble)

1 byte 2 bytes 2 bytes 4 bytes

0 a 255 True o False -32,768 a 32,767 -2,147,483,648 a 2,147,483,647

4 bytes

-3,402823E38 a 1,401298E-45 para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos

8 bytes

-1.79769313486231E308 a -4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos -922.337.203.685.477,5808 a 922.337.203.685.477,5807

Currency (entero a escala) Decimal

8 bytes

14 bytes

+/-79.228.162.514.264.337.593.543.950.335 sin punto decimal; +/-7,9228162514264337593543950335 con 28 posiciones a la derecha del signo decimal; el nmero ms pequeo distinto de cero es +/-0,0000000000000000000000000001 1 de enero de 100 a 31 de diciembre de 9999 Cualquier referencia a tipo Object Desde 0 a 2.000 millones

Date Object String (longitud variable) String (longitud fija) Variant (con nmeros) Variant (con caracteres) Definido por el usuario (utilizando Type)

8 bytes 4 bytes 10 bytes + longitud de la cadena Longitud de la cadena

Desde 1 a 65.400 aproximadamente

16 bytes

Cualquier valor numrico hasta el intervalo de un tipo Double El mismo intervalo que para un tipo String de longitud variable El intervalo de cada elemento es el mismo que el intervalo de su tipo de datos.

22 bytes + longitud de la cadena Nmero requerido por los elementos

Nota Las matrices de cualquier tipo de datos requieren 20 bytes de memoria ms cuatro bytes para cada dimensin de matriz, ms el nmero de bytes que ocupan los propios datos. Puede calcular la memoria que ocupan los datos multiplicando el nmero de elementos de datos por el tamao de cada elemento. Por ejemplo, los datos de una matriz unidimensional que consten de cuatro elementos de datos tipo Integer de dos bytes cada uno, ocupan ocho bytes. Los ocho bytes que requieren los datos ms los 24 bytes necesarios para la matriz suman un requisito total de memoria de 32 bytes para dicha matriz. Un tipo Variant que contiene una matiz requiere 12 bytes ms que la matriz por s sola. Note Use the StrConv function to convert one type of string data to another.

Comprender la vida de las variables


El tiempo durante el que una variable conserva su valor se conoce como vida. El valor de la variable puede cambiar durante su vida, pero conserva algn valor. Cuando una variable pierde su alcance, ya no tiene ningn valor. Cuando un procedimiento comienza a ejecutarse, se inicializan todas las variables. Las variables numricas se inicializan a cero, las cadenas de longitud variable se inicializan a una cadena vaca de longitud cero ("") y una cadena de longitud fija se llena con los caracteres correspondientes al cdigo ASCII 0, o Chr(0). Las variables Variant se inicializan a Empty. Cada uno de los elementos de una variable de tipo definido por el usuario se inicializa como si se tratase de una variable independiente. Cuando se declara una variable de objeto, se reserva el espacio correspondiente en memoria, pero se le da el valor Nothing hasta que se le asigne una referencia a objeto mediante la instruccin Set. Si el valor de una variable no cambia durante la ejecucin del cdigo, conserva su valor de inicializacin hasta que pierda alcance. Una variable de nivel de procedimiento declarada mediante la instruccin Dim conserva su valor hasta que el procedimiento termina de ejecutarse. Si el procedimiento llama a otros procedimientos, la variable conserva su valor tambin mientras se ejecutan esos procedimientos. Si una variable de nivel de procedimiento de declara con la palabra clave Static, la variable conserva su valor mientras haya cdigo en ejecucin, sea cual sea el mdulo. Cuando todo el cdigo ha terminado de ejecutarse, la variable pierde su alcance y su valor. Su vida es la misma que la de una variable de nivel de mdulo. Una variable de nivel de mdulo es distinta a una variable esttica. En un mdulo estndar o un mdulo de clase, conserva su valor hasta que se termina de ejecutar el cdigo. En un mdulo de clase conserva su valor mientras exista una definicin de la clase. Las variables de nivel de mdulo consumen memoria hasta que sus valores se vuelven a inicializa, por eso slo se deben utilizar cuando sea necesario. Si se incluye la palabra clave Static antes de una instruccin Sub o Function, los valores de todas las variables de nivel de procedimiento del procedimiento se conservarn entre las sucesivas llamadas.

Comprender los tipos de datos Variant


El tipo de datos Variant se especifica automticamente si no se especifica otro tipo de datos al declarar una constante, variable, o argumento. Las variables declaradas como del tipo de datos Variant pueden contener valores numricos, cadenas de texto, fecha, hora o Booleans y pueden convertir los valores que contienen de forma automtica. Los valores numricos Variant ocupan 16 bytes de memoria (lo que slo es significativo en procedimientos grandes o mdulos complejos) y son ms lentos a la hora de su acceso que las variables de tipo explcito de los restantes tipos. Es muy raro utilizar el tipo de datos Variant para una constante. Los valores de cadena Variant necesitan 22 bytes de memoria. Las siguientes instrucciones crean variables Variant:

Dim miVar Dim tuVar As Variant laVar = "Esto es un texto."


La ltima instruccin no declara explcitamente la variable laVar, sino que la declara implcitamente, o automticamente. Las variables que se declaran implcitamente se especifican como del tipo de datos Variant. Sugerencia Si se especifica un tipo de datos para una variable o argumento y a continuacin se utiliza un tipo errneo de datos, se producir un error de tipo de datos. Para evitar errores de tipo de datos, se deben usar slo variables (del tipo de datos Variant) o declarar explcitamente todas las variables y especificar para ellas un tipo de datos. El ltimo mtodo es el preferible.

Comprender el alcance y la visibilidad


El alcance se refiere a la disponibilidad de una variable, constante, o procedimiento para ser usado por otro procedimiento. Hay tres niveles de alcance: nivel de procedimiento, nivel de mdulo privado y nivel de mdulo pblico. El alcance de una variable se determina cuando se declara. es aconsejable declarar todas las variables explcitamente para evitar errores de conflicto de nombres entre variables que tiene alcances distintos.

Definir el alcance de un nivel de procedimiento


Una variable o constante definida desde dentro de un procedimiento no es visible fuera de ese procedimiento. Slo el procedimiento que contiene la declaracin de la variable puede usarlos. En el siguiente ejemplo, el primer procedimiento presenta un cuadro de mensaje que contiene una cadena de texto. El segundo procedimiento presenta un cuadro de mensaje en blanco ya que la variable strMensaje es local para el primer procedimiento.

Sub VariableLocal() Dim strMensaje As String strMensaje = "Esta variable no se puede usar fuera de este procedimiento." MsgBox strMensaje End Sub Sub FueraAlcance() MsgBox strMensaje End Sub

Definir el alcance de nivel de mdulo privado


Se pueden definir variables y constantes de nivel de mdulo en la seccin Declarations de un mdulo. Las variables de nivel de mdulo pueden ser pblicas o privadas. Las variables pblicas estn disponibles para todos los procedimientos de todos los mdulos de un proyecto; las variables privadas slo estn disponibles para los procedimientos de ese mdulo. Las variables declaradas con la instruccin Dim en la seccin Declarations tiene un alcance privado a no ser que se especifique otra cosa. Sin embargo, es aconsejable colocar la palabra clave Private delante del nombre de la variable para que el alcance sea evidente al leer el cdigo. En el siguiente ejemplo, la variable de cadena strMensaje est disponible para cualquier procedimiento definido en el mdulo. Cuando se llama al segundo procedimiento, presenta el contenido de la variable de cadena strMensaje en un cuadro de dialogo.

' Aada lo siguiente a la seccin de Declarations del mdulo. Private strMensaje As String Sub InicializaVariablePrivada()

strMensaje = "Esta variable no se puede usar fuera de este mdulo." End Sub Sub UsaVariablePrivada() MsgBox strMensaje End Sub
Nota Los procedimientos pblicos de un mdulo estndar o mdulo de clase estn disponibles para cualquier proyecto de referencia al proyecto actual. Para limitar el alcance de todos los procedimientos de un mdulo al proyecto actual, aada una instruccin Option Private Module a la seccin Declarations del mdulo. Las variables y procedimientos pblicos seguirn estando disponibles para los restantes procedimientos del proyecto actual, pero no lo estarn para los proyectos que a los que puedan hacer referencia.

Definir el alcance de nivel de mdulo pblico


Si se declara una variable de nivel de mdulo como pblica, estar disponible para todos los procedimientos del mismo proyecto. En el siguiente ejemplo, la variable de cadena strMensaje se puede usar en cualquier procedimiento de un mdulo del proyecto.

' Incluya esto en la seccin Declarations del mdulo. Public strMensaje As String
Todos los procedimientos son pblicos a menos que se especifique lo contrario, excepto en el caso de los procedimientos evento. Cuando Visual Basic crea un procedimiento evento, la palabra clave Private se inserta automticamente antes de la declaracin del procedimiento. Para los restantes procedimientos, debe declarar explcitamente con la palabra clave Private si no desea que sean pblicos. Se pueden usar procedimientos, variables y constantes pblicas definidas en mdulos estndar o mdulos de clase de proyectos que hagan referencia al actual. Sin embargo, es preciso establecer una referencia al proyecto en que estn definidos. Los procedimientos, variables y constantes pblicas definidas en mdulos que no sean estndar o de clase, como pueden ser los mdulos de formulario o mdulos de informe, no estn disponibles desde los proyectos que hacen referencia al actual, ya que estos mdulos son privados para el proyecto en el que residen.

Para Buscar datos en una lista


1er Metodo:
Utiliza el mandato While para recorrer la lista buscando el dato, y se detiene cuando lo encuentra. Este mtodo es lento cuando la lista es muy grande.

Sub Busca1() T = Timer Range("Valor").ClearContents Application.ScreenUpdating = False Range("Lista").Select While ActiveCell <> Range("Dato") ActiveCell.Offset(1, 0).Select Wend Range("Valor") = ActiveCell.Offset(0, 1) Range("Valor").Select Application.ScreenUpdating = True Range("Tiempo") = Timer - T End Sub

2do Metodo:
Utiliza la opcin Buscar de la ficha Inicio/Buscar y reemplazar/Buscar. Este mtodo es mas rpido que el anterior.

Sub Busca2() T = Timer Range("Valor").ClearContents Dato = Range("Dato") Cells.Find(What:=Dato, After:=ActiveCell, LookIn:=xlValues, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Activate Range("Valor") = ActiveCell.Offset(0, 1) Range("Valor").Select Range("Tiempo") = Timer - T End Sub

3er Metodo:
Utiliza la sentencia Find del mismo Visual Basic.. Este mtodo es mucho ms rpido que los anteriores porque ya no utiliza herramientas de la hoja de calculo de Excel, sino la sentencia Find que es nativa de Visual Basic.

Sub Busca3() T = Timer Range("Valor").ClearContents Dato = Range("Dato") Set c = Range("Lista").Find(Dato, LookIn:=xlValues) If Not c Is Nothing Then Celda = c.Address Range("Valor") = Range(Celda).Offset(0, 1) Range("Valor").Select Range("Tiempo") = Timer T End Sub

Para Abrir archivos


Application.GetOpenFilename:
Utiliza el mandato Application.GetOpenFilename para mostrar en pantalla la ventana de dialogo tradicional de Excel para abrir un archivo. Este mtodo permite elegir de la ventana el archivo que se desea abrir de una carpeta previamente definida.

Sub AbrirArchivo() 'elije un archivo para abrirlo ChDrive Left(ActiveWorkbook.Path, 1) ChDir ActiveWorkbook.Path Archivo = Application.GetOpenFilename("Archivos del Excel & _ (*.xls*),*.xls*", , "Elija el Archivo que desea Abrir") On Error GoTo Sale Workbooks.Open Archivo Archivo = ActiveWorkbook.Name Rpta = MsgBox("El archivo: " & Archivo & " ha sido cargado" & _ vbNewLine & "Desea cerrarlo?", vbYesNo) If Rpta = vbNo Then Exit Sub Application.DisplayAlerts = False ActiveWorkbook.Close Sale: End Sub

Verifica si un Libro esta abierto


Workbooks.Open:
Utiliza el mandato For eachnext para recorrer por los libros abiertos y verificar si un cierto archivo ya ha sido abierto anteriormente. Si no es as, abre el archivo, sino, activa la ventana del archivo ya existente en la memoria.

Sub AbrirLibro2() Ruta = ActiveWorkbook.Path Archivo = InputBox("Nombre del archivo a abrir (Ej: Lista.xls Lista.xlsx)") If Archivo = "" Then Exit Sub For Each Libro In Application.Workbooks If UCase(Libro.Name) = UCase(Archivo) Then Windows(Archivo).Activate Exit Sub End If Next On Error GoTo NoHay Workbooks.Open Ruta & "\" & Archivo Exit Sub NoHay: MsgBox ("El archivo " & Archivo & " no existe en la carpeta actual") End Sub

Ingreso de fechas en las celdas a traves de un Calendario


Control de Calendario 12.0:
En el Editor de Visual Basic inserte un formulario, luego haga clic derecho en un lugar vacio de la ventana Cuadro de Herramientas y elija la opcin Controles adicionales. En la ventana que se abre, active la casilla de la opcin Contrl de Calendario 12.0 y luego Aceptar.

Luego con esta nueva herramienta, dibuje el calendario dentro del formulario, y al hacer doble clic sobre l, agrguele el siguiente cdigo:

Private Sub Calendar1_Click() ActiveCell = Calendar1.Value Unload Me End Sub Private Sub UserForm_Activate() Calendar1.Value = date End Sub
Luego con esta nueva herramienta, dibuje el calendario dentro del formulario, y al hacer doble clic sobre l, agrguele el siguiente cdigo:

Crear en la hoja de calculo una barra de avance del proceso


ProgressBar:
Cuando se realicen procesos que demandan mucho tiempo para Excel, quizs se desee mostrar una barra de avance de este proceso a fin de que el usuario sepa lo que est ocurriendo. Por ejemplo si se desea crear este cuadro:

Barra con ActiveX

Realice los siguientes pasos:

1. Ficha Programador/ Insertar/ Controles ActiveX 2. Clic en la herramienta "Mas controles" y seleccionar la opcin "Microsoft ProgressBar Control, version 6.0" y clic en Aceptar.

3. Entonces dibujar los siguientes objetos en la hoja de calculo:

4. Luego cambiar las siguientes propiedades: (Name) BorderStyle Scrolling (Name) BorderStyle Scrolling Barra1 1-ccFixedSingle 1-ccScrollingSmooth Barra2 1-ccFixedSingle 1-ccScrollingStandard

5. En un Modulo de Visual Basic escribir la siguiente macro: Sub Avance() Dim i As Double, j As Double ActiveSheet.Barra1.Visible = True ActiveSheet.Barra2.Visible = True Range("A3:C13").ClearContents Range("A3").Select For i = 1 To 100 For j = 1 To 200000 Sqr (j) Next ActiveCell.Cells(i / 10 + 1, 1) = i ActiveCell.Cells(i / 10 + 1, 2) = i * i ActiveCell.Cells(i / 10 + 1, 3) = Sqr(i) ActiveSheet.Barra1.Value = i ActiveSheet.Barra2.Value = i Next MsgBox ("Terminado") ActiveSheet.Barra1.Value = 0 ActiveSheet.Barra2.Value = 0 End Sub 6. Finalmente asignar la macro Avance al botn "Barra con ActiveX"

Crear un Formulario con una barra de avance del proceso


ProgressBar:

Barra con Formulario

1. Crear el formulario que se muestra a continuacion. 2. En el cuadro de herramientas hacer un clic derecho y elegir Controles adicionales, luego activar la casilla: Microsoft ProgressBarr Control, version 6.0, y Aceptar.

3. Con el nuevo control dibuje los controles como se muestran en la ventana anterior, y cambie las siguientes propiedades: (Name) Barra1 BorderStyle 1-ccFixedSingle Scrolling 1-ccScrollingSmooth (Name) Barra1 BorderStyle 1-ccFixedSingle Scrolling 1-ccScrollingSmooth 4. Escribir los siguientes codigos para los botones "Calculo" y "Cerrar" Private Sub Calculo_Click() Dim i As Double, j As Double Range("A3:C13").ClearContents Range("A3").Select Mensaje.Caption = "Procesando..." Application.Wait (Now + TimeValue("00:00:01"))

For i = 1 To 100 For j = 1 To 200000 Sqr (j) Next ActiveCell.Cells(i / 10 + 1, 1) = i ActiveCell.Cells(i / 10 + 1, 2) = i * i ActiveCell.Cells(i / 10 + 1, 3) = Sqr(i) Barra.Value = i Barra2.Value = i Next Mensaje = "Proceso terminado" Barra.Value = 0 Barra2.Value = 0 End Sub Private Sub Cerrar_Click() Unload Me End Sub 5. En un Modulo de Visual Basic escribir la siguiente macro: Sub Ventana() UserForm1.Show End Sub 6. Finalmente asignar la macro Ventana al botn "Barra con Formulario"
.

Para pintar de color los objetos


ColorIndex:
Sintaxis: Objeto.ColorIndex = nmero

Dos formas de ordenar una lista


Sort:
El primer mtodo es ccomo lo hace la versin 2003 de Excel y el segundo es en la versin 2007.

Formulario para ver Video


Windows Media Player:
En el Editor de Visual Basic Insertar un formulario y en la ventana Cuadro de Herramientas activar el control adicional Windows Media Player

. Luego disear el siguiente formulario:

En la ventana Modulo1 escribir la siguiente Subrutina:

Sub VerVideo() UserForm1.Show End Sub


En la ventana del Formulario escribir lo siguiente:

Private Sub Cerrar_Click() Unload Me End Sub Private Sub Pelicula_Change()

If Pelicula = "" Then Exit Sub RUTA = ActiveWorkbook.Path Video.URL = RUTA & "\" & Pelicula End Sub

En la hoja de clculo asignar la macro VerVideo al botn:

Nota.- Los archivos de video debern estar guardados en la misma carpeta donde se encuentra el archivo de Excel.

Insertar opciones al Menu Contextual


CommandBar:
En el Editor de Visual Basic escribir las siguientes rutinas:

Das könnte Ihnen auch gefallen