这是通过打开 Access 查询并将数据导入 ActiveSheet 的解决方案:
'
' inputs:
' strDbName: database filename
' strQry: query name
' strDataSheet: destination DataSheet name, to be erased with newdata
'
Function daoDoQueryCopyRecordset(ByVal strDbName, ByVal strQry, _
ByVal strDataSheet)
'
Dim objApp, qdf
Dim rst As DAO.Recordset
'
Set objApp = CreateObject("Access.Application")
'
objApp.OpenCurrentDatabase strDbName
'
' get Recordset:
'
Set qdf = objApp.CurrentDb.QueryDefs(strQry)
Set rst = qdf.OpenRecordset(dbOpenDynaset)
'
If (rst.EOF) Then
Set rst = Nothing
Set qdf = Nothing
objApp.Quit
Set objApp = Nothing
daoDoQueryCopyRecordset = 0
Exit Function
End If
'
' create a new Excel Workbook to write results:
'
Application.ScreenUpdating = False
'
' Workbooks.Add
'
' transfer data to Excel:
'
ActiveWorkbook.Sheets(strDataSheet).Select
'
ActiveSheet.Range("A4").CopyFromRecordset rst
'
Application.ScreenUpdating = True
'
rst.Close
Set rst = Nothing
Set qdf = Nothing
objApp.Quit
Set objApp = Nothing
'
daoDoQueryCopyRecordset = 1
'
End Function
Function daoDoQueryCopyRecordsetNoParams()
'
Dim strDbName, strQry, strDataSheet
'
strDbName = ActiveWorkbook.Path & "\FIMS_CDFT_Database.mdb"
strDataSheet = ActiveSheet.Name
strQry = strDataSheet
'
daoDoQueryCopyRecordsetNoParams = _
daoDoQueryCopyRecordset(strDbName, strQry, strDataSheet)
'
End Function
您可以使用以下方法调用任何 Excel 宏中的最后一个函数:
daoDoQueryCopyRecordsetNoParams
!!!小心,当前数据表将被新数据擦除。