Здравствуйте! У меня есть однотипный код, который обрабатывает первый и четвёртый листы в книге, перекрашивая ячейки в них [vba]
Код
Dim x As Range Dim s As String s = Лист1.Name For Each x In ThisWorkbook.Worksheets(s).UsedRange If x.Interior.Color = vbRed Or x.Interior.Color = vbGreen Then x.Interior.Color = vbBlue Next s = Лист4.Name For Each x In ThisWorkbook.Worksheets(s).UsedRange If x.Interior.Color = vbRed Or x.Interior.Color = vbGreen Then x.Interior.Color = vbBlue Next
[/vba] Но что делать если мне нужно обрабатывать каждый третий лист, а их будет допустим 40? Неужели необходимо плодить однотипные записи? И желательно обращаться к листам по кодовому имени на случай если пользователь решит их переименовать или переместить То есть по здесь идее нужен цикл с шагом 3 от 1 до Workbooks(1).Sheets.Count но работающий код мне написать не удалось, постоянно какие-то ошибки возникают Есть идеи, как это реализовать? Спасибо!
Здравствуйте! У меня есть однотипный код, который обрабатывает первый и четвёртый листы в книге, перекрашивая ячейки в них [vba]
Код
Dim x As Range Dim s As String s = Лист1.Name For Each x In ThisWorkbook.Worksheets(s).UsedRange If x.Interior.Color = vbRed Or x.Interior.Color = vbGreen Then x.Interior.Color = vbBlue Next s = Лист4.Name For Each x In ThisWorkbook.Worksheets(s).UsedRange If x.Interior.Color = vbRed Or x.Interior.Color = vbGreen Then x.Interior.Color = vbBlue Next
[/vba] Но что делать если мне нужно обрабатывать каждый третий лист, а их будет допустим 40? Неужели необходимо плодить однотипные записи? И желательно обращаться к листам по кодовому имени на случай если пользователь решит их переименовать или переместить То есть по здесь идее нужен цикл с шагом 3 от 1 до Workbooks(1).Sheets.Count но работающий код мне написать не удалось, постоянно какие-то ошибки возникают Есть идеи, как это реализовать? Спасибо!vzdorny
nilem, не совсем. если я правильно понимаю, то в данном случае обращение к листу происходит по его порядковому номеру, который меняется, если его перетащить (например, если в новой книге, состоящей из листов, ярлычки которых расположены слева направо [Лист1, Лист2 и т.д.] поменять местами ярлычки Лист1 и Лист2, то Лист2 станет первым, а Лист1 вторым)
nilem, не совсем. если я правильно понимаю, то в данном случае обращение к листу происходит по его порядковому номеру, который меняется, если его перетащить (например, если в новой книге, состоящей из листов, ярлычки которых расположены слева направо [Лист1, Лист2 и т.д.] поменять местами ярлычки Лист1 и Лист2, то Лист2 станет первым, а Лист1 вторым)vzdorny
Сообщение отредактировал vzdorny - Четверг, 08.08.2019, 22:05
Такой вариант (с учетом того, что кодовые имена не переименовывались) [vba]
Код
Sub tt() scn_ = Sheets(1).CodeName For i = 1 To Len(scn_) If IsNumeric(Mid(scn_, i, 1)) Then tcn_ = Left(scn_, i - 1) Exit For End If Next i For i = 1 To Sheets.Count If Replace(Sheets(i).CodeName, tcn_, "") Mod 3 = 1 Then For Each x_ In Sheets(i).UsedRange With x_ ic_ = .Interior.Color If ic_ = vbRed Or ic_ = vbGreen Then .Interior.Color = vbBlue End If End With Next End If Next i MsgBox "Всё" End Sub
[/vba]
* Немного переписал и файл перевложил
Такой вариант (с учетом того, что кодовые имена не переименовывались) [vba]
Код
Sub tt() scn_ = Sheets(1).CodeName For i = 1 To Len(scn_) If IsNumeric(Mid(scn_, i, 1)) Then tcn_ = Left(scn_, i - 1) Exit For End If Next i For i = 1 To Sheets.Count If Replace(Sheets(i).CodeName, tcn_, "") Mod 3 = 1 Then For Each x_ In Sheets(i).UsedRange With x_ ic_ = .Interior.Color If ic_ = vbRed Or ic_ = vbGreen Then .Interior.Color = vbBlue End If End With Next End If Next i MsgBox "Всё" End Sub