gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:16:02 24 4
gpt4 key购买 nike

  • 在我的 中的 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

    最佳答案

    经过一番挖掘,我终于找出了这个奇怪背后的原因。
    我检查了我们的网络管理员 检查文件,它处于无限打开状态。
    有人使用它,但不知何故未能正确关闭它。
    我尝试手动打开它,然后弹出一条消息“另一个用户”当前正在使用该文件。

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

    对于那些研究过这些的人,我很感激。但是为了我(以及将来会读到这篇文章的人)安心,你能做同样的测试来验证它是否确实如此吗?
    使用另一台机器打开目标文件。然后使用另一个,运行上面的代码,看看它是否复制了我所描述的内容。如果是这样,那么我们都解决了。

    编辑1:您必须改用这一行才能使上述代码正常工作。

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

    关于vba - 为什么使用 ADO 打开连接时会打开 excel 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25400750/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com