【问题标题】:how do i use ADODB connection in vba我如何在 vba 中使用 ADODB 连接
【发布时间】:2020-12-31 22:53:23
【问题描述】:
  1. 我需要数组数据
  2. 目标文件在网络上,10 秒内添加数据值
  3. 需要连接到这个文件 (.xls) 并制作实时图表

现在的问题是我如何为这个打开的文件使用ADODB

发生2例:

第一个:

dim path as string, DB as string
dim cnt as ADODB.Connection
OLEDB = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & path & DB & "; 
extended properties=""excel 12.0 xmlHDR=YES"";"
Set cnt = New ADODB.Connection
cnt.Open OLEDB

然后我收到“找不到 ISAM 安装”错误

第二个:

dim path as string, DB as string
dim cnt as ADODB.Connection
OLEDB = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path & DB &"; 
extended properties=""excel 8.0;HDR=YES;IMEX=1;';"""
Set cnt = New ADODB.Connection
cnt.Open OLEDB

然后我得到了3706 runtime error, cant find supporter

那我怎么了?

【问题讨论】:

    标签: excel vba ado adodb


    【解决方案1】:

    这是我通常的运行方式:

    DbConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source=" & path & ";" & _
                "Extended Properties=""Excel 12.0; HDR=YES"";"
    

    其中 path 是完整的文件路径 + 文件名。 您可以找到更多关于连接字符串的信息here

    工作表名称和范围然后进入 SQL 语句。例如:

    sqlWhere = sheetName & "$A1:$Z1000"
    DbRecSet.Open "SELECT * FROM [" & sqlWhere & "]", DbConn, adOpenStatic
    

    编辑:

    如果我理解正确, 您有一个每 10 秒更改一次值的单元格,并且您希望通过 ADODB 获取该值。

    首先,在这种情况下,您可以从连接字符串中删除HDR=YES

    假设单元格是A1

    sqlWhere = sheetName & "$A1"
    DbRecSet.Open "SELECT * FROM [" & sqlWhere & "]", DbConn, adOpenStatic
    returnValue = DbRecSet.Fields(0)
    

    【讨论】:

    • 这是我拥有的最棒的答案之一
    • 首先非常感谢你现在这个时候如何确定路径特定列和行值内的文件范围?实际上该行值会在 10 秒内发生变化,所以有什么解决方案吗?
    • 正如我所说,您在 SQL 语句中设置要查询的范围。如果你想每 10 秒循环一次你的代码,你可以使用Application.OnTime
    • 感谢您的帮助。但我没有完全理解。如果我想需要来自特定关键字的特定列数据,该关键字已经位于网络中的目标文件中。那么是否有可能弄清楚该列信息。获取数据??最好的尊重
    • 我编辑了我的答案。如果它对您有帮助,请随时接受答案。你如何让它循环是完全不同的事情,而不是你原来问题的一部分。
    【解决方案2】:

    path = test_fdr & "" & today_total & ".xls"

     OLEDB = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & path & 
     ";Extended Properties=""Excel 8.0;HDR=YES"";"
    
      Set cnt = New ADODB.Connection
      cnt.Open OLEDB
    
      Rcdset.Open Source:="[" & TestSheetName & "$]", _
      ActiveConnection:=cnt, _
      CursorType:=adOpenStatic, _
      LockType:=adLockReadOnly, _
      Options:=adCmdTable
    
      With Sheets(3).QueryTables.Add(Connection:=Rcdset, Destination:=Target_rng)
    

    【讨论】:

    • 为什么那个代码给了我这么多缺失的数据??我只是尝试使用该代码粘贴整个数据,但遇到了问题
    猜你喜欢
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多