Vous êtes sur la page 1sur 36

Ejemplos de Microsoft Excel

Microsoft Excel '97 cuenta con una nueva interfaz para la creacin de macros denominada IDE (Sistema de Desarrollo Integrado para Visual Basic). Si trabaj anteriormente con macros en Excel, ver que los mdulos de macro aparecen ahora en el IDE, en vez de en las hojas del libro. En este archivo de ejemplos hay hojas que explican los procedimientos que puede seguir para automatizar una serie de tareas comunes en Microsoft Excel. Puede pasar de una hoja al IDE para ver el cdigo y copiar los procedimientos en mdulos que puede modificar segn sus necesidades. Para comenzar, haga clic en alguno de los temas que aparecen a la derecha.

Funciones de hoja de clculo Trabajar con matrices Tareas repetitivas Agregar rtulos a grficos

Acceso a datos Automatizacin de Office C

Microsoft proporciona ejemplos de procedimientos de Visual Basic for Applications (Visual Basic para Aplicaciones) slo con propsito ilustrativo, sin ningn tipo de garanta, explcita o implcita, , incluidas entre otras las garantas implcitas de comercializacin o de uso para un fin en particular. Los procedimientos de Visual Basic en este libro de ejercicios se entregan tal cual aparecen ("as is"); Microsoft no garantiza que se puedan utilizar en todo tipo de situaciones. A pesar de que los ingenieros de Microsoft AnswerPoint podran ayudar a explicar el funcionamiento de una macro en particular, no modificarn los ejemplos para agregar nuevas funciones, ni tampoco crearn macros como respuesta a necesidades especficas. Si usted tiene una experiencia limitada en programacin, pngase e contacto con algn Microsoft Solution Provider.

soft Excel
Acceso a datos Automatizacin de Office Control de eventos

propsito ilustrativo, sin ningn tipo de garanta, explcita o implcita, , sual Basic en este libro de ejercicios se entregan tal cual aparecen ("as is"); Point podran ayudar a explicar el funcionamiento de una macro en particular, ecficas. Si usted tiene una experiencia limitada en programacin, pngase en

Funciones de hoja de clculo

Ejemplos de funciones de hoja de clculo


Esta hoja de clculo contiene ejemplos de frmulas que puede usar para completar algunas tareas usuales en hojas de clculo. Las celdas con frmulas se muestran en azul. Si desea ver un ejemplo de frmula, site el cursor del mouse (ratn) sobre la celda para presentar el comentario o presione ALT+ para cambiar entre presentar valores o frmulas en la hoja de clculo. Para obtener ms informacin acerca de una funcin, seleccione la celda con la funcin y luego haga clic en el botn Modificar frmula (=) en la barra de herramientas Estndar.

Suprimir la presentacin de valores de error


