我在 本地硬盘 中连接和获取Excel文件中的数据之前使用了ADO。
没有打开文件,这是我所期望的。
现在我尝试执行相同的操作,但这次是在位于 网络驱动器 中的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
答案 0 :(得分:1)
我让管理员重置状态和hola!
我现在可以在不打开文件的情况下连接并获取数据。
对于那些研究过这些问题的人,我很感激。但对于我(以及那些将来会读到这篇文章的人)的安心,您是否可以进行相同的测试来验证它是否表现得如此?
使用另一台机器打开目标文件。
然后使用另一台机器,运行上面的代码,看看它是否复制了我所描述的内容。
如果确实如此,那么我们全部安顿下来。 / p>
编辑1:您必须使用此行代替以上代码才能正常工作。
sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & dataSource & ";" & _
"Extended Properties=""Excel 12.0;HDR=YES"";"