[算表] 在未開啟的情況下抓取excel表的資料

作者: kevin619008 (尻川)   2024-08-13 22:07:45
軟體:excel、VBA
版本:2021
各位好
事情是這樣的,我們公司每個專案會有各自的excel表來記錄各個專案的進度或事件
然後有個總表會把各專案的最新進度複製過去,主管平常用這個總表確認各專案的進展
之前我們公司都是用人力手工複製,各專案負責人有新進度時除了要更新自己的表之外,
還要複製到總表去,整個就很耗時費工
所以我就開始想讓excel總表可以自動複製各專案excel的最新進度
我一開始用excel內建的函數都可以讓總表在未開啟各專案的excel表的情況下就抓到資料
例如說,總表的每個row代表不同專案,B column 是日期,
cell["B1"] = MAX([專案的excel檔名]進度表!B:!B)
這樣就能抓到最新進度的日期
但因為還需要設定各種各樣的條件,所以要新增欄位,加上總表本來就花了很多欄紀錄專
案的資訊,所以導致總表欄數很多,平時維護又變得麻煩
所以我又開始用vba想辦法把之前用很多欄才搞定的公式可以直接在一個儲存格內就解決
但接著就發現使用者自訂的函數沒辦法在未開啟excel檔案的情況下抓取該檔案的資料
例如,我在總表的module裡新增以下function
Function test(rg1 As Range) As Variant
Dim newest_date As Long
newest_date = Application.WorksheetFunction.Max(rg1)
If CDate(newest_date) >= Date Then
test = CDate(newest_date)
Else:
test = "無最新進度"
End If
End Function
然後總表的cell["B1"] = test([專案檔案名稱]進度表!B:!B)
當專案進度表也打開時就能抓到資料,但若未開啟就抓不到,會出現# VALUE!
換言之,用excel內建的函數可以抓到未開啟檔案的資料,但使用者自訂的不行
請問有高人能指點該如何解決嗎?vba code是否還需要設定甚麼才能讓它抓到未開啟檔案
的資料?
我google過發現類似的問題都是用sub解決
但明明用excel 內建的function 就能抓未開啟檔案的資料,為何自訂的function不行?
拜託各位了
作者: wang111283 (wang111283)   2024-08-22 15:24:00
用VBA一定要開啟 你的用法有點像內建的indirect函數,這個函數也一定要打開檔案你的需求建議寫成sub在後台運作

Links booklink

Contact Us: admin [ a t ] ucptt.com