【发布时间】:2020-09-01 07:54:42
【问题描述】:
我正在尝试在 Excel (2013) 中使用 vba 来使用 ADODB 连接和 SQL 从另一个选项卡查询和整理数据。我的笔记本电脑运行的是 Windows 10 Pro 64 位 (10.0.17763) 和 Excel Standard 2013 64 位 (15.0.5233.1000)
我已尝试删除并重新添加我的 Active X 引用,但仍未解决问题。我还尝试删除所有可能的引用并一一重新添加它们,并尝试使用旧版本。所有结果都相同。我选择的参考是:Visual Basic for Applications、Microsoft Excel 15.0 对象库、OLE 自动化、Microsoft Office 15.0 对象库、Microsoft Forms 2.0 对象库、Microsoft ActiveX 数据对象 6.1 库、Microsoft ActiveX 数据对象 Recordset 6.0 库。
当我在下面的代码中访问 cnExcel.Open 时,excel 只是崩溃(即关闭)而没有错误消息。
Dim cnExcel As Connection
Dim rsExcel As Recordset
.....
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""C:\Users\trheinsc\Desktop\InProgress\Error Dashboard_TEMPLATE.xlsm"";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
Set cnExcel = CreateObject("ADODB.Connection")
Set rsExcel = CreateObject("ADODB.Recordset")
rsExcel.CursorLocation = adUseClient
cnExcel.Open strCon ' <= This is where Excel blows up and shuts down.
' Populate Iteration Columns
sqlSelect = "SELECT DISTINCT [Iteration]"
sqlFrom = "FROM [ErrorDetail$]"
sqlWhere = "WHERE [Iteration] Is Not NULL"
sqlGroup = ""
sqlOrder = "ORDER BY [Iteration] DESC"
sqlString = sqlSelect & " " & sqlFrom & " " & sqlWhere & " " & sqlGroup & " " & sqlOrder
rsExcel.Open sqlString, cnExcel
cDashRow = 1
cDashCol = FirstIterCol
Do
If rsExcel.EOF Then Exit Do
shDashboard.Cells(cDashRow, cDashCol) = "Iter " & rsExcel(0) & Chr(10) & "# Errors"
shDashboard.Cells(cDashRow, cDashCol).Columns.AutoFit
aIterArray(cDashCol) = rsExcel(0)
cDashCol = cDashCol + 1
rsExcel.MoveNext
Loop Until rsExcel.EOF
LastIterCol = cDashCol - 1
If rsExcel.State = 1 Then rsExcel.Close
任何帮助将不胜感激。
【问题讨论】:
-
我认为您不需要在数据源周围使用双引号
",只需要在扩展属性周围。如果我没记错的话,扩展属性也应该是Excel 12.0 Xml;。 -
"Excel 12.0 Xml" 仅适用于非宏文件类型,不适用于 OPs 情况。
-
@timlash 谢谢,不知道。
-
@Kostas K. - np。您对双引号的观察很有趣,但我也会这样做,因为文件名中有一个空格,特别是如果我不能只重命名文件。我避免使用像瘟疫这样的空格的文件名,因为很难预测不同的程序解析器将如何处理它们。
-
@timlash 那些连接字符串让我头疼。我从来没有通过 ADO 打开 .xlsm,只有 .xlsx,但我仍然不明白为什么需要区分
Excel 12.0 Marco和Excel 12.0 Xml。这背后的驱动力是什么?它会抑制宏吗?我不这么认为。
标签: sql excel vba activex adodb