[算表] 在未开启的情况下抓取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