FormYear = Format(Date, "yy")
будет возвращаться 18
до тех пор, пока 1 января 2019 года не наступят часы.
Если вам нужно получить 19
, сейчас , вам необходимо:
FormYear = CInt(Format(Date, "yy")) + 1
или
FormYear = CInt(Format(DateAdd("yyyy", 1, Date),"yy"))
После дальнейшего разъяснения, это должно сделать то, что вы после:
Sub NewFiscalYear()
Dim ws As Worksheet
Dim PrevYear As Integer
Dim FormYear As String
FormYear = CInt(Format(Date, "yy"))
PrevYear = CStr(FormYear - 1)
Обратите внимание на явное преобразование из строк в целые и обратно.VBA сделает это за вас, но таким образом вы (и все остальные) будете знать, что это преднамеренно
'remove these lines until everything works fine
'Disabling Display Alerts
' Application.DisplayAlerts = False
' Application.ScreenUpdating = False
Объявите здесь константу, чтобы вы знали, почему существует эта «магическая ценность». Вы знаете, что это начало финансового года, но через 5 лет, когда это изменится, кто-то другой может не знать, почему это больше не работает, и не понимать, что начало финансового года изменилось.
Const FISCAL_YEAR_START_MONTH as String = "AUG"
'Changing FY Date on Forms
If FormMonth = FISCAL_YEAR_START_MONTH Then
For Each ws In Worksheets
Select Case ws.Name
Case "JAN " & PrevYear, "FEB " & PrevYear, "MAR " & PrevYear, "APR " & PrevYear, _
"MAY " & PrevYear, "JUN " & PrevYear, "JUL " & PrevYear, "AUG " & PrevYear, _
"SEP " & PrevYear, "OCT " & PrevYear, "NOV " & PrevYear, "DEC " & PrevYear
Как только вы найдете лист, шаблон именования которого соответствует тому, что вы ищете, извлеките первые 3 символа (название месяца) и добавьте новый год к его концу.
ws.Name = Left(ws.Name, 3) & " " & CStr(FormYear)
End Select
Next
End If
'disabled them earlier, make sure we reenable them now
'doesn't hurt to enable them if they weren't disabled earlier
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub