我有一个带有以下宏的文件。基本上我需要它来关闭所有打开的工作簿,但是我的文件名之一每周都会更改,例如,本周它被称为特殊服务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
任何想法的家伙?
答案 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%确定可能没有打开类似名称的其他工作簿时。