2016-11-07 66 views
1

我正在嘗試使用SQL在Excel中查詢表格(採購)。但是,下面的腳本運行時出現錯誤。錯誤在Excel中查詢使用ADODB與VBA的表格

該表地址變量產生購買!$ A $ 2:$ F $ 1200這是「購買」表的範圍。

所產生的SQL查詢:

Select * From [Purchases!$A$2:$F$1200] 

當前VBA本身如下圖所示:

Dim cn As New ADODB.Connection 
    Dim rs As New ADODB.Recordset 
    Dim strSQL As String 
    Dim tableAddress As String 

    Set cn = New ADODB.Connection 
    cn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name 

    cn.Open 
    tableAddress = "Purchases!" & Range("Purchases").Address 
    strSQL = "Select * From [" & tableAddress & "]" 
    rs.Open strSQL, cn 
    cn.Close 

然而,當執行我得到的錯誤如下...

[Microsoft][ODBC Excel Driver] 'Purchases!$A$2:$F$1200' is not a valid name. 
Make sure that it does not include invalid characters or punctuation and that it is no too long. 

我在錯誤中看到了撇號,但我不確定這是否是被引用的標點符號或如何擺脫如果是這樣的話。

謝謝!

+0

你試過沒有'[]'? –

+0

我有,在FROM子句中產生'語法錯誤'問題。我原本是這樣做的,但在看到ADODB其他說明中提到的那些內容後,添加了括號。 –

+1

「ActiveWorkbook.Path&Application.PathSeparator&ActiveWorkbook.Name」如何?你確定'ActiveWorkbook'是你認爲的那個,它有一個'購買'選項卡嗎?還要嘗試在SQL語句中驗證完整文件路徑。 ' –

回答

1

下面的代碼應該工作:

Dim cn As New ADODB.Connection 
Dim rs As New ADODB.Recordset 
Dim strSQL As String 
Dim tableAddress As String 

Set cn = New ADODB.Connection 
cn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name 

cn.Open 
tableAddress = "Purchases$" & Range("Purchases").Address(False, False) 
strSQL = "Select * From [" & tableAddress & "]" 
rs.Open strSQL, cn 
cn.Close 
+0

'''好的一個。我知道這裏有一個訣竅,我忘了! –

+0

@ScottHoltzman - 我不得不穀歌它才能找到答案 - 在指定源區域時,我總是使用直線區域名稱。 – YowE3K

+0

這是完美的!我知道我錯過了一些簡單的事情。感謝您的幫助! –