作者:WYY | 来源:互联网 | 2023-07-11 10:46
我负责运行每周的工作报告。我正在使用个人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”是固定名称,唯一会改变的是日期。该报告将始终使用星期一的日期,因为我需要查看WoW总数,因此休假并不重要。一旦2020年临近,日期的确将更改为xx.xx.20。
我认为这就是您所需要的。
它将首先查看今天是否是星期一,然后将今天的日期用作工作簿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,"MM.D.YY") & ".xlsx"
wkbB = Format(Date - Weekday(Date - 7,"MM.D.YY") & ".xlsx"
End If