首页 > 解决方案 > 在 VBA 中更改日期

问题描述

我正在尝试自动替换工作表。目前我有多个标题为“JAN 18”、“FEB 18”、“MAR 18”等的工作表。我有一个在宏运行之前启动的用户表单。我可以输入新的一年(即:2019),但是代码继续显示我的表格年份“18”。就像进入用户表单的条目不起作用。我正在使用的脚本利用案例语句来选择上一年的所需文件并将其替换为当前年份。

Sub NewFiscalYear()

Dim ws As Worksheet
Dim PrevYear As Integer
Dim FormYear As Integer

FormYear = Format(Date, "yy")
PrevYear = FormYear - 1

'Disabling Display Alerts
Application.DisplayAlerts = False
Application.ScreenUpdating = False

    'Changing FY Date on Forms
     If FormMonth = "AUG" 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
                    ws.Name = "ws.name " & FormYear
            End Select
        Next
    End If

我正在编写一份大型报告,该报告从多个其他工作簿中收集信息。我的用户表单包括一个输入日期(FormYear)和一个通过组合框(FormMonth)选择的月份。一旦选择了这些,就会运行宏。我的报告工作得很好,但是在新的财政年度遇到了麻烦。

*****我的目标是让用户在新财政年度的第一个月运行报告,希望他们不会注意到任何变化(除了它看起来像一个全新的工作表)。选项卡指示在运行宏之前选择的当前月份以及在用户窗体中选择的会计年度。一旦标签被识别为新年,我将检查并重置所有带有空白数据的表格。我希望这能让事情更清楚一点!*****

任何提示或技巧将不胜感激!

标签: excelvba

解决方案


您的重命名行完全错误:

ws.Name = "ws.name " & FormYear

这将尝试将“JAN 18”更改为“ws.name 19”,因为您已将对象包含在引号中。

即使你得到了正确的报价:

    ws.Name = ws.name & " " & FormYear

它将“JAN 18”更改为“JAN 18 19”


尝试:

ws.Name = Replace(ws.Name, PrevYear, FormYear)

编辑

另外,我认为您的 PrevYear/FormYear 可能不正确。

我会去:

PrevYear = Format(Date, "yy") ' so this is the current year value
FormYear = PrevYear + 1       ' this becomes next year value

推荐阅读