Con frecuencia, las frmulas de la hoja de clculo devuelven valores de error (#DIV/0!, #N/A, #VALUE!,#REF!, y #NUM!) si estn basadas en valores no esperados. En la frmula de divisin del ejemplo que viene a continuacin, si la celda de origen es 0, devolver #DIV/0! como error.

Origen A 25

Origen B 0

Frmula original #DIV/0!

Nueva frmula

Una forma de expresarlo es: =SI(ESERROR(<frmula>),"",<frmula>) donde <frmula> es la frmula en la cual se desea suprimir el valor que produce el error. Si <frmula> devuelve un error, el enunciado devolver "" (vaco); de lo contrario devolver el resultado de <frmula>.

Page 3

Funciones de hoja de clculo

Otro mtodo para suprimir la presentacin de valores de error es usar la opcin Formato condicional, nueva en Excel 97. Esta opcin permite que la celda muestre distintos formatos segn el contenido de la misma. En el caso de valores de error, el procedimiento sera: 1. Seleccione la celda para dar formato. En este caso es $F$19. 2. Haga clic en Formato condicional en el men Formato. 3. En el primer cuadro desplegable, seleccione "Frmula". 4. En el cuadro de edicin, escriba: =SIERROR($F$19). 5. Haga clic en el botn formato y seleccione un formato, en este caso se eligi azul para el fondo y la fuente. 6. Haga clic en Aceptar. Como resultado, los valores de error, la fuente y el fondo presentarn el mismo color por lo que no se mostrar nada.

Origen A 25

Origen B 0

Formato original #DIV/0!

Nuevo formato #DIV/0!

Numerar, coincidir y buscar valores


Una de las tareas ms comunes para realizar en listas es encontrar el valor del punto de interseccin entre una columna y una fila en un rango rectangular de celdas en una hoja de clculo. El Asistente para bsquedas le ayudar a escribir frmulas para completar esta tarea. Para usar esta opcin, seleccione una celda dentro del rango de datos que desea utilizar: En el men Herramientas, seleccione Asistente y, a continuacin, Bsquedas. Siga las instrucciones del asistente. Si desea obtener informacin adicional, use el Ayudante de Office.

Frmulas de suma condicional


Otra tarea frecuente en Excel es calcular la suma de los valores que cumplen las condiciones especificadas. El Asistente para suma condicional le ayudar a escribir frmulas para completar esta tarea. Para usar esta opcin, seleccione una celda dentro de la lista que desea resumir. En el men Herramientas seleccione Asistente y, a Page 4 continuacin, Suma condicional. Siga las instrucciones del asistente. Si desea obtener informacin adicional, use el Ayudante de Office.

Otra tarea frecuente en Excel es calcularFunciones la suma de los valores que de hoja de clculo cumplen las condiciones especificadas. El Asistente para suma condicional le ayudar a escribir frmulas para completar esta tarea. Para usar esta opcin, seleccione una celda dentro de la lista que desea resumir. En el men Herramientas seleccione Asistente y, a continuacin, Suma condicional. Siga las instrucciones del asistente. Si desea obtener informacin adicional, use el Ayudante de Office.

Ir a inicio

Page 5

Trabajar con matrices


RESUMEN El mtodo mas utilizado para transferir el contenido de una matriz a una hoja de clculo es mediante un bucle, por ejemplo For...Next. Un bucle como For...Next permite contar el nmero de bucles realizados en la matriz y transferir elementos de la misma a su destino de uno en uno. Se puede conseguir el mismo resultado sin el bucle, usando la propiedad FormulaArray del objeto Range de Visual Basic para aplicaciones.

En Visual Basic para aplicaciones, la orientacin de una matriz unidimensional es horizontal. Como consecuencia, si el rango de celdas en la hoja de clculo que va a recibir el contenido de la matriz tiene la misma orientacin, es decir, una sola fila y varias columnas, es posible transferir su contenido mediante el enunciado FormulaArray. Por ejemplo: Sub Matriz1() 'Para una matriz unidimensional horizontal Dim x(1 To 10) As Double 'Declara una matriz de tamao 10 For j = 1 To 10 'Calcula valores al azar x(j) = j * j Next j 'Transfiere el contenido de una matriz a un rea horizontal Range(Cells(2, 1), Cells(2, 10)).FormulaArray = x End Sub El ejemplo anterior funciona correctamente cuando en la hoja de clculo de destino se hace referencia a una sola fila. Sin embargo, este ejemplo no ser vlido cuando sea necesario transferir el contenido de una matriz a un rango de celdas con orientacin vertical, es decir, una columna y varias filas. En el caso de varias filas de datos orientadas en forma de matriz bidimensional, es necesario cambiar la orientacin de la matriz. Para hacerlo, declare la matriz como matriz bidimensional de varias filas y una sola columna. Por ejemplo: Sub Matriz2() 'Para una matriz bidimensional vertical 'Declara una matriz de 10 filas y 1 columna Dim x(1 To 10, 1 To 1) As Double 'Calcula valores aleatorios For j = 1 To 10 x(j, 1) = j * j Next j 'Transfiere el contenido de la matriz a un rea vertical Range(Cells(1, 2), Cells(10, 2)).FormulaArray = x End Sub La matriz bidimensional presentada en el ejemplo anterior permite que Visual Basic establezca la orientacin de la matriz como orientacin vertical. De este modo, se puede transferir la matriz a una hoja de clculo sin utilizar un bucle.

Ir a inicio

Ir al cdigo de ejemplo Matriz1

Ir al cdigo de ejemplo Matriz2

Tareas repetitivas
A menudo es necesario repetir un tipo de tarea especfica para un grupo de elementos, que pueden ser celdas, celdas en un rango, hojas de clculo de un libro o libros en una aplicacin. A pesar de que una macro no puede grabar bucles, se puede grabar la tarea principal y luego, mediante pequeas modificaciones en el cdigo, se pueden crear distintos tipos de bucles segn las necesidades del proyecto. Los ejemplos siguientes se centran en un escenario donde el programador tiene un rango de celdas con nmeros en la columna A, y dependiendo del valor de la celda, desea cambiar el color de la celda correspondiente en la columna B. Primero grabaremos el proceso de cambiar el color de fondo de la celda: (Para grabar la macro, en el men Herramientas haga clic en Macro y luego en Grabar nueva macro) Mientras graba, haga clic en Celdas en el men Formato, luego haga clic en la ficha Tramas y seleccione un color. En este ejemplo se usar amarillo (.ColorIndex=6). A continuacin pare la grabacin mediante el botn Detener grabacin de la barra de herramientas Grabar macro. La celda seleccionada cambiar el color y se grabar la macro siguiente: Sub Macro_Grabada() ' ' Macro grabada el 6-30-97 ' With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With End Sub

Ir al cdigo de ejemplo Macro_Grabada

Nota: Si al grabar seleccion una celda, puede aparecer en la macro el texto Range("A3").Select. Si deja esta lnea sin modificar, cada vez que ejecute la macro se seleccionar la celda especificada en el objeto Range. No quite esta lnea de la macro si desea seleccionar la celda. A continuacin se puede modificar ligeramente el cdigo y agregar alguna estructura de bucle en el cdigo grabado.

Bucle For EachNext


Para usar el bucle For EachNext se debe conocer el rango de celdas al que deseamos aplicar la accin grabada. Como condicin de este ejemplo, slo ser afectada la celda en la columna B si la celda en A es mayor que 20. Se agregar el enunciado If al enunciado With utilizado. El color cambiar slo si If es verdadero. Por ltimo, debido a que se desea desplazar la celda correspondiente una columna hacia la derecha de la columna A (columna B), se reemplazar la propiedad Selection en el cdigo usando el mtodo Offset en la celda en la que se aplicar el bucle (celda_en_bucle). El cdigo resultante ser: Sub Ejemplo_For_Each_Next()

' ' Macro grabada el 6-30-97 ' For Each celda_en_bucle In Range("A1:A5") If celda_en_bucle.Value > 20 Then With celda_en_bucle.Offset(0, 1).Interior .ColorIndex = 6 .Pattern = xlSolid End With End If Next End Sub

Ir al cdigo de ejemplo For Each...Next

Bucle ForNext
Si conoce el nmero de veces que desea realizar un bucle en el cdigo, puede usar el bucle For..Next. En el ejemplo siguiente, si se desea comprobar 10 celdas hacia abajo a partir de la celda seleccionada, el cdigo ser: Sub Ejemplo_For_Next() For Contador = 0 To 9 If Selection.Offset(Contador, 0).Value > 20 Then With Selection.Offset(Contador, 1).Interior .ColorIndex = 6 .Pattern = xlSolid End With End If Next End Sub

Ir al cdigo de

En este ejemplo, el objeto Selection se utiliza para que el cdigo no especifique ningn rango y realice un bucle diez celdas hacia abajo de la celda activa (de 0 a 9). La variable Contador aumenta progresivamente a medida que avanza el bucle y se puede usar internamente en la estructura del mismo. Aqu se utiliza como argumento Offset para indicar el nmero de filas que se desplaza Selection desde la celda activa. Si al iniciar la macro la celda activa es A1, en la primera vuelta del bucle, la variable Contador ser igual a 0 y se desplazar 0 filas a partir de A1, como se muestra en el enunciado Selection.Offset(Contador, 0).Value.

DoLoop
Para establecer cundo detener un bucle basado en una condicin determinada, puede ser apropiado utilizar DoLoop. Esta estructura de bucle permite comprobar las propiedades o condiciones de la variable antes de ejecutar el bucle. En el ejemplo siguiente, el bucle contina hasta que el nmero de fila al que se hace referencia en Selection.Offset(Contador, 0).Row es mayor que 100. Esto puede ser til si no desea ejecutar el bucle mas all de la fila 100.

Sub Ejemplo_Do_Loop() Contador = 0 Do Until Selection.Offset(Contador, 0).Row > 100 If Selection.Offset(Contador, 0).Value > 20 Then With Selection.Offset(Contador, 1).Interior .ColorIndex = 6 .Pattern = xlSolid End With End If Contador = Contador+ 1 Loop

Ir al cdigo de

Nota: Existen otros tipos de bucle DoLoop disponibles, que ofrecen ms flexibilidad en determinadas circunstancias. Si desea obtener ms informacin y detalles acerca de otras estructuras de bucle, consulte en la Ayuda del entorno de Visual Basic la palabra bucles.

Ir a inicio

nueva macro)

