0% encontró este documento útil (0 votos)
135 vistas65 páginas

Excel VBA

Este documento describe la programación de macros en hojas de cálculo de Excel usando Visual Basic para Aplicaciones (VBA). Explica cómo grabar macros, crear funciones definidas por el usuario, usar variables, constantes, bucles y objetos en VBA. Los objetos principales discutidos incluyen Application, Workbook, Worksheet y Range, así como sus propiedades y métodos.

Cargado por

Daniel H
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
135 vistas65 páginas

Excel VBA

Este documento describe la programación de macros en hojas de cálculo de Excel usando Visual Basic para Aplicaciones (VBA). Explica cómo grabar macros, crear funciones definidas por el usuario, usar variables, constantes, bucles y objetos en VBA. Los objetos principales discutidos incluyen Application, Workbook, Worksheet y Range, así como sus propiedades y métodos.

Cargado por

Daniel H
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 65

Hojas 

de cálculo
1. Programación de macros en Visual Basic

Nicolás Serrano
Organización Industrial
Contenido
• Visual Basic para Aplicaciones
• Tipos de macros 
• Primera macro
• Opciones de grabar macro
• Gestor de macros
• Visualizar y editar una macro
• IDE
• Crear función definida por el usuario
• Ejecutar una macro
• Procedimientos
• Variables
• Constantes y operadores

2
Visual Basic para Aplicaciones
• Herramienta de desarrollo
• Compatible con Visual Basic y común a otras aplicaciones Office
• IDE (Integrated Development Environment)
• Formularios
• Código
• Módulos de código
• Módulos de clase
• Lenguaje de script o de macros

3
Tipos de macros
• Macros de orden
• Procedimientos Sub
• Normalmente ejecutan comandos de menú
• Funciones definidas por el usuario
• Procedimientos function
• Amplían las funciones incorporadas en la aplicación
• No debe modificar el entorno
• Devuelve un valor

4
Activar tab de
Developer
• Menú File ‐> Options
• En Customize Ribbon
• Activar en tabs:
• Developer
• Clic en OK

Se muestra Developer
en el menu

5
Primera macro
• Grabadora de macros:
‐> Developer / Code / Record Macro
• Ejecutar las ordenes deseadas,
escribir en casilla D7 el número 12
• Detener la grabación
‐> Developer / Code / Stop Recording Sub Macro1()
'
• El código producido se puede ver en: ' Macro1 Macro
'
‐> Developer / Code / Macros
Seleccionar Macro1 y clicar en Edit '
Range("D7").Select
ActiveCell.FormulaR1C1 = "12"
End Sub
6
Opciones de grabar macro
• Nombre de la macro (sin espacios)
• Método abreviado: para ejecutar con el teclado
• Guardar macro en: especificar fichero de Excel
• Libro de macros (Personal Macro Workbook)
• En otra hoja (New Workbook)
• Con la propia hoja (This Workbook)
• Descripción

7
Gestor de macros
• Abrir el cuadro de diálogo Macro
‐> Developer / Code / Macros
• Desde esta ventana se permite:
• Ver las macros existentes
• Ejecutar (Run)
• Debugger (Step into)
• Editar la macro
• Crear nueva macro
• Borrar una macro
• Cambiar las opciones de
una macro

8
Visualizar y editar una macro
• En el cuadro de diálogo Macro
‐> Developer / Code / Macros
• Seleccionar la macro
• Clicar Modificar
• Se abre el editor de Visual Basic con el módulo en el que se encuentra 
la macro.
• Dispone de diversos elementos que se muestran en la imagen 
siguiente

9
IDE
Visual Basic for Applications

Explorador de proyectos
Ventana de propiedades
Área de trabajo
Código
Examinador de objetos
Ventanas de expresiones
Ventana de variables

10
Crear función definida por el usuario
• En un módulo, escribir Function nombreFuncion y los parámetros
• Escribir el cuerpo de la función
• Finalizar con nombreFuncion = valor del Resultado
• Ejemplo:
Function cuadrado(x)
cuadrado = x * x
End Function

