#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