首页 > 解决方案 > 动态拉取 Excel 工作簿

问题描述

我负责运行每周的工作报告。我正在使用个人 VBA 模块来构建代码。工作簿都将使用相同的命名约定,唯一的区别是工作簿末尾的日期。例如:我想从名为“workbook A 10.28.19.xlsx”的工作簿 A 中提取名为“workbook B 11.4.19.xlsx”的工作簿 B。我怎样才能做到这一点,这样我就不必每周手动更改代码中的工作簿名称?

刚开始学习 VBA,我考虑过使用通配符作为字符串引用,但我认为命名约定的性质使它有点困难。

这是我到目前为止所拥有的:

    Workbooks("workbook A 
    10.28.19.xlsx").Worksheets("sheet1").Range("AD:AE").Copy _
    Workbooks("workbook B 
    11.4.19.xlsx").Worksheets("sheet1").Range("AD:AE")
    End Sub

代码工作正常,如果可能的话,只需使其动态化

编辑:感谢您到目前为止的评论。我将在此处添加一些说明:我在示例中使用的“工作簿 A/B”是固定名称,唯一会改变的是日期。该报告将始终使用星期一日期,因为我需要查看魔兽世界的总数,所以它是否落在假期无关紧要。一旦 2020 年到来,日期确实会更改为 xx.xx.20。

标签: excelvba

解决方案


我认为这是你需要的。

它将首先查看今天是否是星期一,然后使用今天的日期作为工作簿 A 和 B 作为上周星期一。
如果不是星期一,那么它会找到前一个星期一为 A,而一周后找到前一个星期一为 B。

If Weekday(Date, vbMonday) = 1 Then
    wkbA = Format(Date, "MM.D.YY") & ".xlsx"
    wkbB = Format(Date - Weekday(Date - 1, vbMonday), "MM.D.YY") & ".xlsx"
Else
    wkbA = Format(Date - Weekday(Date - 1, vbMonday), "MM.D.YY") & ".xlsx"
    wkbB = Format(Date - Weekday(Date - 7, vbMonday), "MM.D.YY") & ".xlsx"
End If

推荐阅读