使用 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 中将多个不同的字段作为列表项返回

MS ACCESS, VBA 将外部 MS Access 表导入 SQL server 表

使用 VBA 将 CSV 文件导入 Access

VBA 将 Excel 文件从 Access 保存为 .xls