2015-10-14 1 views
-1

Я хочу, чтобы скрыть все вкладки, имена которых "ABC", "DEF", "GHI"Excel VBA скрыть листы с именами в массиве

Это мой код:

Sub hideSheets() 
Dim ws As Worksheet 
invisible = Array("ABC", "DEF", "GHI") 

For Each ws In ActiveWorkbook.Worksheets 
    For Each nome In invisible 
     If ws.Name = nome Then 
      ws.Visible = False 
     Else 
      ws.Visible = True 
     End If 
    Next nome 

Next ws 

End Sub 

Который не скрывает любой лист.

+0

Это был ответ [здесь] (http://stackoverflow.com/questions/853270/hiding-an-excel-sheet). Вам нужно использовать: xlSheetVeryHidden, xlSheetHidden или xlSheetVisible после '=' вместо true или false. –

+0

@ScottCraner Ответы на этот вопрос не затрагивают компонент массива в заголовке вопроса. Кроме того, ваш комментарий, хотя и не ошибается, вводит в заблуждение. 'xlSheetHidden = 0', что в точности эквивалентно False,' xlSheetVisible = -1', что в точности эквивалентно True. Таким образом, эти два видимых состояния могут и часто достигаются с помощью простых булевых значений. 'xlSheetVeryHidden = 2', который может быть установлен либо с константой, либо с литералом, либо с выражением. В любом случае ничто из этого другого вопроса не затрагивает этот вопрос. –

+0

@ExcelHero Как всегда, я преклоняюсь перед вашими знаниями. –

ответ

2

Чтобы скрыть листы в вашем invisible массиве, это так просто, как это:

Sheets(invisible).Visible = False 

Примечание: это работает хорошо для сокрытия. Чтобы снова сделать листы видимыми, вы должны каждый раз видеть каждый лист; вы не можете использовать массив в одной строке, как вы можете для скрытия.

+0

LOL! это действительно просто! –

+0

Любой другой простой способ показать что-либо, что не в этом массиве? –

+0

Нет. Unhiding требует выполнения одного листа за раз. –

1

Вынуть else. Он скрывает его, но в следующем цикле он снова скрывается.

Dim ws As Worksheet 
invisible = Array("ABC", "DEF", "GHI") 

For Each ws In ActiveWorkbook.WorkSheets 

    For Each nome In invisible 
     If ws.name = nome Then 
      ws.Visible = False 
     End If 
    Next nome 

Next ws 
Смежные вопросы