Пропустить некоторые рабочие листы в функции цикла в Excel VBA

#excel

#excel

Вопрос:

Я хочу, чтобы кнопка заменяла информацию на БОЛЬШИНСТВЕ листов информацией из основного листа при нажатии кнопки. Однако я хочу, чтобы он пропускал некоторые листы.

У меня есть приведенный ниже код, который работает, но есть 2 листа, которые я хочу пропустить при запуске. Как я могу указать, что пропускать листы с именами «Даты» и «Ежемесячно»

  Sub Button4_Click()

 Dim wsVar As Worksheet

 For Each wsVar In ThisWorkbook.Sheets
     With wsVar
        .Range("B9:M30").Value = Worksheets("BASE").Range("B9:M30").Value
     End With
 Next wsVar

 End Sub
 

Ответ №1:

Вы можете использовать оператор IF, чтобы проверить имя рабочего листа, а затем действовать соответствующим образом.

    For Each wsVar In ThisWorkbook.Sheets
     If wsVar.Name = "foo" Or wsVar.Name = "bar" Then
      ' do nothing
     Else
    
        With wsVar
            .Range("B9:M30").Value = Worksheets("BASE").Range("B9:M30").Value
        End With
    
     End If
   Next wsVar
 

Комментарии:

1. Куда в моем коде пойдет оператор If?

2. Я добавил несколько примеров кода. Настройте foo и bar на листах, которые вы хотите пропустить.

3. Это билет! Спасибо! Я приму ваш ответ, как только он мне позволит.

4. После запроса должно пройти определенное время

Ответ №2:

Этот код исключит все листы, перечисленные в Exclude массиве. Обратите внимание, что сравнение имен листов выполняется без учета регистра, а начальные или конечные пробелы считаются непреднамеренными и удаляются.

 Sub Button4_Click()

    Dim wsVar       As Worksheet
    Dim Exclude()   As String
    Dim i           As Integer
    
    Exclude = Split("Dates,Monthly", ",")
    For Each wsVar In ThisWorkbook.Worksheets
        With wsVar
            For i = UBound(Exclude) To 0 Step -1
                If StrComp(wsVar.Name, Trim(Exclude(i))) = 0 Then Exit For
            Next i
            If i >= 0 Then .Range("B9:M30").Value = Worksheets("BASE").Range("B9:M30").Value
        End With
    Next wsVar

 End Sub
 

С небольшим изменением вы можете преобразовать эту же функцию для обработки только перечисленных листов. Определить листы для действий положительно, а не отрицательно, — это, вообще говоря, безопасный способ. Но если вы решите это сделать, пожалуйста, также переименуйте массив 🙂