2016-11-07 108 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

这是完美的!我知道我错过了一些简单的事情。感谢您的帮助! –