Как переименовать листы в книге с исключениями? - PullRequest
0 голосов
/ 16 июня 2020

Я намерен переименовать все листы со значением ячейки «G2», кроме двух листов с именами «Основной» и «Фиксированный».

Код продолжает переименовывать два листа.

Sub RenameSheets()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
    'With ActiveWorkbook.ActiveSheet
    If ActiveWorkbook.ActiveSheet.Name <> "Main" Or _
      ActiveWorkbook.ActiveSheet.Name <> "Fixed" Then

        ws.Activate
        If Range("G2").Value = "" Then
            ActiveSheet.Name = Range("G2").End(xlDown).Value
        Else: ActiveSheet.Name = Range("G2").Value
        End If

    Else:
        GoTo Nextsv

End If

Nextsv:     Next ws

Sheets("Main").Activate
ActiveSheet.Cells(1, 1).Select
End Sub

1 Ответ

2 голосов
/ 16 июня 2020

В вашем коде было 3 ошибки

  1. Вы использовали Activate и Active, что привело к второй ошибке. Прочтите этот , чтобы узнать, как этого избежать.
  2. Вы проверяли имя ActiveSheet перед ws.Activate, чтобы он всегда проверял предыдущий лист.
  3. Ваши условия были с Or. Main <> Fixed, так что имя в любом случае изменится, потому что Main не Fixed и соответствует второй части вашего Or и наоборот. Используйте And, чтобы принудительно проверить код, чтобы выполнялись оба условия.

Это код без использования Activate или Select:

Option Explicit
Sub RenameSheets()

    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> "Main" And ws.Name <> "Fixed" Then
            With ws
                If .Range("G2") = vbNullString Then
                    .Name = .Range("G2").End(xlDown)
                Else
                    .Name = .Range("G2")
                End If
            End With
        End If
    Next ws

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...