【发布时间】:2016-11-09 20:09:55
【问题描述】:
我在 VBA for Excel 中使用 Format() 函数时遇到问题。我一点也不知道问题是什么。我以前在很多地方都使用过 Format() 函数,但从来没有遇到过这样的麻烦。
为了上下文,让我简要解释一下情况。我有一堆工作表,都以“mmm-yy”格式命名的月-年组合(“主表”表除外)。在下面的函数中(为相关性而简化),我的目标是循环浏览每张工作表,并以“yyyy”格式显示其名称。如您所见,在第 7 行,我使用 Format() 函数将工作表名称转换为“yyyy”格式。
Function populateYearsCBB()
Dim WS As Worksheet
Dim yyyyName As Integer
For Each WS In ThisWorkbook.Worksheets
If WS.name <> "Main Sheet" Then
'WS.name is therefore a month-year combo of "mmm-yy" format
yyyyName = Format(WS.name, "yyyy") 'LINE 7
MsgBox (yyyyName)
End If
Next
End Function
更多背景知识:我的前 5 张纸是 2016 年的前五个月(May-16、Apr-16、Mar-16...),其余 12 张是 2015 年的 12 个月(Dec-15、 11 月 15 日...)。
当然,当我运行这个函数时,我希望我的消息框的输出是:“2016”、“2016”、“2016”、“2016”、“2016”(2016 年的五个月) ),然后是 12 次“2015”。对吧?
奇怪的是,我收到 17 个消息框都写着“2016”。
出于某种原因,第 7 行的 Format() 函数似乎也将 2015 年的月份读取为 2016 年。
我一生都无法弄清楚这里发生了什么。有人帮忙吗?
提前致谢!
【问题讨论】:
-
它将
15和16解释为天,默认为2016 年。对于您的特定格式,"20" & Right(WS.Name,2)可以工作。