簡體   English   中英

Vba-Excel中的語法錯誤

[英]Syntax error in Vba-excel

我在兩個不同的工作簿中各有一張紙。 兩張紙都一樣,除了第二張紙有3-4條記錄。 我使用左聯接來獲取這些記錄,但是會出現語法錯誤。 任何幫助表示贊賞。 謝謝。 例如:-

Workbook1     Workbook2
Sheet 1       Sheet 1

ID  Name      ID Name
123  Jim      123  Jim
255  jack     255  jack
275  alice    275  alice
300  Bob     

因此,如您所見,第一個有4條記錄,第二個有3條記錄,情況總是如此。 我只需要在第一張紙和記錄中找到該額外記錄。

Sub get_unknowns()

Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
Set x = Workbooks.Open("A.xlsx")
Set y = Workbooks.Open("B.xlsx")

With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";" & _
    "Extended Properties=Excel 8.0;"
.Open
End With

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

rs.Open "SELECT * FROM [x.Worksheets("Sheet1")] LEFT JOIN [y.Worksheets("Sheet1")] ON [x.Worksheets("Sheet1")$].[PrimaryID] NOT IN " & _
"[[y.Worksheets("Sheet1")$].[primaryId]", cn

With Worksheets("Sheet3")
    .Cells(2, 1).CopyFromRecordset rs
End With

rs.Close
cn.Close

End Sub

根據建議,我進行了一些更改並嘗試過,我在同一工作簿中有兩張紙,並嘗試使用左連接

Sub get_employees()

Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
cn.ConnectionString = _
    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & ThisWorkbook.Path & "H:\testing\demo\test1.xlsx;" & _
    "Extended Properties=""Excel 12.0"";"

rs.Open "SELECT * FROM [Sheet1$] as A LEFT JOIN [Sheet2$] as B ON A.[Id] =B.[Id]", cn

With Worksheets("Sheet3")
.Cells(2, 1).CopyFromRecordset rs
End With

rs.Close
cn.Close

End Sub

現在,它拋出運行時錯誤3709,表明該連接無法用於執行此操作。 在這種情況下,它是關閉的或無效的。

好吧,有幾個問題:

a)您無法使用JET打開xlsx文件,需要ACE,例如:

  cn.ConnectionString = _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & ThisWorkbook.Path & "\Workbookname.xlsx;" & _
        "Extended Properties=""Excel 12.0"";"

b)您不需要在VBA中打開工作簿; 該連接自行完成,但是:
c)該連接僅計入一個工作簿。 我認為跨工作簿查詢是不可能的。
d) FROM部分中表的語法為[Sheetname$] ,您必須將其正確填寫到字符串中(VBA變量的名稱在查詢字符串中無濟於事)。 該工作表必須位於通過連接字符串打開的工作簿中。

您的連接字符串似乎不正確,您還沒有打開連接。 試試這個

Sub get_employees()

    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset

    With cn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=Yes"";"
        .Open
    End With

    rs.Open "SELECT * FROM [Sheet1$] as A LEFT JOIN [Sheet2$] as B ON A.[Id] =B.[Id]", cn, adOpenKeyset, adLockReadOnly

    With Worksheets("Sheet3")
        .Cells(2, 1).CopyFromRecordset rs
    End With

    rs.Close
    cn.Close

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM