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

时间:2014-08-20 09:04:21

标签: excel vba excel-vba excel-2010 ado

  1. 我在 本地硬盘 中连接和获取Excel文件中的数据之前使用了ADO。
    没有打开文件,这是我所期望的。

  2. 现在我尝试执行相同的操作,但这次是在位于 网络驱动器 中的Excel文件上。
    令我惊讶的是,它会打开文件,但仍能获得我需要的数据。

  3. 这是应该的样子吗?或者我错过了什么?

    我使用的代码:

    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
    

1 个答案:

答案 0 :(得分:1)

经过一番挖掘,我终于发现了这种奇怪背后的原因 我查看了 网络管理员 以检查文件并处于无限打开状态。
有人使用它,但不知何故未能正确关闭它 我试图手动打开它并发出一条消息“另一个用户”。目前正在使用pops-up文件。

我让管理员重置状态和hola!
我现在可以在不打开文件的情况下连接并获取数据。

对于那些研究过这些问题的人,我很感激。但对于我(以及那些将来会读到这篇文章的人)的安心,您是否可以进行相同的测试来验证它是否表现得如此? 使用另一台机器打开目标文件。
然后使用另一台机器,运行上面的代码,看看它是否复制了我所描述的内容。
如果确实如此,那么我们全部安顿下来。 / p>

编辑1:您必须使用此行代替以上代码才能正常工作。

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