【问题标题】:joining two subtables in excel VBA在excel VBA中加入两个子表
【发布时间】:2021-03-13 22:29:06
【问题描述】:

我正在尝试从查询 1 和 2 创建的 2 个子表中进行连接我尝试了许多不同类型的组合,但我不断收到错误,我该如何正确地做到这一点?下面的代码说我不支持表达式连接。

Sub test()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

StrFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & StrFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"


Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon
strsql = "(SELECT tab.Categoria AS cat1, sum(tab.Vo) AS somavo FROM [Fluxo de caixa$A1:P2638] tab GROUP BY tab.Categoria)"
strsql2 = "(SELECT tab2.Categoria AS cat2, sum(tab2.Vpago) AS somapg FROM [Fluxo de caixa$A1:P2638] tab2 GROUP BY tab2.Categoria)"

strsql3 = "SELECT cat1, cat2, somavo, somapg FROM " & strsql & " LEFT JOIN " & strsql2 & " ON cat1=cat2"

rs.Open strsql3, cn
If (rs.EOF) And (rs.BOF) Then
    Exit Sub
Else
    Sheets("aux").Range("a1:zz1048576").ClearContents
    Sheets("aux").Range("a1").CopyFromRecordset rs
End If
rs.Close
cn.Close

End Sub

【问题讨论】:

  • 如果这些来自工作表,为什么不直接使用数据 > 工具 > 合并查询?通过数据>工具>从表/范围添加源范围作为表格?您可以自行加入

标签: sql excel vba


【解决方案1】:

成功了

strsql = "(SELECT tab1.Categoria AS cat1, sum(tab1.Vo) AS somavo FROM [Fluxo de caixa$A1:P2638] tab1 GROUP BY tab1.Categoria) otab1"
strsql2 = "(SELECT tab2.Categoria AS cat2, sum(tab2.Vpago) AS somapg FROM [Fluxo de caixa$A1:P2638] tab2 GROUP BY tab2.Categoria) otab2"

strsql3 = "SELECT * FROM " & strsql & " LEFT OUTER JOIN " & strsql2 & " ON otab1.cat1=otab2.cat2"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 2020-08-27
    • 2016-03-21
    相关资源
    最近更新 更多