将查询从 Access 复制到 Excel
Posted
技术标签:
【中文标题】将查询从 Access 复制到 Excel【英文标题】:Copy Query from Access to Excel 【发布时间】:2018-03-28 03:24:52 【问题描述】:我在尝试将查询从 Access 导入 Excel 时遇到了一些问题。
几天前,我编写了一个代码(在 Google 的帮助下哈哈)将表格从 Access 导入 Excel:
Sub importQuery(DBFullName As String, data_sht As Worksheet)
Dim cn As Object, rs As Object
Dim i As Integer
Dim TargetRange As Range
Dim rows As Long, cols As Long
Dim dataEmpty As Boolean
Dim lastColString As String
data_sht.Activate
Application.ScreenUpdating = False
Set TargetRange = data_sht.Range("A1")
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.Ace.OLEDB.12.0; Data Source=" & DBFullName & ";" 'the Access file is .accdb
Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM C_Paso2_SM_Cuplas", cn, , , adCmdUnspecified
cols = rs.Fields.Count
rows = data_sht.Range("A" & data_sht.rows.Count).End(xlUp).Row
' Copy titles of the Access Query
For i = 0 To (cols - 1)
TargetRange.Offset(0, i).Value = rs.Fields(i).Name
Next
' Copy data
TargetRange.Offset(1, 0).CopyFromRecordset rs
End Sub
该代码有效,但当我这样做时:
rs.Open "SELECT * FROM C_Paso2_SM_Cuplas", cn, , , adCmdUnspecified
我正在从同一个文件中导入另一个名为 C_Paso1_SM_Cuplas 的查询。我能做些什么?为什么我说 C_Paso2_SM_Cuplas 时要导入 C_Paso1_SM_Cuplas?是否有其他可能将 Access Query 导入 Excel?
【问题讨论】:
我不太确定你在问什么。您发布的有问题的查询与您的代码中的查询完全相同。有什么问题?你遇到了什么错误? 我正在尝试导入 C_Paso2_SM_Cuplas 但代码导入了 C_Paso1_SM_Cuplas!看到区别:我需要 Paso2,它导入 Paso1。当我导入表而不是查询时,它工作正常C_Paso2_SM_Cuplas
有记录吗?在End Sub
之前添加rs.Close
、Set rs = Nothing
、cn.Close
和Set cn = Nothing
。
不,只有一个 C_Paso2_SM_Cuplas。但是data_sht中粘贴的数据是来自C_Paso1_SM_Cuplas的数据
你的代码可以显示C_Paso2_SM_Cuplas
的标题吗?
【参考方案1】:
试试这个 DAO 解决方案。
Sub ImportFromAccessToExcel()
Dim db1 As Database
Dim db2 As Database
Dim recSet As Recordset
Dim strConnect As String
Set db1 = OpenDatabase("C:\Database1.mdb")
strConnect = db1.QueryDefs("Query3").Connect _
& "DSN=myDsn;USERNAME=myID;PWD=myPassword"
Set db2 = OpenDatabase("", False, False, strConnect)
db2.Close
Set db2 = Nothing
Set recSet = db1.OpenRecordset("Query3")
With ActiveSheet.QueryTables.Add(Connection:=recSet, Destination:=Range("$A$4"))
.Name = "Connection"
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
recSet.Close
db1.Close
Set recSet = Nothing
Set db1 = Nothing
End Sub
【讨论】:
我可以在星期二试一试。但是为什么需要密码?这是一个访问文件。它会在 .accdb 而不是 .mdb 中工作吗?谢谢 这只是一个例子。如果您不需要密码,只需将其保留。您可以使用下面的链接找到 Access 的各种连接字符串。 connectionstrings.com/access以上是关于将查询从 Access 复制到 Excel的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 将数据从 MS Access 复制到 MS Excel
使用 VBA 获取 Excel 选项卡名称并复制到 Access 表