de ejemplo

e bucle en el cdigo grabado.

os aplicar la accin grabada.

de ejemplo

Adjuntar rtulos a un grfico XY (Dispersin)


Rtulos Valores X Punto de datos 1 Punto de datos 2 Punto de datos 3 Punto de datos 4 Punto de datos 5 Valores Y 2 9 5 4 1 5 7 3 8 4 Ubicar rtulos en el

Valores Y 10 8 6 4 2 0 0 5

En Microsoft Excel no existe un mtodo para agregar rtulos automticamente a un grfico XY (Dispersin). Sin embargo, puede usar una macro para realizar esta tarea. La macro adjunta muestra cmo aplicar rtulos en un grfico XY (Dispersin) y asume que los datos y rtulos asociados estn ordenados del mismo modo que en las celdas sombreadas anteriores. Para aplicar los rtulos de puntos de datos presione el botn "Ubicar rtulos en el grfico". Para quitar los rtulos y poder iniciar una nueva demostracin, presione el botn "Restablecer grfico". Para ver el cdigo de la macro adjunta a la hoja, presione el botn "Ver cdigo".

Ver cdigo

Ir a inicio

n)
Restablecer grfico

Valores Y

Valores Y

10

er cdigo

Acceso a datos
RESUMEN Los objetos de acceso a datos (DAO), permiten la manipulacin directa de una base de datos. Para usar este tipo de objetos, deber crear una referencia a la biblioteca de objetos Microsoft DAO 3.5 (cuadro de dilogo Referencias en el men Herramientas) en el Editor de Visual Basic. Adems, es necesario tener instalados los controladores de ODBC o ISAM apropiados. Para obtener ms informacin acerca de los controladores de ODBC, consulte en la Ayuda "Instalar un controlador ODBC para tener acceso a una fuente de datos externa". Para instalar DAO o ISAM, consulte el tema de la Ayuda "Instalar o quitar componentes individuales de Microsoft Office o Microsoft Excel". Las rutas utilizadas en los ejemplos apuntan hacia la ubicacin predeterminada de la instalacin. Si instal Microsoft Office en una ubicacin diferente, modifique las rutas en el Editor de Visual Basic EJEMPLO DE RDO Este ejemplo recupera datos desde un archivo dBase usando RDO y los sita en una tabla de Query en una hoja de clculo nueva. Utilice este mtodo al conectarse a bases de datos SQL. RDO no utiliza DAO ya que este ltimo disminuye la memoria disponible. I Sub Dim Dim Dim Dim Dim Dim EjemploRDO() ws As Workspace rs As Recordset qt As QueryTable c As Connection CadConec As String HojaNueva As Object 'Si no instal Microsoft Office en la ubicacin predeterminada, 'cambie la ruta para indicar la carpeta adecuada antes de ejecutar el cdigo CadConec = "odbc;Driver={Microsoft dBase Driver (*.dbf)};DBQ=c:\archivos de programa\microsoft office\office;" 'Crea un rea de trabajo que no utiliza DAO Set ws = CreateWorkspace("w1", "admin", "", dbUseODBC) 'Abre la conexin con el directorio que contiene los archivos DBF Set c = ws.OpenConnection("", 1, 0, ConnectStr) 'Obtiene todos los registros de la tabla y slo permite desplazarse 'hacia adelante por los registros (mtodo ms rpido) Set rs = c.OpenRecordset("select * from pedidos", dbOpenForwardOnly) 'Inserta una nueva hoja de clculo en el libro activo Set HojaNueva = Worksheets.Add 'Crea una nueva tabla de Query basada en el conjunto de registros en la nueva hoja Set qt = HojaNueva.QueryTables.Add(rs, Range("a1")) 'Realiza una actualizacin sincronizada en la tabla de Query qt.Refresh False 'Cierra el conjunto de registros rs.Close 'Cierra la conexin c.Close End Sub RESTABLECER UN CONJUNTO DE REGISTROS DAO Este ejemplo utiliza la base de datos de muestra Neptuno.mdb de Microsoft Access para crear la tabla de Query en una nueva hoja de clculo y, a continuacin, restablecer el conjunto de registros en una tabla diferente de la base de datos.

