【问题标题】:Importing specific Access table data into Excel using Excel as the front end以Excel为前端将特定Access表数据导入Excel
【发布时间】:2014-07-08 23:36:02
【问题描述】:

我正在尝试将输入 Excel 的数据存储和检索到 Access 中。我是一个 Access 新手,并且已经在前端有一个 Excel 程序,引导我从 Excel 驱动导入。我已经成功地弄清楚如何将我的 Excel 命名范围保存到所需的 Access 表中,但现在我需要弄清楚如何将特定数据从该 Access 表中拉回 Excel。我知道我可以简单地使用 Excel 中的“获取外部数据”功能将整个 Access 表导入 Excel,但我需要能够根据一组预定的参数仅将表的特定部分导入 Excel。这可以吗?

作为程序的背景,它基本上存储来自零件编号运行的数据。我不仅需要将新零件运行保存到 Access 数据库中(我想通了),而且我还需要能够将以前的零件编号运行从 Access 拉回 Excel 以执行进一步分析。这就是为什么我需要弄清楚如何只导入表格的特定部分。我不确定我可以发布哪些代码(如果有的话),因为我基本上是从头开始寻找代码;但是,如果您认为我的 Excel 程序中需要任何代码,我很乐意提供。谢谢你的帮助。下面是代码:

Sub GetSpecData()
Application.ScreenUpdating = False
'*******************************************************************************
'Open the connection to the data source.
Set Connection = New ADODB.Connection
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & "Data Source=\\Server2013\network_shared\QC SHARED\Databases\P&Q_Tracking_Data_Storage.mdb;"
'*******************************************************************************
'Create the new RecordSet.
Set Recordset = New ADODB.Recordset
With Recordset
'Define the appropriate Filter(s) and notify the user of the selection criteria.
    Src = "Select * from Raw_Data where Tag = 'GHI' "
    Src = Src & "or Tag = 'DEF' "
    Src = Src & "or Tag = 'LMN'"
    .Open Source:=Src, ActiveConnection:=Connection
    'Write the field names.
    For ODCol = 0 To .Fields.Count - 1
        Tracking.Sheets("Selected Past Data").Range("B7").Offset(0, ODCol).Value = .Fields(ODCol).Name
    Next
    'Write the recordset.
    Tracking.Sheets("Selected Past Data").Range("B7").Offset(1, 0).CopyFromRecordset Recordset
End With
Set Recordset = Nothing
Connection.Close
Set Connection = Nothing
'*******************************************************************************
'Create and format the table from the Recordset.
With Tracking.Sheets("Selected Past Data")
    DataLastRow = .Range("A" & Rows.Count).End(xlUp).row
    .ListObjects.Add(xlSrcRange, Range("B7:M" & DataLastRow), , xlYes).Name = "INC2tbl"
    .ListObjects("INC2tbl").ShowTotals = True
End With
Application.ScreenUpdating = True
'*******************************************************************************

结束子

在谷歌搜索下面评论中的建议后,我有几个问题。首先,上面的代码似乎通过三个键过滤访问数据:GHI、DEF 和 LMN。我的解释正确吗?其次,它说“Select * from Raw_Data where Tag = 'GHI'”,因为那是引号,这不是将要执行的实际代码,对吗?这只是一个提示或类似的东西,对吗?

【问题讨论】:

  • 谷歌搜索“excel vba adodb.connection 访问数据库”。这会对你有所帮助。
  • 下面是我为这个过程创建的子。在谷歌搜索上述内容后,我仍在根据我在网上找到的代码对其进行调整。我有几个问题。
  • 更新了上面的原始问题以包含代码和有关它的问题。谢谢。

标签: vba ms-access excel ms-access-2007


【解决方案1】:

从表中选择 *;输出到表名.EXL 格式化 sql;

【讨论】:

  • 能否请您使用实际代码详细说明一下?谢谢。
【解决方案2】:

首先,上面的代码似乎将访问数据过滤了三个 键:GHI、DEF 和 LMN。我的解释正确吗? 第二, 上面写着“Select * from Raw_Data where Tag = 'GHI'”,因为 那是引号,这不是将要执行的实际代码, 正确的?这只是一个提示或类似的东西,对吗?

第一个问题和第二个问题密切相关,所以我将作为一个问题来回答。这里的基本思想是存在与您定义的数据库的连接(在 Connection.Open 语句中)。连接本身什么也不做;建立连接。与数据库的实际通信是用一种特定的语言完成的,称为 SQL(有许多方言,但为了简单起见,暂时称它为 SQL)。所以你的代码是用 VBA 语言编写的,但与数据库的通信是用 SQL 完成的。 VBA 代码必须生成 SQL 语句(这些是字符串,所以你需要引号)。这就是 Src 变量所持有的;和 SQL 语句。在这种情况下:

"Select * from Raw_Data where Tag = 'GHI' or Tag = 'DEF' or Tag = 'LMN'"

我认为这里不是教你 SQL 的地方,但是网上有很多关于它的信息。该语句的作用是:

选择表“Raw_Data”中的所有列,但只选择Tag 列中包含“GHI”、“DEF”或“LMN”的那些数据行。

因此,要从表“part_numbers”接收所有数据,您必须使用:

"SELECT * FROM part_numbers;"

如果您只需要导入列“col_1”和“col_2”,您可以使用:

"SELECT col_1,col_2 FROM part_numbers;"

如果您只需要导入列“col_1”和“col_2”,并且只需要导入“part_id”低于 1000 的行,则可以使用:

"SELECT col_1,col_2 FROM part_numbers WHERE part_id < 1000;"

真的是这样。现在,如果您的记录集(将其视为包含您要求的数据的数组)已经查询了数据库,您可以循环它来解析数据。比如:

Set Recordset = Connection.Execute(Src)
Do until Recordset.EOF
    debug.print Recordset!col_1
    Recordset.movenext
loop

再次,谷歌搜索类似:“vba excel adodb access”,你会找到很多例子。

【讨论】:

  • 非常感谢@Jzz。这确实有很大帮助。
【解决方案3】:

在研究了更多 SQL 代码格式之后,我对这个主题有了更多的了解。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2014-11-19
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多