11
Formas de ejecutar una macro
• En el cuadro de diálogo Macro
‐> Developer / Code / Macros
• Seleccionar la macro y clicar Run
• Clicar en el código de la macro y clicar Run ‐> Continue (o F5)
• Mediante la tecla de método abreviado
• Si se ha asignado a un botón de la barra de herramientas, mediante 
dicho botón
• Si es una función, introduciendo la función:
=cuadrado(2)

12
Procedimientos
• Estructura:
Sub NombreProcedimiento (argumento1, argumento2, …)
[sentencias VBA]
End Sub

Function NombreProcedimiento (argumento1, argumento2, …)


[sentencias VBA]
NombreProcedimiento = valorRetorno
End Function
• Llamada:
NombreProcedimiento (argumento1, argumento2, …)
• Llamada desde otro fichero:
NombreFichero.NombreProcedimiento (argumento1, argumento2, …)

13
Debugger
• Permite situar breakpoins
• Haciendo clic en la línea
• Ejecutar paso a paso
• Inspeccionar variables
• Sobre el código
• En la ventana "Locals "
• En la ventana "Inmediate "
• Debug.Print (imprime en Inmediate)
• Arrancar y parar macros
• En modo debugger, se para el 
funcionamiento normal del Excel

14
Hojas de cálculo
2. Lenguaje VBA

Nicolás Serrano
Organización Industrial
Variables
• Declaración:
Dim nombreVariable [As TipoVariable]
• Tipos de variables
• Boolean TRUE/FALSE
• Integer, Long2 y 4 bytes
• Single, Double 4 y 8 bytes
• String 1 byte por carácter
• Currency, Date 8 bytes
• Object 4 bytes
• Array
• Variant
Referencia en:
https://docs.microsoft.com/en‐us/office/vba/language/reference/user‐interface‐help/data‐type‐summary
• Dimensión de arrays
Dim nombreVariable (limiteInferior1 To limiteSuperior1, limiteInferior2 To limiteSuperior2, …) [As TipoVariable]

16
Constantes y operadores
• Constantes de la aplicación
• Const xlMaximized = ‐4137 (&HFFFFEFD7)
• ActiveWindow.WindowState = xlMaximized
• Constantes definidas por el usuario
• Const NOMBRECONSTANTE = valor
• Operadores aritméticos: +, ‐ , *, /, %, ^, Mod
• Operadores de comparación: =, >, <, >=, <=, <>
• Operadores lógicos:
• TRUE Returns the logical value TRUE
• FALSE Returns the logical value FALSE
• NOT Reverses the logic of its argument
• OR Returns TRUE if any argument is TRUE
• AND Returns TRUE if all its arguments are TRUE
• IF Specifies a logical test to perform

17
For Each

Sub Ejemplo_For_Each_Next()
'
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

18
For Next

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

19
Do Loop
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

End Sub

20
Sintaxis Do Loop 
Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]
Loop

Do
[statements]
[Exit Do]
[statements]
Loop [{While | Until} condition]

21
Hojas de cálculo
3. Objetos en VBA

Nicolás Serrano
Organización Industrial
Contenido
• Objetos
• Estructura jerárquica
• Métodos
• Eventos
• Colecciones
• Examinador de objetos
• Asignación y propiedades
• Objeto Application
• Objeto Workbook
• Objeto Worksheet
• Objeto Range
• Filas y columnas del objeto Range
• Propiedades y métodos del objeto Range

23
Objetos
• La interacción con el entorno se realiza mediante 
objetos
• Objeto en VBA es todo elemento manipulable 
(Rango, Window)
• Modificando una propiedad del objeto
• Ejecutando un método del objeto
• Definiendo un procedimiento para un evento del objeto
• Ejemplo de objeto: Worksheet
• Propiedad: Cells, CircularReference
• Método: Calculate, CheckSpelling
• Evento: Change

