使用ADO打开连接时为什么打开excel文件?

  1. 在连接本地驱动器中的 Excel文件并获取数据之前,我已经使用了ADO。
    不是打开文件 ,这是我所期望的。

  2. 现在我正在尝试做同样的事情,但这次是位于networking驱动器中的 Excel文件。
    令我惊讶的是, 它打开文件 ,但仍然得到我需要的数据。

这是应该的方式吗? 还是我错过了什么?

我使用的代码:

Sub conscious() Dim con As ADODB.Connection Dim rec As ADODB.Recordset Dim dataSource As String Set con = New ADODB.Connection Set rec = New ADODB.Recordset dataSource = "R:\Folder\excelfile.xlsb" Dim sconnect As String sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & dataSource & ";HDR=Yes;" con.Open sconnect: DoEvents Dim sqlstr As String sqlstr = "SELECT [H1], [H2], [H3], [H4], [H5], [H6], " & _ "[H7], [H8], [H9], [H10]" & _ "FROM [Sheetname$] " & _ "WHERE H8 IN ('citeria1','criteria2') " & _ "AND H9 < 29 " & _ "AND H10 = 1 " & _ "ORDER By H7;" rec.Open sqlstr, con, adOpenStatic, adLockReadOnly: DoEvents With Sheet1 Dim lrow As Long lrow = .Range("A" & .Rows.Count).End(xlUp).Row If lrow > 1 Then .Range("A2:J" & lrow).ClearContents .Range("A2").CopyFromRecordset rec End With rec.Close: con.Close Set rec = Nothing: Set con = Nothing End Sub 

经过一番挖掘,我终于明白了这种怪异背后的原因。
我检查了我们的networkingpipe理员检查文件,它处于无限的打开状态。
有人用它,并以某种方式未能正确closures它。
我试图手动打开它,“另一个用户”正在使用该文件popup消息。

我得到了pipe理员重置状态和HOLA!
我现在可以连接并获取数据,而无需打开文件。

对于那些看过这些的人,我很感激。 但是对于我的(以及那些将来会阅读这些内容的人)而言,您是否可以进行相同的testing来validation它是否performance得如此呢?
使用另一台机器打开目标文件。
然后使用另一个,运行上面的代码,看看它是否复制我所描述的。
如果是这样,那么我们都解决了。

编辑1:你将不得不使用这一行代替上面的代码来工作。

 sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & dataSource & ";" & _ "Extended Properties=""Excel 12.0;HDR=YES"";"