2013-03-25 141 views
1

我有一张excel文件(让我们说文件X)与2张。在第一张表中我显示图表。第二我有图表的数据。为了从图表中获取数据,我需要按照我们在SQL中所做的那样处理这些数据,如排序依据。有什么办法可以使用oledb从同一个excel文件(文件X)中使用VBA代码读取第二张数据中的数据?使用OLEDB从打开的Excel中读取数据文件

谢谢!

+1

您是否尝试使用Google搜索“OLEDB Excel”?很多的例子会被发现... – 2013-03-25 16:55:00

+0

嗨蒂姆,我已经在使用oledb来获取数据,但我正在阅读的文件不是我有VBA代码的文件。所以它的工作原理。但是我想从已经打开的文件中读取,并且VBA代码也在同一个打开的文件中。 – iosDeveloper 2013-03-25 17:57:19

+0

请参阅下面的示例代码... – 2013-03-25 18:10:38

回答

3

以下是使用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 
+0

感谢您的帮助蒂姆!这就像一个魅力! – iosDeveloper 2013-03-25 19:49:57

+0

嘿蒂姆,我还有一个问题,如果从SharePoint打开文件,它说ActiveWorkBook.FullName无效的Internet地址。你有什么想法如何摆脱? – iosDeveloper 2013-06-20 20:30:16

+0

对不起,Sharepoint here ... – 2013-06-20 21:02:12