Microsoft Access数据库引擎找不到对象工作表 – ACE 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.

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

运行时连接string显示为:

"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 

任何帮助将不胜感激。 问候,

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

SELECT * FROM [Sheet1$]

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

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