24
Estructura jerárquica
• Las propiedades de un objeto pueden ser otros objetos
• Para especificar un objeto de la jerarquía se indica la ruta desde el origen:
• Application.Workbooks("Libro1").Worksheets("Hoja1").Range(A1:A1)
• Reducción de la ruta:
• Application.ActiveWindow.ActiveCell.Font.Italic
• Se puede reducir a:
• ActiveCell.Font.Italic
• Establecer valores de propiedades
• Objeto.Propiedad = valor (numérico, cadena de caracteres o lógico)
• Obtener un valor
• variable = Objeto.Propiedad

25
Métodos
• Los métodos dan ordenes a los objetos
• Ejecución de un método:
• Objeto.Método
• Ej: ActiveWorkbook.Save
• Si tiene argumentos
• Objeto.Método (argumento1, argumento2, …)
• Objeto.Método nombreArgumento1:=argumento1, _ 
nombreArgumento2:=argumento2, …
• Ej: ActiveWorkbook.SaveAs([Filename], [FileFormat], [Password], 
[WriteResPassword], [ReadOnlyRecommended], [CreateBackup], 
[AccessMode As XlSaveAsAccessMode = xlNoChange], [ConflictResolution], 
[AddToMru], [TextCodepage], [TextVisualLayout])

26
Eventos
• Es algo que le sucede al objeto 
(por ejemplo Archivo / Abrir)
• Se pueden escribir 
procedimientos de respuesta al 
evento
• Se describen en la ventana de 
módulo cuando se selecciona 
un objeto en la lista de objetos
• La lista de procedi‐
mientos muestra los
eventos del objeto

27
Colecciones
• Es un conjunto de objetos del mismo tipo
• WorkSheets es la colección de hojas de un libro de trabajo
• Una colección es un objeto por lo que se puede manipular la colección o 
cada uno de los objetos
• Los miembros se denominan elementos y se pueden referenciar por:
• El nombre del objeto WorkSheets("Hoja1")
• Índice WorkSheets(1)
• Colecciones de Application
• AddIns
• Dialogs
• Windows
• Workbooks

28
Examinador de objetos
• Elementos del examinador
• Bibliotecas y proyectos
• Búsqueda
• Clases
• Miembros
• Propiedades
• Métodos
• Eventos
• Plantilla de código

29
Asignación y propiedades
• Declaración
• Dim nombreVariable as Object
• Ej: Dim Hoja1 As Object
• Asignación
• Set nombreVariable = nombreObjeto
• Set Hoja1 = ActiveSheet With Hoja1.Range("A1:A1").Font
.Size = 24
• Varias acciones sobre un objeto .Bold = True
With nombreObjeto End With
sentencias (.propiedad = valor)
End With

30
Objeto Application
• Propiedades:
• Application.Caption = "Curso Hojas de Cálculo"
• ActiveSheet.Range("A1") = Application.Path
• ActiveSheet.Range("A2") = Application.UserName
• ActiveSheet.Range("A3") = Application.Version
• ActiveSheet.Range("A4") = Application.MemoryUsed
• Métodos:
• Calculate
• CheckSpelling
• Wait(time)
• SaveWorkspace([Filename])

31
Objeto Workbook
• Se puede acceder a un objeto Workbook:
• Con la colección Workbooks: Workbooks("Libro1") ó Workbooks(1)
• ActiveWorkbook (el libro activo)
• ThisWorkbook (el libro en el que se ejecuta el código)
• Abrir un libro:
• Con el método Open de la colección Workbooks: 
Workbooks.Open("nombreFichero.xls")
• Cambio de disco: ChDrive "D"
• Cambio de directorio ChDir "\Directorio"
• Crear un libro
• Con el método Add de la colección Workbooks: 
Workbooks.Open[("nombrePlantilla")]

