【问题标题】:Reading Data using OLEDB from opened Excel File使用 OLEDB 从打开的 Excel 文件中读取数据
【发布时间】:2013-03-25 16:36:01
【问题描述】:

我有一个带有 2 张纸的 excel 文件(比如说文件 X)。在第一张表中,我显示图表。其次,我有图表的数据。为了从图表中获取数据,我需要像在 SQL 中那样处理这些数据,例如 Group by、order by。有什么方法可以使用 oledb 在同一个 excel 文件(文件 X)中使用 VBA 代码从第二张表中读取数据?

谢谢!!

【问题讨论】:

  • 你试过用谷歌搜索“OLEDB Excel”吗?会发现很多例子...
  • 嗨蒂姆,我现在已经在使用 oledb 来获取数据,但我正在读取的文件不是我有 VBA 代码的文件。所以它可以工作。但是我想从已经打开的文件中读取,并且 VBA 代码也在同一个打开的文件中。
  • 见下面的示例代码...

标签: excel vba oledb


【解决方案1】:

这是一个使用 SQL 连接来自两个范围的数据的示例:如果文件处于打开状态(只要它已保存,因为您需要文件路径),它就可以正常工作。

Sub SqlJoin()

    Dim oConn As New ADODB.Connection
    Dim oRS As New ADODB.Recordset
    Dim sPath
    Dim sSQL As String

    sSQL = "select a.blah from <t1> a, <t2> b where a.blah = b.blah"

    sSQL = Replace(sSQL, "<t1>", Rangename(Sheet1.Range("A1:A5")))
    sSQL = Replace(sSQL, "<t2>", Rangename(Sheet1.Range("C1:C3")))

    If ActiveWorkbook.Path <> "" Then
      sPath = ActiveWorkbook.FullName
    Else
      MsgBox "Workbook being queried must be saved first..."
      Exit Sub
    End If

    oConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & sPath & "';" & _
                 "Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';"

    oRS.Open sSQL, oConn

    If Not oRS.EOF Then
        Sheet1.Range("E1").CopyFromRecordset oRS
    Else
        MsgBox "No records found"
    End If

    oRS.Close
    oConn.Close

End Sub

Function Rangename(r As Range) As String
    Rangename = "[" & r.Parent.Name & "$" & _
                r.Address(False, False) & "]"
End Function

【讨论】:

  • 嘿蒂姆,我还有一个问题,如果从 SharePoint 打开文件,它显示 ActiveWorkBook.FullName 的 Internet 地址无效。你知道如何摆脱它吗?
  • 嘿蒂姆,Sharepoint 只是一个例子,想想互联网上的任何 excel 文件
  • 您可以随时保存本地临时副本并进行查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
相关资源
最近更新 更多