使用 VBA 从 Access 表中将选定的列导入 Excel
Posted
技术标签:
【中文标题】使用 VBA 从 Access 表中将选定的列导入 Excel【英文标题】:Import Selected Columns to Excel from Access Table using VBA 【发布时间】:2014-09-22 22:49:15 【问题描述】:我正在尝试从访问表中导入选定的数据。该表有 4 列,我只想要第 2 列和第 3 列。在 Excel 中并希望它们按以下顺序列出:第 3 列、第 2 列(与它们在 Access 中的方式相反)。此外,我想根据 Excel 电子表格中引用的日期(我在代码中将其称为 RpDate)选择行(从 Access 表)。在 Access 中,“日期”是第一列。我需要一些帮助。谢谢。
Sub ADOImportFromAccessTable()
Dim DBFullName As String
Dim TableName As String
Dim TargetRange As Range
Dim RpDate As Range
DBFullName = "C:\Documents\Database.mdb"
TableName = "DataTable"
TargetRange = Range("C5")
RpDate = Range("B2").Value
Dim cn As ADODB.Connection, rs As ADODB.Recordset, intColIndex As Integer
Set TargetRange = TargetRange.Cells(1, 1)
' open the database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
"C:\Documents\Database.mdb" & ";"
Set rs = New ADODB.Recordset
With rs
' open the recordset
.Open TableName, cn, adOpenStatic, adLockOptimistic, adCmdTable
' all records
.Open "SELECT * FROM " & TableName & _
" WHERE [Date] = RpDate, cn, , , adCmdText"
' filter rows based on date
rs.Open , TargetRange
End With
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
【问题讨论】:
您的问题是什么?你哪里有问题?有什么错误吗? 另外,给我们列的名称。我猜,解决方案类似于SELECT Column2, Column3 FROM table WHERE [Date] = RpDate ORDER BY Column3, Column2
列名(按顺序)为:日期、时间、坦克、评论。我只希望将 Tank 和 Time 列按 Tank、Time 的顺序导入 Excel。
我也收到编译错误:未定义子或函数。它指的是 "WHERE" .Open TableName, cn, adOpenStatic, adLockOptimistic, adCmdTable .Open "SELECT Time, Tank * FROM " & TableName WHERE [Date] = "RpDate", "ORDERBY Tank, Time, cn, , , adCmdText " rs.Open , TargetRange
你需要右引号ORDERBY Tank, Time", cn, , , adCmdText
【参考方案1】:
试试这个
Sub ADOImportFromAccessTable()
Dim DBFullName As String
Dim TableName As String
Dim TargetRange As Range
Dim RpDate As Range
DBFullName = "C:\Documents\Database.mdb"
TableName = "DataTable"
Set TargetRange = Range("C5")
RpDate = Range("B2").Value
Dim cn As ADODB.Connection, rs As ADODB.Recordset, intColIndex As Integer
Set TargetRange = TargetRange.Cells(1, 1)
' open the database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
"C:\Documents\Database.mdb" & ";"
Set rs = New ADODB.Recordset
With rs
' open the recordset
.Open TableName, cn, adOpenStatic, adLockOptimistic, adCmdTable
' all records
.Open "SELECT Time, Tank FROM " & TableName & " WHERE [Date] = " & RpDate & " ORDER BY Tank, Time", cn, , , adCmdText
' filter rows based on date
End With
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
这不是 SQL 注入的教授,而是一个开始
【讨论】:
我收到运行时错误:对象变量或未设置块变量。它位于 TargetRange = Range("C5") 我编辑了代码,但之前有错误,你没有提到它,它与你的问题无关。只需在分配对象之前添加Set
谢谢。我收到另一个运行时错误“3705”:对象打开时不允许操作。 With rs .Open TableName, cn, adOpenStatic, adLockOptimistic, adCmdTable .Open "SELECT Time, Tank FROM " & TableName & " WHERE [Date] = " & RpDate & " ORDER BY Tank, Time", cn, , , adCmdText 'The错误在上面的行 rs.Open , TargetRange End With
我试图弄清楚如何处理最后一个错误。我相信即使在那之后它也需要一些调整。
我无法修复此错误,请@Horaciux 提供更多帮助以上是关于使用 VBA 从 Access 表中将选定的列导入 Excel的主要内容,如果未能解决你的问题,请参考以下文章
从 Excel 调用 VBA 函数 - 在选定工作表上的选定列中查找
Excel 工作表名称不允许使用 VBA 将数据导入 Access - DAO
在列表框 ms-access 2013 VBA 中将多个不同的字段作为列表项返回