32
Objeto Workbook (2)
• Propiedades:
• ActiveSheet.Range("A11") = ActiveWorkbook.FullName
• ActiveSheet.Range("A12") = ActiveWorkbook.Name
• ActiveSheet.Range("A13") = ActiveWorkbook.Path
• ActiveSheet.Range("A14") = ActiveWorkbook.Saved
• poniendo esta propiedad a True, se puede cerrar un libro sin salvar los cambios y sin que 
pregunte si se desean guardar
• Métodos:
• Activate
• Close (salvar Cambios, nombre fichero, ruta de envío)
• PrintOut (desde, hasta, copias, preliminar, impresora, a fichero, intercalar)
• Save
• SaveAs(nombre fichero)

33
Objeto Worksheet
• La colección Worksheets contiene las hojas de un libro de trabajo
• Crear una hoja:
• Worksheets. Add([Before], [After], [Count], [Type])
• Ej: Worksheets.Add before:=Worksheets(2)
• Copiar: Copy([Before], [After])
• Propiedades:
• Name
• StandardHeight (altura de las filas)
• StandardWidth (ancho de las columnas)
• UsedRange
• Visible
• Métodos
• Activate Calculate Select
• Copy([Before], [After]) Move([Before], [After])

34
Objeto Range
• El objeto Range puede ser:
• Una celda
• Una fila o columna
• Una selección de celdas
• Un rango 3D
• Obtención de un objeto Range
• [ActiveSheet].Range(name)
• name es un rango "A1", "A1:B2", "parametros"
• [ActiveSheet].Range(cell1, cell2)
• cell1 y cell2 son la superior izquierda y la inferior derecha y representan un rango de una celda o una fila 
o columna.
• [ActiveSheet].Cells(rowindex, columnindex)
• columnindex puede ser numérico o letra
• se puede aplicar a la hoja o a un rango For i = 1 To 5
• ActiveSheet.[A1] = "Referencia entre corchetes" Cells(18, i) = " Campo "  & i
Next i

35
Filas y columnas del objeto Range
• Para referirse a una fila o columna:
• [ActiveSheet].Rows[(index)]
• si se omite se devuelve una colección de filas
• [ActiveSheet].Columns[(index)]
• EntireRow y EntireColumn devuelven la/s fila/s o columna/s del rango
• Seleccionar un rango: método Select del objeto Range
• Range("A1 ").Select
• Es útil sólo en determinadas funciones (charts)
• El rango seleccionado se obtiene con Selection
• Ej: Selection.Font.Size = 24

36
Propiedades y métodos del objeto Range
• Propiedades
• Column, Row: devuelve el número de la primera columna o fila del rango
• Count: número de celdas
• Formula, Value: establece u obtiene una fórmula o un valor
• FormulaArray: fórmula matricial
• NumberFormat: formato del rango
• [A22].Value = [A22].NumberFormat
• Métodos
• Cut([Destination]), Copy([Destination])
• Clear, ClearContents, ClearFormats, ClearNotes
• DataSeries([Rowcol], [Type As XlDataSeriesType = xlDataSeriesLinear], [Date As 
XlDataSeriesDate = xlDay], [Step], [Stop], [Trend])
• Insert([Shift]), Shift puede ser xlToRight o xlDown

37
Hojas de cálculo
4. Interface de usuario

Nicolás Serrano
Organización Industrial
Contenido
• Mostrar información
• Obtener información
• Formularios de usuario
• Propiedades del formulario
• Controles del formulario
• Propiedades de controles
• Eventos
• Tipos de controles
• Abrir y cerrar un formulario
• Menús y barras de herramientas
• Añadir un botón o elemento de menú

39
Mostrar información
• Información sonora: Beep
• Para que se produzca un intervalo:
• Application.Wait Now + TimeValue("horas:minutos:segundos")
• Barra de estado
• Application.StatusBar = "cadena de texto"
• Mensajes
• MsgBox(Prompt, [Buttons As VbMsgBoxStyle = vbOKOnly], [Title], [HelpFile], 
[Context]) As VbMsgBoxResult
• VbMsgBoxStyle:
• vbOKOnly , vbOKCancel , vbYesNo , vbYesNoCancel
• vbExclamation , vbInformation , vbQuestion , vbCritical
• VbMsgBoxResult
• vbOK, vbCancel, vbAbort, vbRetry, vbIgnore, vbYes, vbNo

