使用VBA自动更改工作表名称?

时间:2018-10-15 16:32:06

标签: vba excel-vba

我希望运行一个宏,该宏将在新会计年度开始时自动重命名我的工作表。我的工作表标记为JAN 18,FEB 18,MAR 18等,其中18代表会计年度18。我创建了一个用户表单,当选择了OCT月份时,我希望所有以18作为会计年度的工作表增加到19。第二年增加到20。这可能是艰巨的,必须每年手动更改。老实说,我不知道该如何开始尝试。我知道我很可能需要遍历工作表并使用某种变量进行替换。任何建议将不胜感激!

2 个答案:

答案 0 :(得分:1)

这里是一个简单的循环,可以完成您的询问。第一个Case是您要列出要运行代码的工作表的位置。对于所有其他工作表,宏会将1加到最后两个字符。因此,如果以下格式对于所有目标工作表名称都不适用,则该解决方案将失效:MMM YY

如果您有Userform开始该过程,则只需从Userform调用此宏。


如果您要忽略宏,请尝试执行以下操作

Option Explicit

Sub NewYear()

Dim ws As Worksheet

For Each ws In Worksheets
    Select Case ws.Name
        Case "Sheet1", "Sheet1", "Sheet3" 
        'List any sheets that you want the macro to ignore here ^            

    Case Else
        ws.Name = Left(ws.Name, 3) & Chr(32) & Right(ws.Name, 2) + 1

Next ws

End Sub

如果宏应在所有工作表上运行,则可以减少为

Sub NewYear()

Dim ws As Worksheet

For Each ws In Worksheets
    ws.Name = Left(ws.Name, 3) & Chr(32) & Right(ws.Name, 2) + 1 
Next ws

End Sub

答案 1 :(得分:0)

我前后反复地将字符串末尾的字符转换为整数,然后再转换回字符串,这可能不是必需的,但是在测试时有效:

Sub sheetRename()
Dim wb As Workbook
Dim ws As Worksheet

For Each ws In Worksheets
If IsNumeric(Right(ws.Name, 2)) Then
ws.Name = Left(ws.Name, Len(ws.Name) - 2) & CStr(CInt(Right(ws.Name, 2)) + 1)
End If
Next ws


End Sub

它还包括检查工作表名称是否实际上以两个数字结尾。希望对您有所帮助。