Sub Dim Dim Dim Dim Dim

ResettingDAORecordset() bd As Database rs As Recordset qt As QueryTable NewSheet As Object Neptuno As String 'Ruta predeterminada a la base de datos de ejemplo Neptuno.mdb Neptuno = "C:\Archivos de programa\microsoft office\office\ejemplos\Neptuno.mdb" 'Abre la base de datos Neptuno.mdb Set bd = DBEngine.Workspaces(0).OpenDatabase(neptuno) 'Abre un conjunto de registros con todos los registros de la tabla clientes Set rs = bd.OpenRecordset("clientes") 'Inserta una hoja de clculo nueva en el libro activo Set HojaNueva = Worksheets.Add 'Inserta una tabla de Query con informacin acerca del conjunto de registros en la hoja nueva Set qt = NewSheet.QueryTables.Add(rs, Range("a1"))

'Realiza una actualizacin sincronizada en la tabla de Query qt.Refresh False 'Cierra el conjunto de registros rs.Close 'Abre un conjunto de registros con todos los registros de la tabla pedidos Set rs = bd.OpenRecordset("pedidos") 'Cambia el conjunto de registros de la tabla de Query existente Set qt.Recordset = rs 'Realiza una actualizacin sincronizada de la tabla de Query para presentar los datos qt.Refresh False 'Cierra el conjunto de registros rs.Close 'Cierra la base de datos bd.Close End Sub RECUPERAR DATOS DESDE MICROSOFT ACCESS Este ejemplo utiliza DAO para crear una consulta basada en dos tablas en el archivo de muestra Neptuno.mdb. Si la consulta ya existe, la rutina de control de errores la eliminar.

Sub Dim Dim Dim Dim Dim

