首页 > 解决方案 > 从 excel 表在 VBA 中创建一个临时表以用于 sql 查询

问题描述

是否有可能从 excel 命名表中获取数据并在 sql 语句中引用它?到目前为止,我使用 Power Query,但它需要从 sql 表中获取所有数据,并且它有超过 200k 行并且需要超过 30 秒。通常有 1-20 行可以放置数据,但非常频繁。

假设sheet1中有excel_table和 sql 连接。

我想:

SELECT a.contract, a.part_no, a.vendor_no
FROM sql_table a
INNER JOIN excel_table b on a.contract_no = b.contract_no and a.part_no = b.part_no

我真的是VBA的初学者。到目前为止,我只能通过制作一个公式来连接文本并将其放在 where 子句中,从而使用单元格范围来获取 part_no,如下所示:

Sub Makro1()

Dim qt As QueryTable
Dim cell_value As String
cell_value = Arkusz3.Range("A1")


sqlstring = "SELECT a.* FROM sql.table a WHERE a.part_no in (" & cell_value & ")"

connstring = "ODBC;DSN=XXX;UID=XXX;PWD=XXX;Database=XXX"

With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("C3"), Sql:=sqlstring)

 .Refresh

End With
End Sub

更重要的是,每次刷新它都不会替换返回的数据,而是插入新列并将旧列向右移动。

我会很高兴得到一些帮助和一些初学者的建议。最好能逐行解释代码。

标签: sqlexcelvba

解决方案


推荐阅读