2016-12-10 3 views
0

Я написал код, чтобы скрыть и отобразить листы, изменив значения на 1-м листе, как я могу сделать все листы видимыми, за исключением первых двух листов?Видимые все листы, за исключением указанных двух листов

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Range("H5").Value = "ADMIN" Then 
     Sheets(2).Visible = True 
     Sheets(2).Activate 
    Else 
     Sheets(2).Visible = xlVeryHidden 
    End If 
    If Range("G8").Value = True And Range("H5").Value = "" Then 
     Sheets(3).Visible = True 'I want to visible all sheets except first two sheets. 
     Sheets(4).Visible = True 
     Sheets(1).Visible = xlVeryHidden 
     Sheets(2).Visible = xlVeryHidden 
    Else 
     Sheets(3).Visible = xlVeryHidden 
     Sheets(4).Visible = xlVeryHidden 
    End If 
End Sub 

ответ

0

Что вам нужно сделать, это петлю Копания всего Sheets в вашей книге, и если ваш Sheet.Index больше 2, то сделать лист Visible.

См цикл ниже:

Dim Sht As Worksheet 

' loop through all worksheets in this workbook 
For Each Sht In ThisWorkbook.Worksheets 
    If Sht.Index > 2 Then ' check if index > 2 
     Sht.Visible = xlSheetVisible 
    Else 
     Sht.Visible = xlVeryHidden 
    End If 
Next Sht 

Весь код

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim Sht As Worksheet 

If Range("H5").Value = "ADMIN" Then 
    Sheets(2).Visible = True 
    Sheets(2).Activate 
Else 
    Sheets(2).Visible = xlVeryHidden 
End If 

If Range("G8").Value = True And Range("H5").Value = "" Then 
    For Each Sht In ThisWorkbook.Worksheets 
     If Sht.Index > 2 Then 
      Sht.Visible = xlSheetVisible 

     End If 
    Next Sht 

End If 

End Sub 
+0

не нуждается в 'Else Sht.Visible = xlVeryHidden' и' Else листов (3) .Visible = xlVeryHidden' 'Листы (4) .Visible = xlVeryHidden' – Adnan

+0

@Adnan Я просто пошел с вашим исходным кодом. я подумал, может быть, вы хотите, чтобы другие листы видны –

0

отредактирован, чтобы отразить Аднан последний код

вы можете попробовать этот код:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim iSht As Long 

    Sheets(2).Visible = xlVeryHidden '<--| you'll make it visible if the case (see below) 
    Select Case Range("H5").Value '<--| check for H5 cell only once 
     Case "ADMIN" 
      Sheets(2).Visible = True 
      Sheets(2).Activate 
     Case "" 
      If Range("G8").Value Then '<--| check for it only when H5 cell value <> "ADMIN" 
       For iSht = 3 To Sheets.count '<--| loop through sheets indexes greater than 2, and avoid 'If ... Then' check 
        Sheets(iSht).Visible = True 
       Next iSht 
       Sheets(1).Visible = xlVeryHidden '<--| hide first sheet only once 
      End If 
    End Select 
End Sub 

, который делает то же самое, как ваша, но некоторые логические улучшения:

  • не проверяет дважды Range("H5").Value

  • не проверяет Range("G8").Value бесцельно после Range("H5").Value является «ADMIN»

  • не производит проверку If Sht.Index > 2 Then на каждые For Each Sht In ThisWorkbook.Worksheets петля

  • не установлен Sheets(1).Visible = xlVeryHidden на каждом цикле For Each Sht In ThisWorkbook.Worksheets

+0

@Adnan, извините, я не понимаю вас: что вы имеете в виду с последним комментарием? – user3598756

+0

жаль, что я здесь новый. Я не собираюсь писать код в комментариях – Adnan

+0

Не надо. Просто напишите комментарии! Какая у вас проблема с моим кодом? – user3598756

0
Private Sub Worksheet_Change(ByVal Target As Range) 

Dim Sht As Worksheet 

If Range("H5").Value = "ADMIN" Then 
    Sheets(2).Visible = True 
    Sheets(2).Activate 
Else 
    Sheets(2).Visible = xlVeryHidden 
End If 

If Range("G8").Value = True And Range("H5").Value = "" Then 
    For Each Sht In ThisWorkbook.Worksheets 
     If Sht.Index > 2 Then 
      Sht.Visible = xlSheetVisible 
      Sheets(1).Visible = xlVeryHidden 
'  Else 
'   Sht.Visible = xlVeryHidden 
     End If 
    Next Sht 
'Else 
' Sheets(3).Visible = xlVeryHidden 
' Sheets(4).Visible = xlVeryHidden 
End If 

End Sub 
+0

На самом деле, я создал форму входа в первый рабочий лист, который дает доступ к другим листам, поэтому я вношу некоторые изменения в код Shai Rado и конвертирует дополнительный код в комментарии, теперь он работает для меня. – Adnan