40
Obtener información
• InputBox(Prompt As String,  • Cuadros de diálogo de impresión:
[Title], [Default], [Left], [Top],  Application.Dialogs(xlDialogPrint).Show

[HelpFile], [HelpContextID], 
[Type]) As String
InputBox "Prueba de InputBox", "Curso
Excel"

41
Formularios de usuario
• En el editor de Visual Basic:
‐> Insert / UserForm
• Se muestra
• La carpeta de formularios
• El objeto UserForm
• El formulario
• El cuadro de herramientas

42
Propiedades del formulario
• Se agrupan en 7 categorías
• Apariencia: colores y título
• Comportamiento: Enabled indica si está activo
• Fuente
• Varias: Nombre, puntero del ratón y ayuda
• Imagen: imagen de fondo
• Posición: posición y tamaño
• Desplazamiento: barras de desplazamiento (scroll)

43
Controles del formulario
• Para añadir controles al formulario
• Se selecciona en el Cuadro de herramientas
• Se arrastra sobre el formulario
• Para añadir nuevos controles al cuadro de herramientas
• Seleccionar un formulario
‐> Tools / Additional Controls
• Propiedades
• Se pueden editar en el cuadro de
propiedades
• Se pueden modificar en ejecución

44
Evolución
Office 97        Office 2016

45
Propiedades de controles
• Accelerator: Alt + tecla
• AutoSize: tamaño función del texto
• BackColor: color de fondo
• Caption: texto del control
• ControlTipText: texto de ayuda
• Enabled: activo
• MousePointer: aspecto del puntero
• TabIndex: orden de tabulación
• TabStop: seleccionar el control mediante tab
• Tag: informativo
• Visible: indica si se muestra
• WordWrap: ruptura de palabras

46
Eventos
• Se pueden definir eventos para el formulario o sus controles
• Se introduce entre
Sub 

End Sub
de cada procedimiento
• El código se almacena en
el módulo de código
del UserForm

47
Tipos de controles
• CommandButton
• Label
• TextBox
• Frame
• OptionButton
• CheckBox
• ToggleButton
• ListBox
• ComboBox
• ScrollBar
• SpinButton
• ...

48
Abrir y cerrar un formulario
• En tiempo de diseño: Run / Run Sub/UserForm o F5
• En código: UserForm1.Show
• Descargar el furmulario: Unload Me
• Ejemplo de cierre de formulario con mensaje de verificación:
Private Sub CommandCancel_Click()
If MsgBox("Desea cerrar", vbYesNo) = vbYes Then Unload Me
End Sub

49
Personalizar la cinta y la barra de acceso rápido
• Como al añadir la 
pestaña Developer:
Menú File ‐> Options
‐ "Customize Ribbon"
‐ "Quick Access Toolbar "

50
Hojas de cálculo
5. OLE y Acceso a bases de datos

Nicolás Serrano
Organización Industrial
Contenido
• OLE
• Objeto Word
• Objeto Outlook
• Outlook ‐ MailItem
• Envío de mail
• Acceso a Bases de datos
• DBEngine
• Workspaces
• Base de datos y recordsets
• Ejemplo de OpenRecordset

52
Objeto Word
• Este ejemplo copia el rango A1:B20 desde la hoja 1 a un
documento nuevo de Microsoft Word.
Sub Macro1() 'Activa MS Word
' 'AppActivate wd.Name No hay que
' Macro1 Macro activarlo en Excel 2007
' Macro grabada el 18/06/1998 por Nicolas Serrano With wd
' 'Crea un documento nuevo en
' Acceso directo: CTRL+a Microsoft Word
Dim wd As Object .Documents.Add
'Crea una sesión de Microsoft Word 'Inserta un párrafo
Set wd = CreateObject(" word.application ") .Selection.TypeParagraph
'Copia el gráfico en la hoja Rótulos de gráficos 'Pega el gráfico
Worksheets(1).Range("A1:B20").Copy .Selection.PasteSpecial
'Hace visible el documento link:=True, DisplayAsIcon:=False,
wd.Visible = True Placement:=wdInLine
End With
Set wd = Nothing
End Sub

