2014-07-03 26 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查看更新的答案 –