将MS查询嵌入到Excel中

时间:2015-06-02 10:07:13

标签: excel vba excel-vba

我制作了一份包含几个复杂工作表的Excel工作簿。

现在我使用MS查询创建了查询,以便我可以从这些不同的工作表中收集计算所需的信息。在将工作簿移动到新位置之前,一切正常。

由于这种情况经常发生,每次我想知道是否有办法将查询链接到工作簿本身而不是特定的文件位置时,我都不想重建查询。

有人能帮助我吗?

这是查询的SQL构建

SELECT `'Production Plan$'`.`Scheduled Operation`, `Tests$`.`Test Name`, `Tests$`.`Tests per batch`, `Tests$`.`Ops PER BATCH or PER YR:`, `Tests$`.`Total Locations (MULTIPLIER):`, `Tests$`.`Retest Rate`, `'Production Plan$'`.`Batches for 2015`, `'Production Plan$'`.`Batches for 2016`, `'Production Plan$'`.`Batches for 2017`, `'Production Plan$'`.`Batches for 2018`
FROM `C:\Users\UGent\Desktop\XXX\XXX\Models\new model SV 0106.xlsx`.`'Production Plan$'` `'Production Plan$'`, `C:\Users\UGent\Desktop\XXX\XXX\Models\new model SV 0106.xlsx`.`Tests$` `Tests$`
WHERE `'Production Plan$'`.`Scheduled Operation` = `Tests$`.`Scheduled Operation:`

这是连接字符串

DSN=Excel Files;DBQ=C:\Users\UGent\Desktop\BQG\Genzyme\Models\new model SV 0106.xlsx;DefaultDir=C:\Users\UGent\Desktop\BQG\Genzyme\Models;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;

1 个答案:

答案 0 :(得分:1)

  

我想知道是否有办法将我的查询链接到工作簿   本身而不是特定的文件位置

- 您无法将查询“链接”到Excel工作簿(因为我知道)没有机制来跟踪您如何移动源Excel工作簿。

你能做什么?

选项1 - 手动重新连接

编写将重新创建SQL查询的VBA宏。它可以像这样工作:

  1. 打开工作簿时,VBA宏会在Workbook.Open event

  2. 上运行
  3. Event宏检查源工作表是否位于正确的文件路径中。如果不是那么(3)

  4. 如果文件不存在,则重新创建然后显示一个弹出窗口,询问新文件路径。当用户单击“确定”时,通过VBA宏重新创建SQL查询。您可以使用宏录制来提取必要的VBA或查看here

  5. 如何在VBA中创建MS Query的一些示例代码:

    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
            "ODBC;DSN=Excel Files;DBQ=C:\test.xlsx;DefaultDir=C:\;DriverId=1046;Ma" _
            ), Array("xBufferSize=2048;PageTimeout=5;")), Destination:=Range("$A$1")). _
            QueryTable
            .CommandType = 0
            .CommandText = Array( _
            "SELECT `Sheet1$`.A, `Sheet1$`.B" & Chr(13) & "" & Chr(10) & "FROM `C:\test.xlsx`.`Sheet1$` `Sheet1$`" _
            )
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .ListObject.DisplayName = "Table_Query_from_Excel_Files"
            .Refresh BackgroundQuery:=False
        End With
    

    选项2 - 将Excel推送到网络位置

    尝试将工作簿定位到网络位置,该位置不需要经常询问源文件路径。您甚至可以将其作为链接。它可以像这样工作:

    1. 使用VBA或Data功能区

    2. 上的工具下载文件
    3. 按上述方式重新创建查询

    4. 选项3 - 将Excel源数据推送到SQL

      等数据库
      1. 将数据推送到SQL Server,MySQL或其他易于访问的数据库

      2. 从主工作簿

      3. 建立永久SQL.OLEDB连接