53
Outlook
• Este ejemplo crea y agrega información 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.
Sub MS_Outlook()
Dim ol As Object, miElem As Object
'Crea una sesión de Microsoft Outlook
Set ol = CreateObject("outlook.application")
'Crea una tarea
Set miElem = ol.CreateItem(olTaskItem)
'Agrega información a la nueva tarea
With miElem
.Subject = "Nueva tarea de VBA"
.Body = "Esta tarea se creó mediante Automatización de Microsoft Excel"
.NoAging = True
.Close (olSave)
End With
'Quita el objeto de la memoria
Set ol = Nothing
End Sub

54
Outlook ‐ MailItem 
• Se crea con:
Dim ol As Object, miElem As Object
'Crea una sesión de Microsoft Outlook
Set ol = CreateObject("outlook.application")
'Crea una tarea
Set miElem = ol.CreateItem(olMailItem)

• Class MailItem
• Property To As String
• Property Body As String
• Property Attachments As Attachments
• Property Subject As String
• Método: Sub Send()

55
Envío de mail
Private Sub Comando0_Click()

Dim ol As Object, miElem As Object


'Crea una sesión de Microsoft Outlook
Set ol = CreateObject("outlook.application")
'Crea el mensaje de mail
Set miElem = ol.CreateItem(olMailItem)
'Agrega información a la nueva tarea
With miElem
.Subject = "Prueba de mail de VBA"
.Body = "Esta tarea se creó mediante OLE de Microsoft Excel"
.To = "Nicolas Serrano"
End With
miElem.send
'Quita el objeto de la memoria
Set ol = Nothing

End Sub

56
DBEngine
• El objeto DBEngine es el origen en el modelo de objeto DAO. Existe 
un solo DBEngine y no es elemento de una colección.
• Activar: Tools ‐> References: Microsoft DAO 3.6 Object Library
Sub DBEngineProperties()

Dim wrkBucle As Workspace


Dim prpBucle As Property

With DBEngine
Debug.Print "Propiedades de DBEngine"

' Enumera la colección Properties de DBEngine,


' para interceptar propiedades con valores no
' válidos en este contexto.
For Each prpBucle In .Properties
On Error Resume Next
Debug.Print " " & prpBucle.Name & " = " _
& prpBucle
On Error GoTo 0
Next prpBucle

End With

End Sub

57
Workspaces
• La colección Workspaces contiene todos los objetos 
Workspace. Un objeto Workspace define una sesión para 
un usuario. Contiene las bases de datos abiertas y 
proporciona mecanismos para realizar transacciones
Sub WorkspacesColection()

' Enumera la colección Workspaces de DBEngine.


Debug.Print "Colección Workspaces de DBEngine"
For Each wrkBucle In DBEngine.Workspaces
Debug.Print " " & wrkBucle.Name
' Enumera la colección Properties de cada
' objeto Workspace, para interceptar
' propiedades con valores no válidos en este contexto.
For Each prpBucle In wrkBucle.Properties
On Error Resume Next
Debug.Print " " & prpBucle.Name & _
" = " & prpBucle
On Error GoTo 0
Next prpBucle

Next wrkBucle
End Sub

58
Base de datos y recordsets
• Creación de objeto Base de datos (Database)
• Set basededatos = [espaciodetrabajo.]OpenDatabase
(nombrebasededatos, opciones, sólolectura, conexión)
• Nombre base de datos: Es un String que representa el 
nombre de un archivo de base de datos Microsoft Jet 
existente o el nombre del origen de datos (DSN) de un 
origen de datos ODBC existente.
• Para crear un nuevo objeto Recordset y añadirlo a la 
colección Recordsets:
• Set variable = objeto.OpenRecordset (origen, tipo, 
opciones, bloquearmodificaciones)
• El origen es un String que especifica el origen de los 
registros para el nuevo Recordset. El origen puede ser un 
nombre de tabla, un nombre de consulta o una instrucción 
SQL que devuelve registros.

