Gegevens ophalen met ADO

ADO betekent “ActiveX Data Objects“. Kun je verder vergeten. Wat kun je er mee? Gegevens ophalen uit een ander (Excel)bestand. Dat andere bestand fungeert dan als een soort database. Wat mij betreft kun je net zo goed het bestand openen en de gegevens die je nodig hebt filteren en vervolgens kopiëren om er verder mee te werken.

Excel bestand is tabellen.xlsx en de data staat op het blad shippers. Zie onderstaand screenshot. Dat bestand kun je zelf aanmaken en dan openen in Excel om het te kunnen lezen.

Wie persé die voorziening wil gebruiken hier twee voorbeelden.
Onderstaande code kopieren en plakken in blanco werkmap. Zorg dat de blanco werkmap op de voorgrond staat en dan de code laten uitvoeren.

VOORBEELD 1

Option Explicit

'***********************************************
'Set reference to:
'Microsoft ActiveX Data Objects Library
'Via: Alt+F11 | Extra | References
'***********************************************

Sub Voorbeeld_ADO_Verbinding_Voorbeeld_1()
    Dim objVerbinding As New ADODB.Connection
    Dim objGegevensSet As New ADODB.Recordset
    Dim strPad As String, strVerbind As String, strSQL As String
    
    'Path to file
    strPad = "C:\temp\tabellen.xlsx"
    
    strVerbind = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & strPad & ";HDR=Yes';"
    
    objVerbinding.Open strVerbind
    
    'Tablename is de sheetname in this example [shippers$]
    'Dollarsign is mandatory behind shippers.
    strSQL = "SELECT * From [shippers$]"
        
    objGegevensSet.Open strSQL, objVerbinding
    
    'Paste data in activesheet
    ActiveSheet.Range("A2").CopyFromRecordset objGegevensSet
    
    'Close dataset
    objGegevensSet.Close
    
    'Close connection
    objVerbinding.Close
End Sub

VOORBEELD 2

Option Explicit

'***********************************************
'Set reference to:
'Microsoft ActiveX Data Objects Library
'Via: Alt+F11 | Extra | References
'***********************************************

Sub Voorbeeld_ADO_Verbinding_Voorbeeld_2()
    Dim arrMatrix As Variant
    Dim objVerbinding As New ADODB.Connection
    Dim objGegevensSet As New ADODB.Recordset
    Dim strPad As String, strVerbind As String, strSQL As String
    Dim i As Long, j As Long
    
    'Path to file
    strPad = "C:\temp\tabellen.xlsx"
    
    strVerbind = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & strPad & ";HDR=Yes';"
    
    objVerbinding.Open strVerbind
    
    'Tablename is de sheetname in this example [shippers$]
    'Dollarsign is mandatory behind shippers.
    strSQL = "SELECT * From [shippers$]"
        
    objGegevensSet.Open strSQL, objVerbinding
    
    'Load data in Array
    arrMatrix = objGegevensSet.GetRows
    
    'Paste data from array to activesheet
    For i = 0 To UBound(arrMatrix, 2) 'Rows
        For j = 0 To UBound(arrMatrix, 1) 'Columns
            ActiveSheet.Cells(i + 2, j + 1).Value = arrMatrix(j, i)
        Next j
    Next i
    
    'Close dataset
    objGegevensSet.Close
    
    'Close connection
    objVerbinding.Close
End Sub

Leave a Reply

Your email address will not be published. Required fields are marked *