10-MacrosVBAExcelAvanzado-EAA

Embed Size (px)

Citation preview

  • 7/29/2019 10-MacrosVBAExcelAvanzado-EAA

    1/7

    Excel Avanzado con VBA 10

    Ing. Enrique Alfaro

  • 7/29/2019 10-MacrosVBAExcelAvanzado-EAA

    2/7

    Conexin con ADO (ActiveX Data Object)

    17/02/2013Ing. Enrique Alfaro

    Permite acceder a datos de formatos diferentes aExcel. Veremos un ejemplo con una fuente de datosde Microsoft Access 2007

  • 7/29/2019 10-MacrosVBAExcelAvanzado-EAA

    3/7

    Agregar la LibreraMicrosoft ActiveX Data Objects 2.1

    17/02/2013Ing. Enrique Alfaro

  • 7/29/2019 10-MacrosVBAExcelAvanzado-EAA

    4/7

    Solucin (1/3)

    Sub articulosADO()'Dimensionar variables

    Dim conexion AsADODB.Connection

    Dim recordset AsADODB.recordset

    Dim rutabd, Proveedor, consultasql,cadenaconexion As String'definir la ruta de windows a la base de datos de access

    rutabd = ThisWorkbook.Path & "\Tienda.accdb'definir el proveedor de OLE DB para MS Access 2007

    Proveedor ="Provider=Microsoft.ACE.OLEDB.12.0;Data

    Source="

    17/02/2013Ing. Enrique Alfaro

  • 7/29/2019 10-MacrosVBAExcelAvanzado-EAA

    5/7

    Solucin (2/3)

    'definir la cadena de conexin cadenaconexion = Proveedor & rutabd'Establecer la variable objeto de conexin

    Set conexion = NewADODB.Connection

    'Abrir la conexin conexion.OpenConnectionString:=cadenaconexion'Establecer un juego de registros

    Set recordset = New ADODB.recordset'Establecer la consulta sql

    consultasql = "SELECT * FROM ARTICULOS'Abrir en memoria los registros

    recordset.OpenSource:=consultasql,ActiveConnection:=conexion

    17/02/2013Ing. Enrique Alfaro

  • 7/29/2019 10-MacrosVBAExcelAvanzado-EAA

    6/7

    Solucin (3/3)

    Enviar los nombres de campos a partir de la celda A1Fori = 0 To recordset.Fields.Count - 1 Range("A1").Offset(0, i).Value = recordset.Fields(i).NameNext

    Copiar los registros a partir de la celda A2 Range("A1").Offset(1, 0).CopyFromRecordset

    recordset.DataSourceEnd Sub__________________________________Sub limpiar() ActiveSheet.Range("A1:E13").Clear

    End Sub

    17/02/2013Ing. Enrique Alfaro

  • 7/29/2019 10-MacrosVBAExcelAvanzado-EAA

    7/7

    Resultado

    17/02/2013Ing. Enrique Alfaro