OK so I have this function which queries a database using a query string that I pass to it.
At the moment it outputs the query result in the worksheet.
How do I just get the function to give me the result as a range that I can use in VBA to perform calculations etc? How would I then reference this range? E.g. to get the “Name” column in the result.
Function Access_Data(query As String)
'Requires reference to Microsoft ActiveX Data Objects xx Library
Dim Cn As ADODB.Connection, Rs As ADODB.Recordset
Dim MyConn, sSQL As String
Dim Rw As Long, Col As Long, c As Long
Dim MyField, Location As Range
'Set destination
Set Location = Sheets(1).Range("a1")
'Set source
MyConn = "S:\Docs\Harry\Engine Client\Engine3.accdb"
'Create query
sSQL = query
'Create RecordSet
Set Cn = New ADODB.Connection
With Cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open MyConn
Set Rs = .Execute(sSQL)
End With
'Write RecordSet to results area
Rw = Location.Row
Col = Location.Column
c = Col
Do Until Rs.EOF
For Each MyField In Rs.Fields
Cells(Rw, c) = MyField
c = c + 1
Next MyField
Rs.MoveNext
Rw = Rw + 1
c = Col
Loop
Set Location = Nothing
Set Cn = Nothing
End Function
This will return a multi-dimension array. A range must refer to some portion of a worksheet: you cannot create an “invisible” range. (Though you can make a portion of a worksheet invisible, if that’s what you’re after.)
To access the results: