【发布时间】:2017-03-21 05:26:09
【问题描述】:
我正在尝试使用 SQL 在 Excel 中查询表(购买)。但是,运行以下脚本时出现错误。
tableaddress 变量生成 Purchases!$A$2:$F$1200,这是表“Purchases”的范围。
生成的 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.
我在错误中看到了撇号,但不确定这是否是所指的标点符号,或者如果是,如何去掉它。
谢谢!
【问题讨论】:
-
你试过没有
[]吗? -
我有,这会产生“FROM 子句中的语法错误”问题。我最初是这样的,但是在我看到 ADODB 的其他说明中引用的那些之后添加了括号。
-
ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name怎么样。您确定ActiveWorkbook是您认为的那个并且其中有一个Purchases选项卡吗?还可以尝试限定 SQL 语句中的完整文件路径。 ` -
我通过将其带到 MsgBox 进行了尝试,并且可以确认它引用了正确的工作簿。我也只是尝试对路径进行硬编码,它产生了相同的结果。这个有点奇怪,因为我过去能够成功地生成这样的 SQL 脚本,但是这个决定让事情复杂化!
-
是否有理由使用
ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name而不仅仅是ActiveWorkbook.Fullname?