Excel引用其它文件内容时如何用单元格内容做文件名

来源:互联网 发布:网络信息安全员培训 编辑:程序博客网 时间:2024/05/13 12:27

作者:iamlaosong

每天要做一个报表,需要累计每天的量,那么就需要知道昨天累计的量,这样,加上今天的量就变成今天累计的量了。

1、简单的做法是将昨天累计的量复制到一个工作表中,由于累计工作表中的单元格中是计算公式,复制时要做“选择性粘贴”,复制数值,否则会产生多次文件链接。

2、其次是连接昨天报表文件的工作表,但是,必须用同样的文件名,这种方法需要每天复制一下昨天的报表文件,再修改文件名为“昨日身份证项目查询结果.xlsx”,这个办法相对简单一点,不过每次打开后要启用链接,更新数据,如下图所示:


本文件的连接是否启用,关系不大,其它文件的链接一定要启用才能更新数,单元格的链接公式如下图所示:


3、设想每天的报表用日期做文件名,然后每天的报表链接昨天的文件,这样就需要用到用单元格内容做文件名进行链接,链接中输入单元格引用是不行的,只能先合成链接的内容,再用indirect函数引用。首先生成昨日报表文件名,公式是:=TEXT(当日!$K$2-1,"mm月dd日") & "身份证项目查询结果.xlsx",如下图所示:



昨日累计工作表中单元格的链接公式是:=INDIRECT("[" & 当日!$K$3 & "]累计!C3"),如下图所示(当然可以不用K3中的文件名而用K2中的日期直接合成):


这个方法有着致命缺点,用indirect函数就是必须打开昨日的报表文件,否则就看不到链接的结果,与之相关的运算也看不到结果,而我们的报表是一直向昨日链接,这样只有打开所有的文件才能看到数据,所以这个方案失败。

方案虽然失败,不过这种链接方法还是可以用的。

4、上述办法不成,只好用VBA实现了,这个倒是不难,变换日期的时候复制一下昨日的数据就行了,不过这个方法每次打开时需要启用“宏”。程序如下:

'复制昨日累计Sub cp_data()        datfile = Sheets("当日").Cells(3, 11)                              'K3保存昨日报表文件名称    If MsgBox("复制《" & datfile & "》中累计数据......", vbOKCancel, "iamlaosong") = vbCancel Then Exit Sub    datFullName = ThisWorkbook.Path & "\" & datfile    If Dir(datFullName, vbNormal) <> vbNullString Then        Workbooks.Open Filename:=datFullName        '打开昨日文件    Else        MsgBox "数据文件不存在!", vbOKOnly, "iamlaosong"        Exit Sub    End If    For i = 3 To 19        For j = 3 To 9            ThisWorkbook.Worksheets("昨日累计").Cells(i, j) = Sheets("累计").Cells(i, j)        Next j    Next i    Windows(datfile).Close savechanges:=False    MsgBox "昨日累计数据复制完毕!", vbOKOnly, "iamlaosong"End Sub

综上所述,可实现的方法是1、2、4,现在看来,还是第一种简单的方法最简单,第4种方法实际就是第1种方法,只是复制数据这一块用程序代替了而已。



0 0
原创粉丝点击