VBA:Microsoft Access数据库引擎找不到对象(SQL查询工作表)

我正在尝试在Excel电子表格中针对表范围执行SQL select语句时,在rs.Open strSQL, cn行上收到以下错误消息:

Microsoft Access数据库引擎找不到对象'Sheet1 $ A1:NC3'。 确保对象存在,并且正确拼写其名称和path名称。 如果“Sheet1 $ A1:NC3”不是本地对象,请检查您的networking连接或联系服务器pipe理员

对于类似的问题,我已经通过各种堆栈溢出侧栏build议,让谷歌有一个运行,但我还没有解决这个问题。

  1. 该对象是本地 – 检查

  2. 工作簿是当前打开的工作簿,将其保存到桌面 – 检查

  3. networking连接正常 – 检查

意见

  1. 将SQLstring设置为"Select * from [Sheet1$];" 工作正常。

  2. 扩展,通过添加范围参考,错误回来,即"Select * from [Sheet1$A1:NC3];" 不起作用。

  3. 正如在评论中指出的,直到第四栏即[Sheet1$A1:IV3]是可以的; 列IW在前,错误信息又回来了。

注意Debug.Print确认

  1. ListObjects("Table1").Range.Address as $A$1:$NC$3

  2. rngAddress[Sheet1$A1:NC3];

任何人都可以请发现我做错了吗? 或者build议一个解决方法,所以我仍然可以使用这个范围(最好不要select整个工作表)

以下是完整的代码:

 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位。