Ошибка Excel VBA «Блокировать, если без конца, если»

#excel #vba #if-statement

#excel #vba #if-оператор

Вопрос:

Кажется, я не могу понять, почему мой скрипт не запущен. Я понимаю, это потому, что я неправильно использую оператор IF, но не вижу, где ошибка.

Любая помощь приветствуется! Спасибо!

 Dim sheetsArray As Sheets
    Set sheetsArray = ThisWorkbook.Sheets(Array("Project", "Project 2", "Project 3", "Project 4"))


    Application.ScreenUpdating = False
    If ShowHide1.Name = "Show All Projects" Then

        For Each sheet In sheetsArray
            sheet.Visible = xlSheetVisible
        Next sheet

        ShowHide1.Name = "Hide All Projects"

        Sheet1.Activate
    Else

        For Each sheet In sheetsArray
            If (sheet.Name <> ShowHide1.Name And sheet.Name <> AlwaysShow.Name) Then
               sheet.Visible = xlSheetVeryHidden
            End If
        Next sheet

        ShowHide1.Name = "Show All Projects"


    Set sheetsArray = ThisWorkbook.Sheets(Array("Jagger1", "Jagger2", "Jagger3", "Jagger4"))


    Application.ScreenUpdating = False
    If ShowHide1.Name = "Show All Jagger" Then

        For Each sheet In sheetsArray
            sheet.Visible = xlSheetVisible
        Next sheet

        ShowHide1.Name = "Hide Jagger"

        Sheet1.Activate
    Else

        For Each sheet In sheetsArray
            If (sheet.Name <> ShowHide1.Name And sheet.Name <> AlwaysShow.Name) Then
               sheet.Visible = xlSheetVeryHidden
            End If
        Next sheet

        ShowHide1.Name = "Show all Jagger"


        AlwaysShow.Activate
    End If
    Application.ScreenUpdating = True
End Sub
  

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

1. Вы упускаете End If из виду свое первое If утверждение.

2. С Option Explicit объявленной в верхней части модуля я не могу пройти мимо необъявленной переменной ShowHide1 . Возможно ли, что она объявлена как глобальная?

Ответ №1:

Попробуйте:

 Option Explicit

Sub test()

    Dim sheetsArray As Sheets

    Set sheetsArray = ThisWorkbook.Sheets(Array("Project", "Project 2", "Project 3", "Project 4"))

    Application.ScreenUpdating = False

        If ShowHide1.Name = "Show All Projects" Then

            For Each Sheet In sheetsArray
                Sheet.Visible = xlSheetVisible
            Next Sheet

            ShowHide1.Name = "Hide All Projects"

            Sheet1.Activate
        Else

            For Each Sheet In sheetsArray
                If (Sheet.Name <> ShowHide1.Name And Sheet.Name <> AlwaysShow.Name) Then
                   Sheet.Visible = xlSheetVeryHidden
                End If
            Next Sheet

            ShowHide1.Name = "Show All Projects"

        End If

        Set sheetsArray = ThisWorkbook.Sheets(Array("Jagger1", "Jagger2", "Jagger3", "Jagger4"))

        If ShowHide1.Name = "Show All Jagger" Then

            For Each Sheet In sheetsArray
                Sheet.Visible = xlSheetVisible
            Next Sheet

            ShowHide1.Name = "Hide Jagger"

            Sheet1.Activate
        Else

            For Each Sheet In sheetsArray
                If (Sheet.Name <> ShowHide1.Name And Sheet.Name <> AlwaysShow.Name) Then
                   Sheet.Visible = xlSheetVeryHidden
                End If
            Next Sheet

            ShowHide1.Name = "Show all Jagger"

            AlwaysShow.Activate

        End If

    Application.ScreenUpdating = True

End Sub