Board logo

標題: [發問] 跨檔案取得其中某sheet內的某欄位值,應該如何使用VBA撰寫? [打印本頁]

作者: ashyaurora    時間: 2012-3-27 10:22     標題: 跨檔案取得其中某sheet內的某欄位值,應該如何使用VBA撰寫?

目前有一個需要跨檔案取得最新欄位值的需求,
而且要在不開另一份檔案的狀況下取得這個欄位的值,
不知道有沒有比較好的寫法?
作者: mark15jill    時間: 2012-3-27 10:27

本帖最後由 mark15jill 於 2012-3-27 10:39 編輯

回復 1# ashyaurora


    直接儲存格打
='位置\[檔案名稱]活頁簿名稱'!$A$1


PS 煩請附檔 大約是哪種
作者: hugh0620    時間: 2012-3-27 10:42

之前我有問題類似的問題~
但都是打開檔案後~ 將資料抓出~ 再關掉~
提供之前大大給我的方式~ 給你參考~
http://forum.twbts.com/viewthread.php?tid=4725&highlight=
作者: alexliou    時間: 2012-3-27 18:57

假設你要的資料存於活頁簿2(並未開啟)中工作表1的A1
而你要把這資料放到目前作用中工作表的A1
Code 如下:
Cells(1, 1).Formula = "='[活頁簿2.xlsx]工作表1'!$A$1"         ' for Excel 2010
作者: alexliou    時間: 2012-3-28 07:45

本帖最後由 alexliou 於 2012-3-28 07:50 編輯

也可以利用呼叫excel 提供的 XLM macro來達成.
底下的 GetValue Function有四個引數 :
•path: 資料所在檔案的路徑 (e.g., "d:\Data\ or d:\Data")
•file: 活頁簿名稱 (e.g., "Input.xls" or "Input.xlsx)
•sheet: 工作表名稱 (e.g., "Sheet1")
•ref: 你所要的值所在儲存格的位址參照 (e.g., "C5")

Private Function GetValue(path, file, sheet, ref)
'   從一個關閉的活頁簿中取資料
    Dim arg As String
'   確定檔案存在
    If Right(path, 1) <> "\" Then path = path & "\"
    If Dir(path & file) = "" Then
        GetValue = "File Not Found"
        Exit Function
    End If
'   設定執行XLM Macro的參數
    arg = "'" & path & "[" & file & "]" & sheet & "'!" & Range(ref).Range("A1").Address(, , xlR1C1)
'   執行Microsoft Excel 4.0 巨集
    GetValue = ExecuteExcel4Macro(arg)
End Function
作者: VANESSA    時間: 2012-3-28 10:01

請問可以提供實際的檔案嗎,謝謝
包含XLM檔.資料存於活頁簿2.資料放到目前作用中工作表的A1
作者: alexliou    時間: 2012-3-29 07:14

本帖最後由 alexliou 於 2012-3-29 07:32 編輯

回復 6# VANESSA
附件中有兩個檔案
活頁簿2是關閉中(開啟中的也workable)的檔案, 你所要的資料假設在其中工作表1的"D3"儲存格
活頁簿2請把它放到 C:\Users\user\Documents 資料夾
這個檔案放到哪裡將會影響到GetValue函數的第一個引數
活頁簿1的工作表1是目前作用中的工作表
命令按鈕的工作很單純
就是去執行  Cells(1, 1).Value = GetValue("C:\Users\user\Documents", "活頁簿2.xlsx", "工作表1", "D3")
[attach]10194[/attach]
作者: Hsieh    時間: 2012-3-29 08:30

本帖最後由 Hsieh 於 2012-3-29 08:32 編輯

回復 6# VANESSA


    這樣簡單範例應該比較容易知道如何使用
A1公式
='D:\[Book2.xls]Sheet1'!A1
A2是執行巨集nn的結果,A2是得到Book2的Sheet1工作表A1的值
  1. Sub nn()
  2. [A2] = ExecuteExcel4Macro("'D:\[Book2.xls]Sheet1'!R1C1")  '使用4.0巨集取值,必須使用R1C1形式參照
  3. End Sub
複製代碼
[attach]10195[/attach]
作者: VANESSA    時間: 2012-3-30 17:08

試成功,但是如果我想再更進階
在活頁簿1選"201"就會出現活頁簿2的201資料
在活頁簿1選"202"就[attach]10244[/attach]會出現活頁簿2的202資料 (此時活簿2的資料也會改)




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)