2013-03-25 137 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