59
Reference
• Tools / References …
• Select the DAO object:

60
Ejemplo de OpenRecordset
Sub RecordsetExcel()
Dim bd As Database
Dim rs As Recordset
Dim HojaNueva As Object
Dim Neptuno As String
'Ruta predeterminada a la base de datos de ejemplo Neptuno.mdb
Neptuno = "C:\Nicolas\Excel\biblio.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("titles")
'Inserta una nueva hoja de cálculo en el libro activo
Set HojaNueva = ThisWorkbook.Sheets.Add(Type:=xlWorksheet)
'Sitúa los nombres de campo en la fila 1 de la nueva hoja de cálculo
For h = 0 To rs.Fields.Count - 1
HojaNueva.[a1].Offset(0, h).Value = rs.Fields(h).Name
Next h
'Copia el conjunto de registros en Excel
HojaNueva.[a2].CopyFromRecordset rs
'Cierra el conjunto de registros
rs.Close
'Cierra la base de datos
bd.Close
End Sub

61
Recorrer un Recordset
• La copia de los valores en lugar de realizarse con la sentencia:
HojaNueva.[a2].CopyFromRecordset rs

• Se puede realizar recorriendo los registros del recordet y los campos de 
cada registro:
rs.MoveNext
j = 1
Do While (Not rs.EOF)
For h = 0 To rs.Fields.Count - 1
HojaNueva.[a1].Offset(j, h).Value = rs.Fields(h).Value
Next h
j = j + 1
rs.MoveNext
Loop

62
XMLHttpRequest
Sub GetTedScript(id As Integer, lang As String, col As Integer)

Dim i As Integer
Dim URLstr As String, sHTML As String, sAllPosts As String
Dim Http As Object
Dim start As Long, endInt As Long
Dim blWSExists As Boolean

Dim fileStr As String


fileStr = id
'Create a new Worksheet "id-lang" if it doesnt'exist already.
For i = 1 To Worksheets.Count
If Worksheets(i).Name = fileStr Then
blWSExists = True
Worksheets(i).Activate
End If
Next
If Not blWSExists Then
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = fileStr
End If

Crear hoja

63
XMLHttpRequest Nueva URL (2019):
https://www.ted.com/talks/subtitles/id/70/lang/es/format/text

'URL to open: http://www.ted.com/talks/subtitles/id/70/lang/eng


URLstr = "http://www.ted.com/talks/subtitles/id/" & id & "/lang/" & lang

' Create an XMLHTTP object and add some error trapping


On Error Resume Next
Set Http = CreateObject("MSXML2.XMLHTTP")
If Err.Number <> 0 Then
Set Http = CreateObject("MSXML.XMLHTTPRequest")
MsgBox "Error 0 has occured while creating a MSXML.XMLHTTPRequest object"
End If
On Error GoTo 0
If Http Is Nothing Then
MsgBox "For some reason I wasn't able to make a MSXML2.XMLHTTP object"
Exit Sub
End If

'Open the URL in browser object


Http.Open "GET", URLstr, False
Http.Send
sHTML = Http.responseText

Leer URL

64
XMLHttpRequest
'Now extract all text within "content": and startTime
'because they represent the topics
i = 1
start = 1
endInt = 1
Do While start <> 0
i = i + 1
start = InStr(endInt, sHTML, """content"":", vbTextCompare)
If start <> 0 Then
start = start + 11
endInt = InStr(start, sHTML, """startTime"":", vbTextCompare) - 2
phraseStr = Mid(sHTML, start, endInt - start)
phraseStr = Replace(phraseStr, "\""", """")
Worksheets(fileStr).Range("A2").Offset(i, col).Value = _
phraseStr
End If
Loop

'Clean up
Set Http = Nothing

End Sub
Procesar texto

65

También podría gustarte