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

时间:2017-11-30 08:45:09

标签: sql excel excel-vba adodb vba

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

  

Microsoft Access数据库引擎找不到该对象   '工作表Sheet1 $ A1:NC3&#39 ;.确保对象存在并拼写它   名称和路径名称正确。如果' Sheet1 $ A1:NC3'不是当地的   对象,检查您的网络连接或联系服务器   管理员

我已经针对类似的问题运行了各种Stack Overflow边栏建议,让Google有机会参与其中,但我还是没有解决这个问题。

  1. 对象是本地的 - 检查

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

  3. 网络连接正常 - 请检查

  4. 观察

    1. 将SQL字符串设置为"Select * from [Sheet1$];"可以正常工作。

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

    3. 如评论中所述,直至第IV栏,即[Sheet1$A1:IV3]即可;列IW向前,错误消息又回来了。

    4. 注意Debug.Print确认

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

      2. rngAddress[Sheet1$A1:NC3];

      3. 任何人都可以发现我做错了吗?或建议一个解决方法,以便我仍然可以使用此范围(并且最好选择整个工作表)

        以下是完整代码:

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

0 个答案:

没有答案