【发布时间】:2017-04-28 21:59:16
【问题描述】:
我正在尝试使用 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.
源文件在同一个 sub 中创建并保存到位于本地 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
任何帮助将不胜感激。问候,
【问题讨论】:
-
您能与我们分享您访问数据库中的表名吗?
-
我没有使用访问数据库。我正在尝试使用 OLE DB 驱动程序在工作簿的 3 张表中连接 3 张表。希望这能进一步澄清。
-
我明白了。然后尝试输入“!”在工作表名称的末尾,例如“CustomSheetName1!”
-
我记得尝试过这种形式的常规 Excel 命名约定。重试并得到
'CustomSheetName1!&A1:AV6027' is not a valid name. Make sure that it does not include invalid characters or punctuation and that it is not too long.任何其他建议。问候,