Автоматически менять имена листов с помощью VBA? - PullRequest
0 голосов
/ 15 октября 2018

Я хочу запустить макрос, который автоматически переименует мои рабочие листы в начале нового финансового года.Мои рабочие листы помечены 18 января, 18 февраля, 18 марта и т. Д., Где 18 представляет 18 финансовый год. Я создал пользовательскую форму, и когда выбран месяц OCT, я хочу, чтобы все листы с 18 финансовым годом былиувеличился до 19. Год после этого, до 20. Это может быть пугающим необходимость вручную менять их каждый год.Честно говоря, я понятия не имею, как даже начать пытаться это.Я знаю, что мне, скорее всего, нужно будет пройтись по рабочим листам и заменить их с помощью некоторой переменной.Любые предложения будут с благодарностью!

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Я ходил взад и вперед с преобразованием символов в конце строки в целое число, а затем обратно в строку, что, возможно, не было необходимо, но при тестировании это работало:

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

Он также включает проверку, чтобы увидеть, действительно ли имя листа заканчивается двумя числами.Надеюсь, это поможет.

0 голосов
/ 15 октября 2018

Вот простой цикл для выполнения вашего запроса.Первый 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...