RetrieveAccessData() Nsql As String, Ncriterios As String, Nvnculo As String Neptuno As String h As Integer bd As Database, qry As Object reg As Recordset, HojaNueva As Object 'Instalacin predeterminada de la base de datos Neptuno.mdb Neptuno = "C:\Archivos de programa\microsoft office\office\ejemplos\Neptuno.mdb" 'Si encuentra un error va a la etiqueta ControlErrores On Error GoTo controlErrores 'Abre la base de datos Set bd = DBEngine.Workspaces(0).OpenDatabase(neptuno) 'Enunciado SQL para la consulta (copia desde la ventana SQL de MS Query) Nsql = "SELECT DISTINCTROW Categories.CategoryName, Products.ProductName, Products.QuantityPerUnit, Products.UnitPrice "

Nvnculo = "FROM Categoras INNER JOIN Productos ON Categoras.IdCategora = Productos.IdCategora " Ncriteria = "WHERE ((([Productos].Suspendido)=No) AND (([Products].UnidadesEnExistencia)>20));" 'Crea una consulta denominada QueryTemp Set qry = bd.CreateQueryDef("QueryTemp") 'Enva un enunciado SQL a QueryTemp qry.sql = Nsql & Nvnculo & Ncriterios 'Abre el conjunto de registros resultante creado por QueryTemp Set reg = qry.OpenRecordset() 'Agrega una nueva hoja de clculo en el libro que contiene este cdigo Set HojaNueva = ThisWorkbook.Sheets.Add(after:=Worksheets("Acceso a datos"), Type:=xlWorksheet) 'Sita los nombres de campo en la fila 1 de la nueva hoja de clculo For h = 0 To reg.Fields.Count - 1 HojaNueva.[a1].Offset(0, h).Value = rec.Fields(h).Name Next h

'Copia el conjunto de registros en Excel HojaNueva.[a2].CopyFromRecordset rec 'Elimina la consulta temporal db.QueryDefs.Delete "QueryTemp" 'Cierra la base de datos db.Close 'Si no encuentra errores, detiene la ejecucin del cdigo Exit Sub 'Controlador de errores para eliminar la consulta si ya existe controlErrores: If DBEngine.Errors(0).Number = 3012 Then db.QueryDefs.Delete "QueryTemp" 'Comienza a ejecutar el cdigo en la lnea que caus el error Resume Else MsgBox Error(Err) End If End Sub RECUPERAR DATOS CON CONTROLADORES ISAM Este ejemplo muestra cmo recuperar datos desde un archivo dBase y sita el resultado en una nueva hoja de clculo. Debe tener previamente instalados los controladores ISAM apropiados. Sub RetrieveISAMdata() Dim Db As database, rec As Recordset dPath As String Dim h As Integer, NewSheet As Object 'Ruta de instalacin predeterminada de los archivos dbf dPath = "C:\Archivos de programa\microsoft office\office" 'Abre la base de datos Set Db = DBEngine.Workspaces(0).OpenDatabase(dPath, 0, 0, "dBase III") 'Abre un conjunto de registros con todos los registros de pedidos.dbf Set reg = Db.OpenRecordset("SELECT * FROM pedidos") 'Agrega una nueva hoja de clculo al libro que contiene este cdigo Set HojaNueva = ThisWorkbook.worksheets.Add(after:=Worksheets("Acceso a datos")) 'Realiza un bucle en los campos y devuelve los nombres de los campos a la hoja de clculo For h = 0 To reg.Fields.Count - 1 HojaNueva.[a1].Offset(0, h).Value = rec.Fields(h).Name Next h 'Copia el conjunto de registros en Excel HojaNueva.[a2].CopyFromRecordset reg 'Cierra la base de datos Bd.Close End Sub REALIZAR UNA LISTA DE TABLAS EN LA BASE DE DATOS Este ejemplo realiza una lista de los nombres de la tabla en la base de datos de muestra Neptuno.mdb de Microsoft Access. NOTA: Para ejecutar este cdigo deber tener Microsoft Access 97 instalado.

Sub TablasLista() Dim bd As Database, CuentaTabla As Long, i As Long Dim dRuta As String 'Ubicacin predeterminada de Neptuno.mdb dRuta = "C:\Archivos de programa\microsoft office\office\ejemplos\Neptuno.mdb" 'Abre Neptuno.mdb Set bd = DBEngine.Workspaces(0).OpenDatabase(neptuno) 'Establece una variable para enumerar las tablas CuentaTabla = bd.TableDefs.Count 'Realiza un bucle a travs de las tablas For i = 0 To CuentaTabla - 1 'Presenta el nombre de la tabla MsgBox db.TableDefs(i).Name Next 'Cierra la base de datos db.Close End Sub REALIZAR UNA LISTA DE CAMPOS EN UNA BASE DE DATOS Este ejemplo realiza una lista los nombres de campos de la tabla Clientes. Si no tiene instalado clientes.dbf, consulte el tema de la Ayuda "Instalar o quitar componentes individuales de Microsoft Office o Microsoft Excel"

