2014-07-03 83 views
1

我試圖用adodb查詢excel文件。但是一些文件具有非標準的表格/列名稱。在VBA中使用ADODB查詢帶空格的表名

strQry = "select * from [ sheet1$A1:A50]" 

我得到一個錯誤,說「無效的名稱包圍」。如何在名稱中有額外空間的工作表上運行查詢?這些是來自客戶端的原始文件,所以我不想更改名稱或任何內容。

此外,我有關於列的另一個問題。

strQry2 = "select [column\rA] from [sheet1$E1:E122]" 

「\ r」是換行符。我收到了一個錯誤:「沒有給出一個或多個必需參數的值。」

有關如何處理這些問題的任何建議?

更新:

Sheet 1工作正常,但片我有工作表Sheet1之前被命名爲類似Sheet1額外的空間

一些列標題中有列名之內換行/回車像「列」 & vbcrlf &「名」。有沒有一種方法來查詢這些?

+0

通過說'[column \ rA]'想做什麼?你不能從'E1:E122'選擇''A列''...你可以使用'WHERE'子句來限制結果,如[** THIS ANSWER **](http:// stackoverflow。 com/a/18640226/2140173) –

+0

這只是在列標題中有一個換行符。是的,從$ E1中選擇:E122的作品。非常感謝。 @me – bananaLeaf

回答

1

至於空間去,如果Sheet 1有間表和1個使用空間

"select * from [Sheet 1$A1:A50]"

如果在sheet 1又名前面的空間。 Chr(32) & Sheet 1那麼它不可能使用[] syntax

然而選擇從表任何東西,如果你不想更改電子表格的原始名稱,你可以創建一個臨時命名範圍的範圍你想要從中提取數據。

例如:

' add a temporary name 
ThisWorkbook.Names.Add name:="tmp", RefersTo:=Sheets(" Sheet 1").Range("A1:C4") 

' create your sql including the named range 
sql = "SELECT * FROM tmp" 

' open recordset 
rs.Open sql, cn, adOpenUnspecified, adLockUnspecified 

' remove the temporary name 
ThisWorkbook.Names.Item("tmp").Delete 

' copy rs to spreadsheet 
ActiveSheet.Range("F2").CopyFromRecordset rs 

第二個問題我不明白,所以你能不能詳細,我會更新的答案?

+0

「工作表1」如何正常工作,但我擁有的工作表被命名爲「工作表1」。它在「sheet1」前面有一個空白區域。某些列標題在列名稱中包含換行符/回車符,如「column」&vbcrlf&「name」。有沒有辦法查詢這些?非常感謝 – bananaLeaf

+0

@bananaLeaf查看更新的答案 –