【问题标题】:Dynamic pulling Excel workbooks动态拉取 Excel 工作簿
【发布时间】:2019-11-11 15:39:55
【问题描述】:

我负责生成每周工作报告。我正在使用个人 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

代码运行良好,如果可能的话,只需使其动态化

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

【问题讨论】:

  • 日期是否总是本周的星期一和最后的星期一?如果星期一是假期怎么办?
  • 新年过后会发生什么?
  • ...基本上您需要解释您要查找的文件的规则是什么。
  • 此外,这些名称并没有遵循我们目前已知的模式。它以a 开头,下周是b,第三周会发生什么? bc?
  • @Andreas 我假设AB 是固定名称,只有日期发生变化......但我们仍然非常需要OP 来澄清命名约定。

标签: excel vba


【解决方案1】:

我认为这就是您所需要的。

它将首先查看今天是否是星期一,然后使用今天的日期作为工作簿 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多