【问题标题】:Linking and importing an Access crosstab query into Excel将 Access 交叉表查询链接并导入 Excel
【发布时间】:2013-11-01 12:49:32
【问题描述】:

如何将交叉表查询导入 Excel 并进行链接?

这些是我从交叉表查询中导入数据的步骤。
数据 >> 导入外部数据 >> 新建数据库查询 >> MS Access 数据源* >> 浏览到我的数据库 >> 选择交叉表查询名称 >> 选择数据。

我需要链接查询,因为会有额外的信息需要输入。例如。这个月是十一月,我需要把这个月收到的数据输入系统。

【问题讨论】:

    标签: excel vba ms-access


    【解决方案1】:

    您实际上可以使用 access 和 Excel“作弊”,通过将交叉表查询包装在非交叉表查询中,无需任何代码即可完成。

    首先,在 Access 中创建一个新查询“我的非交叉表交叉表”,然后为查询源选择 Excel 拒绝查看的交叉表查询。使用 * 字段作为输出输出表中的所有列。

    这个新查询现在将包含交叉表查询中的所有内容,但它本身并不是交叉表查询。

    从 Excel 执行通过查询从 Access 获取数据的步骤,新查询“我的非交叉表交叉表”将可用于插入!

    【讨论】:

      【解决方案2】:

      由于某种原因,Excel 不会在您可以选择的表/查询列表中显示交叉表查询,但可以在没有 VBA 的情况下添加它,并且此后它将像普通表一样更新,您只需在连接属性中输入一些基本的 SQL。

      说明适用于 Excel 2016,未在先前版本中测试。

      1. 在与交叉表查询相同的 Access 数据库中创建指向不同表或查询的数据链接(从通常的数据 -> 从 Access)。

      2. 单击新显示的表格中的任意位置,然后从“设计”选项卡中单击“属性”以打开“外部数据属性”对话框。

      3. 选择右侧“名称:”字段旁边的小按钮以打开连接属性。

      4. 转到“定义”选项卡并将命令类型更改为“SQL”

      5. 输入一段基本的 SQL: SELECT * FROM YourCrossTabQueryName

      6. 点击确定。

      这应该会刷新表格并显示您的交叉表。

      【讨论】:

        【解决方案3】:

        不是导入数据,而是在excel中:

        1. 从文件菜单中选择数据
        2. 从要从中提取数据的 Access 对象(表或查询)中选择。
        3. Excel 中的数据加载
        4. 如果您想更新数据,请右键单击数据并选择刷新,如果存在多个链接,请选择全部刷新。

        这假定数据库在每次刷新时都位于相同的物理位置,并且您已连接到此源。

        【讨论】:

          【解决方案4】:

          我发现如果后端数据库是 Access accdb 文件则不能

          https://excelandaccess.wordpress.com/2013/07/26/how-to-import-access-data-to-excel-using-the-get-external-data-from-access-option/

          "这里应该注意,虽然目前无法从 Access 导入交叉表查询,但可以将支持交叉表的数据作为数据透视表导入(毕竟,数据透视表本质上是 Excel 版本的 Access 交叉表)查询)。”

          您必须导入源数据,然后创建数据透视表

          【讨论】:

            【解决方案5】:

            但你可以用 VBA 做到这一点:

            Function ImportCrosstab(TheDB As String, TheCrosstab As String, TheSpreadsheet As String)
             'requires a reference to the  Microsoft Office Access Database Engine 12.0 Object Library
             'e.g.ImportCrosstab "C:\Databases\Newdatabase.accdb", "Q_stage_crosstab", "CompliancebyStage"
            
             Dim db As Database
             Dim qdf As QueryDef
             Dim rs As Recordset
             Dim ws As Worksheet
             Dim strConnection As String
             Dim j As Long
             Dim xls As Object    'your Excel.Application with sheet activated
            
             Set ws = ThisWorkbook.Worksheets(TheSpreadsheet)
            
            
             Set db = OpenDatabase(TheDB)
             Set qdf = db.QueryDefs(TheCrosstab)
             Set rs = qdf.OpenRecordset
             With ws
                 For j = 0 To rs.Fields.Count - 1
                     .Cells(1, j + 1).Value = rs.Fields(j).Name
                 Next
                 .Range("A2").CopyFromRecordset rs
             End With
             rs.Close
            End Function
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-10-15
              • 1970-01-01
              • 1970-01-01
              • 2010-11-11
              • 1970-01-01
              • 1970-01-01
              • 2016-10-11
              相关资源
              最近更新 更多