Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Excel在ADODB连接打开命令上崩溃_Sql_Excel_Vba_Activex_Adodb - Fatal编程技术网

Sql Excel在ADODB连接打开命令上崩溃

Sql Excel在ADODB连接打开命令上崩溃,sql,excel,vba,activex,adodb,Sql,Excel,Vba,Activex,Adodb,我正在尝试使用Excel(2013)中的vba来使用ADODB连接和SQL来查询和整理另一个选项卡中的数据。我的笔记本电脑运行的是Windows 10 Pro 64位(10.0.17763)和Excel标准2013 64位(15.0.5233.1000) 我已尝试删除并重新添加我的活动X引用,但尚未解决该问题。我还尝试删除所有可能的引用并逐个重新添加它们,以及尝试使用旧版本。所有的结果都是一样的。我选择的参考文献有:Visual Basic for Applications、Microsoft

我正在尝试使用Excel(2013)中的vba来使用ADODB连接和SQL来查询和整理另一个选项卡中的数据。我的笔记本电脑运行的是Windows 10 Pro 64位(10.0.17763)和Excel标准2013 64位(15.0.5233.1000)

我已尝试删除并重新添加我的活动X引用,但尚未解决该问题。我还尝试删除所有可能的引用并逐个重新添加它们,以及尝试使用旧版本。所有的结果都是一样的。我选择的参考文献有:Visual Basic for Applications、Microsoft Excel 15.0对象库、OLE Automation、Microsoft Office 15.0对象库、Microsoft Forms 2.0对象库、Microsoft ActiveX数据对象6.1库、Microsoft ActiveX数据对象记录集6.0库

当我进入以下代码中的cnExcel.Open时,excel只是崩溃(即关闭),没有错误消息

excel作为连接
Dim rsExcel As记录集
.....
strFile=ThisWorkbook.FullName
strCon=“Provider=Microsoft.ACE.OLEDB.12.0;数据源=”“C:\Users\trheinsc\Desktop\InProgress\Error Dashboard_TEMPLATE.xlsm”“;Extended Properties=”“Excel 12.0;HDR=Yes;IMEX=1”“
设置cnExcel=CreateObject(“ADODB.Connection”)
Set rsExcel=CreateObject(“ADODB.Recordset”)
rsExcel.CursorLocation=adUseClient

打开strCon'显然是一个连接字符串问题(不总是这样吗?)。在Excel 2013中连接到XLSM文件时,扩展属性需要包括“Excel 12.0 Marco”,而不是现有的“Excel 12.0”。

我这样使用它

Dim Rs As Object
Dim strConn As String
Dim i As Integer

strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & ThisWorkbook.FullName & ";" & _
        "Extended Properties=Excel 12.0;"


Set Rs = CreateObject("ADODB.Recordset")
Rs.Open strSQL, strConn

在广泛地寻找解决方案来解决这个问题后,我发现建议其他提供商进行连接。最初使用JET的(第一个)和第二个不起作用,但是使用MSDASQL的第三个起作用

因此,我在代码中保留了所有3种类型的调用,只注释掉了那些不起作用的调用

strFile = ThisWorkbook.FullName
'Using Microsoft.ACE.OLEDB Provider - If you get an issue with ACE OLEDB Provider try JET Provider
'strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

'Using Microsoft.Jet.OLEDB Provider - If you get an issue with Jet OLEDB Provider try MSDASQL Provider (above statement)
'strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

'Using MSDASQL Provider
strCon = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & strFile & ";HDR=Yes';"

我认为您不需要在数据源周围使用双引号
,只需要在扩展属性周围使用双引号。如果我没有弄错的话,扩展属性应该是
Excel12.0XML;
。”Excel12.0XML“仅适用于非宏文件类型,在OPs情况下不起作用。@谢谢timlash,我不知道。@Kostas K.-np。你对双引号的观察很有趣,但我也会这么做,因为文件名中有空格,特别是如果我不能重命名文件的话。我避免使用像瘟疫一样带有空格的文件名,因为很难预测不同的程序解析器将如何处理它们。@timlash这些连接字符串让我头疼。我从未通过ADO打开过.xlsm,只打开过.xlsx,但我仍然不明白为什么需要区分
Excel12.0Marco
Excel12.0XML
。这背后的动机是什么?它会抑制宏吗?我不这么认为。并且可能删除Kostas上面提到的数据源周围的双引号。实际上,
12.0
应该包括
12.0XML
。很可能,问题更多的是路径周围的引号。在没有引号的情况下尝试(如果需要,或得到了特定于该引号的错误),并将路径放入变量中,得到了相同的放大。尝试按照建议将连接字符串更改为“Excel 12.0宏”,这导致“运行时错误3706:找不到提供程序”问题。Get a-3001参数的类型与建议的代码不符