Sub Campos_Lista() Dim bd As Database, reg As Recordset Dim cuentacampo As Long, i As Long, dRuta As String 'Ubicacin predeterminada de los archivos dbf de ejemplo dRuta = "C:\Archivos de programa\microsoft office\office" 'Abre la base de datos Set bd = OpenDatabase(dRuta, 0, 0, "dBase III") 'Abre todos los registros de clientes.dbf Set reg = db.OpenRecordset("SELECT * FROM clientes") 'Cuenta el nmero de campos cuentacampo = rec.Fields.Count 'Realiza un bucle por cada campo existente For i = 0 To cuentacampo - 1 'Presenta los nombres de los campos MsgBox rec.Fields(i).Name Next 'Cierra la base de datos bd.Close End Sub CONECTAR CON UNA BASE DE DATOS SQL Este ejemplo devuelve los nombres de una tabla de una base de datos SQL. Deber tener acceso a una base de datos SQL y un DSN vlido (nombre de fuente de datos). Para obtener ms informacin acerca de DSN, haga clic en el icono 32bit ODBC en el Panel de control de Windows. I

I Sub ODBC_Conexin() Dim bd As Database, i As Long 'Presenta el cuadro de dilogo de DSN, que permite 'para, a continuacin, pedir informacin adicional Set bd = DBEngine.Workspaces(0).OpenDatabase("", , 'Cuenta el nmero de tablas CuentaTabla = db.TableDefs.Count 'Realiza un bucle para presentar todos los nombres For i = 0 To CuentaTabla - 1 MsgBox db.TableDefs(i).Name Next 'Cierra la base de datos bd.Close End Sub

seleccionar la DSN si es necesario , "ODBC;") en la tabla

LOCALIZAR ERRORES DAO El ejemplo siguiente demuestra cmo localizar errores DAO. La presentacin de una descripcin del error es generalmente de utilidad para el usuario. Conocer el nmero de errores permite al programador localizar y controlar errores especficos.

Sub Controlar_DAO_Error() Dim d As database, r As Recordset 'Si encuentra un error va la etiqueta controladorErrores On Error GoTo controladorErrores 'Impide presentar mensajes de error integrados Application.DisplayAlerts = False 'Intenta abrir una base de datos que no existe Set d = DBEngine.Workspaces(0).OpenDatabase("c:\xl95\db4.mdb") Exit Sub 'Sale de la subrutina si no hay errores controladorErrores: MsgBox DBEngine.Errors(0).Description 'Texto del mensaje de error MsgBox DBEngine.Errors(0).Number 'Nmero del error MsgBox DBEngine.Errors(0).Source 'Ubicacin del error MsgBox DBEngine.Errors(0).HelpContext End Sub CREAR UNA TABLA Este ejemplo muestra cmo crear una nueva tabla dentro de una base de datos existente. En el ejemplo siguiente se utiliza la base de datos de muestra Neptuno instalada con Microsoft Access 97.

Sub Crear_Tabla() Dim t As Object, f As Object, d As Database Dim dRuta As String 'Si encuentra un error va a la etiqueta controladorErrores On Error GoTo controladorErrores 'Ruta predeterminada de la base de datos de muestra Neptuno.mdb dRuta = "C:\Archivos de programa\microsoft office\office\ejemplos\Neptuno.mdb" 'Abre la base de datos Neptuno Set d = DBEngine.Workspaces(0).OpenDatabase(dRuta) 'Crea una nueva tabla TableDef Set t = d.CreateTableDef("TablaNueva")

'Agrega campos a TablaNueva. Set f = t.CreateField("Campo1", dbDate) t.Fields.Append f 'Agrega campos al conjunto de campos Set f = t.CreateField("Campo2", dbText) t.Fields.Append f Set f = t.CreateField("Campo3", dbLong) t.Fields.Append f 'Guarda la definicin TableDef adjuntndola al conjunto de definiciones de TableDef. d.TableDefs.Append t 'Cierra la base de datos d.Close Exit Sub controladorErrores: MsgBox DBEngine.Errors(0) End Sub

Ir a inicio

Ir a Goto Ejemplo Retrieve de RDO Access Cdigo Datade Sample ejemplo Code

Ir al cdigo de ejemplo Goto Retrieve Access

Ir al cdigo de ejemplo Goto Retrieve Access Restablecer un conjunto Data Sample Code de registros DAO

Ir Goto a Recuperar Retrievedatos Access de

Ir Goto a Recuperar Retrievedatos Access de Data acceso Sample Cdigo Code de ejemplo

Ir a Recuperar datos de ISAM Cdigo de ejemplo

Ir a Listar tablas Cdigo

Ir a Listar tablas Cdigo de ejemplo

Ir a Listar campos Cdigo de ejemplo

Ir a conexin ODBC Cdigo de

Ir a conexin ODBC Cdigo de ejemplo

Ir a Capturar errores de DAO Cdigo de ejemplo

Ir a Crear una tabla Cdigo de

Ir a Crear una tabla Cdigo de ejemplo

Automatizacin de Office
RESUMEN La automatizacin es una opcin de COM (Component Object Model), una tecnologa que usan las aplicaciones para exponer los objetos a las herramientas de desarrollo, lenguajes de macro y otras aplicaciones que admiten automatizacin. Por ejemplo, una aplicacin de hoja de clculo puede presentar una hoja de clculo, un grfico, una celda o un rango de celdas, cada uno con un tipo diferente de objeto. Un procesador de texto puede presentar objetos tales como una aplicacin, un documento, un prrafo, una frase, un marcador o una seleccin. En los ejemplos siguientes se muestran tareas de automatizacin entre Microsoft Excel y otras aplicaciones de Microsoft. Para obtener ms informacin acerca de la automatizacin, consulte Automatizacin de tareas repetitivas en la Ayuda de VBA. MICROSOFT ACCESS Este ejemplo devuelve la ubicacin de las bases de datos de muestra de Microsoft Access. Ir al cdigo de ejemplo MS_Access Sub MS_Access() Dim AccDir As String Dim acc As Object 'Automatizacin OLE de Access Set acc = CreateObject("access.application") 'Devuelve la ruta de msaccess.exe AccDir = acc.SysCmd(Action:=acSysCmdAccessDir) 'Presenta la ruta MsgBox "La ubicacin de MSAccess.exe es " & AccDir 'Libera espacio de disponibilidad variable Set acc = Nothing End Sub MICROSOFT WORD Este ejemplo copia el grfico desde la hoja Rtulos de grficos a un documento nuevo de Microsoft Word. Ir al cdigo de ejemplo MS_Word Sub MS_Word() Dim wd As Object 'Crea una sesin de Microsoft Word Set wd = CreateObject("word.application") 'Copia el grfico en la hoja Rtulos de grficos Worksheets("Rtulos de grficos").ChartObjects(1).Chart.ChartArea.Copy 'Hace visible el documento wd.Visible = True 'Activa MS Word AppActivate wd.Name With wd 'Crea un documento nuevo en Microsoft Word .Documents.Add 'Inserta un prrafo .Selection.TypeParagraph 'Pega el grfico .Selection.PasteSpecial link:=True, DisplayAsIcon:=False, Placement:=wdInLine End With Set wd = Nothing End Sub

MICROSOFT POWERPOINT Este ejemplo copia el grfico desde Rtulos de grficos a una nueva presentacin de Microsoft PowerPoint. Ir al cdigo de ejemplo MS_PowerPoint

Sub MS_PowerPoint() Dim ppt As Object, pres As Object 'Crea una sesin de Microsoft PowerPoint Set ppt = CreateObject("powerpoint.application") 'Copia el grfico en la hoja Rtulos de grficos Worksheets("Rtulos de grficos").ChartObjects(1).Copy 'Abre un documento nuevo en Microsoft PowerPoint Set pres = ppt.Presentations.Add 'Agrega una diapositiva pres.Slides.Add 1, ppLayoutBlank 'Hace visible PowerPoint ppt.Visible = True 'Activa PowerPoint AppActivate ppt.Name 'Pega el grfico ppt.ActiveWindow.View.Paste Set ppt = Nothing End Sub

MICROSOFT OUTLOOK Este ejemplo crea y agrega informacin en una tarea nueva de Outlook. Ejecute Outlook y haga clic en Tareas en la barra de Outlook para ver la nueva tarea. NOTA: La tarea puede demorar unos minutos en aparecer. Ir al cdigo de ejemplo MS_Outlook Sub MS_Outlook() Dim ol As Object, miElem As Object 'Crea una sesin de Microsoft Outlook Set ol = CreateObject("outlook.application") 'Crea una tarea Set miElem = ol.CreateItem(olTaskItem) 'Agrega informacin a la nueva tarea With miElem .Subject = "Nueva tarea de VBA" .Body = "Esta tarea se cre mediante Automatizacin de Microsoft Excel" .NoAging = True .Close (olSave) End With 'Quita el objeto de la memoria Set ol = Nothing End Sub CUADERNO DE MICROSOFT Este ejemplo crea un archivo nuevo del Cuaderno de Microsoft, agrega secciones, manipula la seccin de Microsoft Excel y luego guarda el archivo.

Ir a MS_Binder Cdigo Sub MS_Binder() de ejemplo Dim MiCuadernoNuevo As Object, Seccin As Object Dim MyVar As String, MyFile As String 'Crea una sesin del Cuaderno de Microsoft Set MiCuaderno = CreateObject("office.binder") 'Hace visible la sesin del Cuaderno MiCuaderno.Visible = True 'Agrega una nueva seccin de Word MiCuaderno.Sections.Add Type:="word.document" 'Agrega un archivo de Excel existente, antes de la primera seccin MiArchivo = Application.Path & "\ejemplos\solver\muestra.xls" Set SeccinNUeva = MiCuaderno.Sections.Add(FileName:=MiArchivo, Before:=1)

