Microsoft Access数据库引擎找不到对象工作表 - ACE OLEDB

时间:2017-04-28 21:59:16

标签: excel vba oledb

我正在尝试使用Microsoft.ACE.OLEDB.12.0通过VBA在Excel中加入3个表。尝试让查询运行时遇到很多问题。此时我收到以下错误:

Run-time error '-2147217865 (800040e37)':

The Microsoft Access database engine could not find the object 'CustomSheetName1$A$1:$AV$6027'. Make sure the object exists and that you spell its name and the path name correctly. If 'CustomSheetName1$A$1:$AV$6027' is not a local object, check your network connection or contact the server administrator.

源文件在同一个子文件中创建,并保存到位于C:\Users\localuser\Documents\MacroFolder\本地的宏根文件夹中。我可以完全访问该文件。

运行时,连接字符串显示为:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\localuser\Documents\MacroFolder\Book4.xlsx;Extended Properties='Excel 12.0 Xml;HDR=Yes;IMEX=1';"

下面的子提取物。我对字段名称进行了模糊处理,只包含了我认为相关的代码。如果需要,可以添加更多并进一步澄清。执行查询时,代码在最后一行中断。

Dim wbTarget As Workbook, wsTarget As Worksheet
Dim wb As Workbook, ws As Worksheet
Set wbTarget = Workbooks.Add

Set wsTarget = wbTarget.Sheets.Add(After:=wbTarget.Sheets(wbTarget.Sheets.Count))
wsTarget.Name = "CustomSheetName1"

varFilePathElements = Split(ThisWorkbook.Path, "\")
strFileName = varFilePathElements(UBound(varFilePathElements))
Dim strWBTargetFullFileName As String
strWBTargetFullFileName = Replace(ThisWorkbook.Path, "strfilename", "") & "\" & wbTarget.Name & ".xlsx"

Dim cn As Object
Dim rs As Object
Dim strCon As String
Dim strSQL As String
Dim s As String
Dim i As Integer, j As Integer

strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strWBTargetFullFileName _
    & ";Extended Properties='Excel 12.0 Xml;HDR=Yes;IMEX=1';"

strSQL = "SELECT " _
            & "sh1.company_name, " _
            & "sh1.company_type, " _
            & "sh1.customer_no, " _
            & "sh1.fk1, " _
            & "SUM(sh3.total_stat) as total_stat, " _
            & "FROM ( [CustomSheetName1" & wbTarget.Sheets("CustomSheetName1").UsedRange.Address & "] sh1 " _
            & "LEFT JOIN [CustomSheetName2" & wbTarget.Sheets("CustomSheetName2").UsedRange.Address & "] sh2 " _
            & "ON sh2.fk1 = sh1.fk1 ) " _
            & "LEFT JOIN [CustomSheetName3" & wbTarget.Sheets("CustomSheetName3").UsedRange.Address & "] sh3 " _
            & "ON sh3.fk2 = sh2.fk2 AND sh3.fk3 = sh2.fk3 " _
            & "GROUP BY sh1.customer_no, sh1.company_name, sh1.company_type, sh1.fk1 " _
            & "ORDER BY total_stat"

wbTarget.Sheets(1).Range("A1").Value2 = strSQL
wbTarget.SaveAs (strWBTargetFullFileName)
wbTarget.Close

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

rs.Open strSQL, cn, 3, 3

非常感谢任何帮助。的问候,

1 个答案:

答案 0 :(得分:3)

通过ADO阅读Excel工作表时,$符号会附加到工作表名称的末尾,如下所示:

SELECT * FROM [Sheet1$]

使用绝对范围地址会添加额外的$符号,导致工作表名称被错误地解释。您需要使用非绝对范围地址来阻止这种情况发生。向UsedRange.Address添加一些参数可以解决这个问题:

[CustomSheetName1$" & wbTarget.Sheets("CustomSheetName1").UsedRange.Address(False, False) & "]