使用 VBA 从 .MDB 文件中的 table 读取数据到 Excel 2013

Read data from a table in .MDB file into Excel 2013 with VBA

我正在尝试将一些数据从 Access .MDB 文件导入到 Excel 2013 传播sheet。

到目前为止,我已经尝试将数据库转换为 2007 格式,但没有奏效(到目前为止我已经尝试了 2 种方法)

有没有一种更简单的方法可以将数据直接从 .MDB 文件中的 table 导入我的 Excel 2013 spreadsheet 中的 sheet? (最终结果)

Sub convertaccessdb()
Application.ConvertAccessProject _
 SourceFilename:="C:\new\pabxcalls.mdb", _
 DestinationFilename:="C:\My Documents\pabxcalls2007.accdb", _
 DestinationFileFormat:=acFileFormatAccess2007
End Sub
' **** THIS GIVES AN RUNTIME ERROR 438 - OBJECT DOESN'T SUPPORT THIS PROPERTY OR METHOD ***

Sub Command7_Click()
Dim app As New Access.Application
app.Visible = True
app.AutomationSecurity = msoAutomationSecurityLow
app.SysCmd 603, "C:\New\pabxcalls.mdb", "C:\new\pabxcalls_new.mdb"
Set app = Nothing
End Sub
' *** THIS RUNS, BUT DOES NOT OUTPUT THE FILE REQUIRED ***

谢谢大家!!!

发现我实际上不必转换数据库。只需使用查询和 ADODB 连接拉取数据,如下所示。

谢谢!

Sub GetCallData()

Dim objAdoCon As Object
Dim objRcdSet As Object
Dim DailyOutgoing, DailyIncoming, MonthlyOutgoing, MonthlyIncoming As String

DailyOutgoing = "SELECT calls.Extension,Sum(calls.Duration) FROM calls WHERE (((calls.Calldate)=Date())) AND (((calls.calltype)=""O"")) GROUP BY calls.Extension, calls.Calldate ;"
DailyIncoming = "SELECT calls.Extension,Sum(calls.Duration) FROM calls WHERE (((calls.Calldate)=Date())) AND (((calls.calltype)=""I"")) GROUP BY calls.Extension, calls.Calldate ;"

Set objAdoCon = CreateObject("ADODB.Connection")
Set objRcdSet = CreateObject("ADODB.Recordset")

 objAdoCon.Open "Provider = Microsoft.Jet.oledb.4.0;Data Source = \remotehost\PABXSoft\Call Collector\Data\pabxcalls.mdb"

 ' *** GET DAILY OUTGOING ***

 ThisWorkbook.Worksheets("CALL_DATA").Range("A3:B24").Value = ""
 objRcdSet.Open DailyOutgoing, objAdoCon
 ThisWorkbook.Worksheets("CALL_DATA").Range("A3").CopyFromRecordset objRcdSet
Set objRcdSet = Nothing

 ' *** GET DAILY INCOMING ***

Set objRcdSet = CreateObject("ADODB.Recordset")
 ThisWorkbook.Worksheets("CALL_DATA").Range("A27:B46").Value = ""
 objRcdSet.Open DailyIncoming, objAdoCon
 ThisWorkbook.Worksheets("CALL_DATA").Range("A27").CopyFromRecordset objRcdSet

Set objAdoCon = Nothing
Set objRcdSet = Nothing

End Sub