Use a closed workbook as a database (DAO)
With the procedures below you can use DAO to retrieve a recordset from a closed workbook and read/write data. In the example below, replace SheetName with the worksheet name you want to retrieve data from.
' call the procedure like this:
' GetWorksheetData "C:\Foldername\Filename.xls", "SELECT * FROM [SheetName$]", ThisWorkbook.Worksheets(1).Range("A3")
Sub GetWorksheetData(strSourceFile As String, strSQL As String, TargetCell As Range)
Dim db As DAO.Database, rs As DAO.Recordset, f As Integer, r As Long
If TargetCell Is Nothing Then Exit Sub
On Error Resume Next
Set db = OpenDatabase(strSourceFile, False, True, "Excel 8.0;HDR=Yes;")
' read only
'Set db = OpenDatabase(strSourceFile, False, False, "Excel 8.0;HDR=Yes;")
' write
'Set db = OpenDatabase("C:\Foldername\Filename.xls", False, True, "Excel 8.0;HDR=Yes;") ' read only
'Set db = OpenDatabase("C:\Foldername\Filename.xls", False, False, "Excel 8.0;HDR=Yes;") ' write
On Error GoTo 0
If db Is Nothing Then
MsgBox "Can't find the file!", vbExclamation, ThisWorkbook.Name
Exit Sub
End If
' ' list worksheet names
' For f = 0 To db.TableDefs.Count - 1
' Debug.Print db.TableDefs(f).Name
' Next f
' open a recordset
On Error Resume Next
Set rs = db.OpenRecordset(strSQL)
' Set rs = db.OpenRecordset("SELECT * FROM [SheetName$]")
' Set rs = db.OpenRecordset("SELECT * FROM [SheetName$] WHERE [Field Name] LIKE 'A*'")
' Set rs = db.OpenRecordset("SELECT * FROM [SheetName$] WHERE [Field Name] LIKE 'A*' ORDER BY [Field Name]")
On Error GoTo 0
If rs Is Nothing Then
MsgBox "Can't open the file!", vbExclamation, ThisWorkbook.Name
db.Close
Set db = Nothing
Exit Sub
End If
RS2WS rs, TargetCell
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
End Sub
You’ll find the procedure RS2WS by clicking on this link.
The macro examples assumes that your VBA project has added a reference to the DAO object library. You can do this from within the VBE by selecting the menu Tools, References… and selecting the Microsoft DAO x.xx Object Library.
Erlandsen Data Consulting