With SeccinNueva 'Cambia el nombre de la seccin .Name = "Ejemplos de Solver" 'Obtiene el valor de la celda A2 en la tercera hoja del libro MiVar = .Object.Worksheets(3).Range("A2").Value End With 'Guarda el cuaderno como micuaderno.obd o lo sobrescribe si ya existe MiCuaderno.SaveAs Application.Path & "\micuaderno.obd", bindOverwriteExisting 'Oculta el cuaderno MiCuaderno.Visible = False 'Desasocia el objeto y como consecuencia libera recursos Set MiCuaderno = Nothing 'Coloca el valor de A2 en la tercera hoja de la seccin de Excel MsgBox "Los datos siguientes pertenecen a la celda A2 de la seccin Ejemplos de Solver " & Chr(10) & Chr(10) & MyVar End Sub

Ir a inicio

Programar con eventos


Con frecuencia los programadores necesitan que un evento desencadene una macro una macro para ejecutar una tarea. Microsoft Excel 97 ofrece la posibilidad de realizar esta accin. Los eventos estn siempre asociados con objetos, como puede ser el caso de una hoja de clculo o un libro. En este ejemplo slo se mencionar algunos de los eventos disponibles y se usar un MsgBox como relleno para demostrar dnde puede ir el cdigo. Para obtener ms informacin acerca de eventos, haga clic en el Ayudante desde el Editor de Visual Basic y use el nombre del objeto y la palabra "eventos" como palabras clave (por ejemplo, eventos de hoja de clculo).

BeforeDoubleClick
Un tipo de evento muy utilizado es BeforeDoubleClick en una hoja de clculo. Un ejemplo sencillo puede ser: Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) MsgBox "Hizo doble clic en la celda " & Target.Address Cancel = True End Sub

Este evento se desencadenar cada vez que el usuario haga doble clic en una celda de la hoja de clculo. El parmetro Target se incorpora a la macro para que el programador sepa sobre que celda se hizo doble clic. El argumento Cancel tiene un valor predeterminado de False pero se puede cambiar a True en el cdigo. Al establecer Cancel como True se cancelar la accin predeterminada para el evento. En este caso, la accin predeterminada al hacer doble clic en una celda es cambiar al modo de edicin para esa celda. Debido a que Cancel est establecido como True, esto no ocurrir. Si desea obtener la accin predeterminada, quite la lnea Cancel=True.

Change
Otro evento de gran utilidad en una hoja de clculo, es Change. Se desencadena cada vez que el usuario escribe un valor nuevo en una celda. Private Sub Worksheet_Change(ByVal Target As Excel.Range) MsgBox "Esta hoja cambi en la celda " & Target.Address End Sub Nota: Este evento no ocurrir si la hoja acaba de ser recalculada. Existe otro evento denominado Calculate que funciona con hojas de calculo recalculadas.

BeforeClose
Un evento til relacionado con libros es BeforeClose. Se puede utilizar este tipo de eventos para realizar tareas de limpieza antes de guardar o cerrar un archivo. Sub Workbook_BeforeClose(Cancel As Boolean)

a = MsgBox("Desea cerrar el libro?", vbYesNo) If a = vbNo Then Cancel = True End Sub En este ejemplo, se pide al usuario que cierre el archivo independientemente de si lo guard previamente o no. Usar eventos con el objeto Application Antes de usar eventos con el objeto Application puede crear un nuevo mdulo de clase y declarar un objeto del tipo Application con eventos. Por ejemplo, suponga que se crea un nuevo mdulo de clase denominado EventClassModule con el siguiente cdigo: Public WithEvents App As Application Despus de declarar los eventos del nuevo objeto, aparecer la lista desplegable de Object, con el objeto incluido en el mdulo de clase. A continuacin puede escribir los procedimientos para el nuevo objeto. Al seleccionar el nuevo objeto en el cuadro Object, los eventos vlidos para ese objeto se presentarn en el cuadro de lista desplegable Procedure. Antes de ejecutar los procedimientos debe conectar el objeto declarado en el mdulo de clase con el objeto Application. Puede utilizar el siguiente cdigo con cualquier mdulo. Dim X As New EventClassModule Sub IniciarAp() Set X.App = Application End Sub Despus de ejecutar el procedimiento IniciarAp, el objeto App en el mdulo de clase apuntar al objeto Aplicacin de Microsoft Excel y los procedimientos del evento se ejecutarn cuando el evento ocurra. Nota: Si desea obtener ms informacin acerca de eventos, consulte la Ayuda.

Ir a inicio

nge, Cancel As Boolean)

Vous aimerez peut-être aussi