在Excel中关闭工作簿,每周更改名称

时间:2015-01-23 17:15:07

标签: excel vba excel-vba

我有一个带有以下宏的文件。基本上我需要它来关闭所有打开的工作簿,但是我的文件名之一每周都会更改,例如,本周它被称为特殊服务1503,下周它将是特殊服务1504等。任何关于如何编辑的想法下面的代码,以便我可以关闭此文件而无需手动编辑vba中的数字?

Workbooks("2014 Actuals").Close SaveChanges = True
Workbooks("Special Services Budget 2015").Close SaveChanges = True

以上工作因为没有编辑,下面的工作但我手动必须每周将周数从1504改为1505等。

Workbooks("Special Services 1504").Close SaveChanges = True

任何想法的家伙?

2 个答案:

答案 0 :(得分:3)

如果我理解逻辑,你只需要建立一个动态索引:

firstWeek2015 = 1500 '<-- starting seed
yearFactor = Year(Now()) - 2015 '<-- we take the current year and we subtract 2015: this year it will be 0, next year 1 etc.
weekFactor = WorksheetFunction.WeekNum(Now()) '<--we just take the current week
newIndex = firstWeek2015 + yearFactor*52 + weekFactor

并将其替换为您的工作簿名称:

Workbooks("Special Services " & newIndex).Close SaveChanges = True

即使我愿意:

1) Use the same logic that you used to open the file;
2) Use a RegEx-based solution (if "Special Services ????" is the only file of that kind).

答案 1 :(得分:1)

我将此作为单独的答案添加,因为它与前一个完全不同:

当且仅当您确定只有该工作簿的名称类似于特殊服务1054 时,您才可以像这样使用Like运算符

For Each objWb In Workbooks
    If objWb.Name Like "Special Services *"
        objWb.Close SaveChanges = True
    End If
Next objWb

正如我之前的回答所述,这种方法比另一种更可靠,但只有当您100%确定可能没有打开类似名称的其他工作簿时