在尝试对Excel电子表格中的表格范围执行SQL select语句时,我在第rs.Open strSQL, cn
行上收到以下错误消息:
Microsoft Access数据库引擎找不到该对象 '工作表Sheet1 $ A1:NC3&#39 ;.确保对象存在并拼写它 名称和路径名称正确。如果' Sheet1 $ A1:NC3'不是当地的 对象,检查您的网络连接或联系服务器 管理员
我已经针对类似的问题运行了各种Stack Overflow边栏建议,让Google有机会参与其中,但我还是没有解决这个问题。
对象是本地的 - 检查
工作簿是当前打开的工作簿,保存到桌面 - 检查
网络连接正常 - 请检查
观察
将SQL字符串设置为"Select * from [Sheet1$];"
可以正常工作。
通过添加范围引用来扩展它,并且错误返回,即"Select * from [Sheet1$A1:NC3];"
不起作用。
如评论中所述,直至第IV栏,即[Sheet1$A1:IV3]
即可;列IW向前,错误消息又回来了。
注意:Debug.Print
确认
ListObjects("Table1").Range.Address
为$A$1:$NC$3
rngAddress
是[Sheet1$A1:NC3];
任何人都可以发现我做错了吗?或建议一个解决方法,以便我仍然可以使用此范围(并且最好不选择整个工作表)
以下是完整代码:
Option Explicit
Public Sub TestSQL()
'Tools > references > Microsoft ActiveX Object Library
Dim wb As Workbook
Dim wsSource As Worksheet
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Set wb = ThisWorkbook
Set wsSource = wb.Worksheets("Sheet1")
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
Dim rngAddress As String
rngAddress = "[" & wsSource.Name & "$" & Replace(wsSource.ListObjects("Table1").Range.Address, "$", "") & "];"
strSQL = "SELECT * FROM " & rngAddress
rs.Open strSQL, cn
End Sub
环境:Windows 8,Excel 2016 64位。