Anda di halaman 1dari 39

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 Funciones de hoja de clculo Acceso a datos
mdulos de macro aparecen ahora en el IDE, en vez
de en las hojas del libro.
Trabajar con matrices Automatizacin en Office
En este archivo de ejemplos hay hojas que explican los Automation
procedimientos que puede seguir para automatizar una
serie de tareas comunes en Microsoft Excel. Puede Tareas repetitivas Control de eventos
pasar de una hoja al IDE para ver el cdigo y copiar los
procedimientos en mdulos que puede modificar segn
sus necesidades.
Agregar rtulos a grficos
Para comenzar, haga clic en alguno de los temas que
aparecen a la derecha.

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 en contacto con
algn Microsoft Solution Provider.
soft Excel

Acceso a datos

Automatizacin en Office
Automation
Control de eventos

opsito ilustrativo, sin ningn tipo de garanta, explcita o implcita, , incluidas


n este libro de ejercicios se entregan tal cual aparecen ("as is"); Microsoft no
yudar a explicar el funcionamiento de una macro en particular, no modificarn
d tiene una experiencia limitada en programacin, pngase en contacto con
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 Origen B Frmula original Nueva frmula


25 0 #DIV/0!

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 Origen B Formato original Nuevo formato


25 0 #DIV/0! #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
Pagey,4a
resumir. En el men Herramientas seleccione Asistente
continuacin, Suma condicional. Siga las instrucciones del asistente.

Si desea obtener informacin adicional, use el Ayudante de Office.


Funciones de hoja de clculo
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
continuacin, Suma condicional. Siga las instrucciones del asistente.

Si desea obtener informacin adicional, use el Ayudante de Office.

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 Ir
Ir al
al cdigo
cdigo de ejemplo
Range(Cells(2, 1), Cells(2, 10)).FormulaArray = x Matriz1
Matriz1
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


Ir
Ir al
al cdigo
cdigo de ejemplo
'Declara una matriz de 10 filas y 1 columna
Matriz2
Matriz2
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
Ir al
al cdigo
cdigo de ejemplo
Matriz1
Matriz1

Ir
Ir al
al cdigo
cdigo de ejemplo
Matriz2
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
' Ir
Ir al
al cdigo
cdigo de
de ejemplo
ejemplo
With Selection.Interior Macro_Grabada
Macro_Grabada
.ColorIndex = 6
.Pattern = xlSolid
End With
End Sub

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 Ir
Ir al cdigo de ejemplo
With celda_en_bucle.Offset(0, 1).Interior For
For Each...Next
Each...Next
.ColorIndex = 6
.Pattern = xlSolid
End With
End If
Next
End Sub

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 Ir
Ir al
al cdigo
cdigo de
de
.Pattern = xlSolid ejemplo
ejemplo For..Next
For..Next
End With
End If
Next
End Sub

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 Ir
Ir al
al cdigo
cdigo de
de
.ColorIndex = 6 ejemplo
ejemplo DoLoop
DoLoop
.Pattern = xlSolid
End With
End If
Contador = Contador+ 1
Loop

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.
l cdigo grabado.

a accin grabada.
Adjuntar rtulos a un grfico XY (Dispersin)
Rtulos Valores X Valores Y
Punto de datos 1 2 5 Ubicar
Ubicar rtulos
rtulos en
en el
el Restablecer
Restablecer grfico
Punto de datos 2 9 7 grfico
grfico
Punto de datos 3 5 3
Punto de datos 4 4 8
Punto de datos 5 1 4
Valores Y
10
8
En Microsoft Excel no existe un mtodo para agregar
rtulos automticamente a un grfico XY (Dispersin). Sin 6 Valores Y
embargo, puede usar una macro para realizar esta tarea. 4

La macro adjunta muestra cmo aplicar rtulos en un 2


grfico XY (Dispersin) y asume que los datos y rtulos
0
asociados estn ordenados del mismo modo que en las
celdas sombreadas anteriores. 1 2 3 4 5 6 7 8 9 10

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
Ver cdigo
cdigo
n)
Restablecer
Restablecer grfico
grfico

es Y

Valores Y

7 8 9 10

cdigo
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 antes de ejecutar los ejemplos.
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.

Sub EjemploRDO()
Dim ws As Workspace
Dim rs As Recordset
Dim qt As QueryTable
Dim c As Connection
Dim CadConec As String
Dim 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 ResettingDAORecordset()
Dim bd As Database
Dim rs As Recordset
Dim qt As QueryTable
Dim NewSheet As Object
Dim 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 RetrieveAccessData()
Dim Nsql As String, Ncriterios As String, Nvnculo As String
Dim Neptuno As String
Dim h As Integer
Dim bd As Database, qry As Object
Dim 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.

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

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
Goto
Ir
Ir aa Ejemplo
Goto Retrieve
Retrievede
Ejemplo Access
RDO
Access
Cdigo
Data
Data Sample
Cdigo de
de ejemplo
Sample Code
ejemplo
Code

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

Ir
Ir a Goto
Recuperar
Goto Retrieve
datos
Retrieve
datos
Access
de
de acceso
Access Data
DataCdigo
acceso Sample
Cdigo
Sample
de
de Code
ejemplo
Code
ejemplo
Ir
Ir a Goto
Recuperar
Goto Retrieve
datos
Retrieve
datos
Access
de
de acceso
Access Data
DataCdigo
acceso Sample
Cdigo
Sample
de
de Code
ejemplo
Code
ejemplo
Ir
Ir aa Recuperar
Recuperar
datos
datos dede ISAM
ISAM
Cdigo
Cdigo dede ejemplo
ejemplo
Ir
Ir a Listar tablas
Cdigo
Cdigo de ejemplo

Ir
Ir a Listar
Listar campos
campos
Cdigo
Cdigo dede ejemplo
ejemplo
Ir
Ir aa conexin
conexin ODBC
ODBC
Cdigo
Cdigo dede ejemplo
ejemplo

Ir
Ir aa Capturar
Capturar errores
errores
de
de DAO
DAO Cdigo
Cdigo de
de
ejemplo
ejemplo

Ir
Ir aa Crear
Crear una
una tabla
tabla
Cdigo
Cdigo dede ejemplo
ejemplo
Ir
Ir aa Crear
Crear una
una tabla
tabla
Cdigo
Cdigo dede ejemplo
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
Ir al
al cdigo
cdigo de
de
ejemplo
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
Ir al
al cdigo
cdigo de
de
ejemplo
ejemplo MS_Word
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
Ir al
al cdigo
cdigo de
de ejemplo
ejemplo
MS_PowerPoint
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
Ir al
al cdigo
cdigo de
de ejemplo
ejemplo
MS_Outlook
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
Ir a MS_Binder
MS_Binder Cdigo
Cdigo
Sub MS_Binder() de
de ejemplo
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
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.


el As Boolean)