如何从访问中将数据拉入excel?

时间:2015-08-11 07:01:31

标签: excel vba excel-vba ms-access

我有一张excel工作表,有两张纸。在第一个我有可打印页面,第二个表是第一个从使用vlookup拉数据。第二张纸由8列组成。第一列是vlookup在第一页上使用的ID。第二个是名/姓。我想要做的是在访问数据库中进行excel搜索(名/姓),然后从访问中的数据中检索并填充3个其他列。有2个表我想让它调查。它将在其中任何一个中找到该名称,并且没有重复项。有谁知道我怎么做到这一点?谢谢!

1 个答案:

答案 0 :(得分:0)

你有几个选择。一种是使用"数据获取外部数据"来使用.ODC。如果您完成向导,则可以将搜索条件存储在外部数据链接中(如果需要,请将其另存为.ODC文件)。如果在执行此操作时录制宏,您将看到可以在哪里更改录制的VBA代码以替换Excel中的自己的条件(例如,第一/ Lame名称)。

另一种方式,如果你的数据太大,那就不要带一张带有" Data-GetExternalData"包含所有数据然后使用VLookup(或索引/匹配)来检索适当的名称。当您的数据库不是太大而无法有效地完全进入Excel时,这种方法很有效。

但我使用以下代码,因为它的光滑并且不需要在.ODC(存储的外部数据链接)中公开任何连接信息(包括密码)。它也更快。在此示例中,我使用ADO,因为它是SQL / Server数据库,但如果数据位于Access(.ACCDB或MDB)中,则可以使用普通DAO。如果您需要ADO,请不要忘记在参考文献中包含ADO库。

在我的例子中,我使用日期范围来查找我想要的数据。在您的情况下,它将是Lname和Fname而不是日期范围。

这个Excel VBA代码就是我使用的。

Sub RefreshReport()
On Error GoTo Err_Handler
verrevent = "RefreshReport"

Dim rs As New ADODB.Recordset
If cn.State = 0 Then OpenNewConnection
Dim xlRange As Excel.Range


'Delete prior data
Range("MyTargetTable").EntireRow.Delete

'Call sproc to fetch member match
'This uses SPROC, but could be any SQL statement passing search criteria from Excel
vsql = "sproc_my_procedure '" & Range("BegDate") & "' ,'" & Range("EndDate") & "'"


'Call sproc to fetch member match
Set xlRange = Range("MyTargetDataSheet!A2")

Set rs = cn.Execute(vsql)
xlRange.Cells.CopyFromRecordset rs

'Refresh a pivot table if you have one
Set pt = Sheets("Summary").PivotTables("PivotTable1")
pt.RefreshTable


MsgBox ("Refresh Complete")

Exit_Proc:
    Exit Sub

Err_Handler:
    MsgBox ("Refresh program error.  Please snip and send." & vbCrLf & vbCrLf & "Err " & Err.Number & " " & verrevent & " " & vbCrLf & Err.Description & vbCrLf)
    Resume Exit_Proc

End Sub