Скрытие определенных строк при установке флажка

Автор DMaksimov, 19.10.2012, 11:35

« назад - далее »

grits

#30
уважаемые Гуру!

Позвольте усложнить вопрос сокрытием/отображением не сток, которые я уже освоил, а листов в Книге.

Действие разворазивается на Листе 3.
При вводе в ячейку А1 единицы отображается Лист1, а Лист2 скрывается.
При вводе в ячейку А1 двойки отображается Лист2, а Лист1 скрывается...

Можно ли потанцевать с СASE для того чтобы скрыть/обобразить лист?

Poltava

А вас собственно говоря что в гугле забанили? тогда можно использовать запись макроса скрыть и показать лист а потом проанализировать что получилось это вам совет на будущее.
А по существу с листами такой же принцип отслеживаем изменение проверяем значение и соответственно скрываем или отображаем лист таким кодом
ThisWorkbook.Sheets("Лист1").Visible = -1

где -1 отобразить
       0 скрыть
       2 сделать лист очень скрытым (скрывает в списке листов, вернуть можно только программно)
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

grits

Чего-то подумал, что Гугль не профильный форум... подумал задать вопрос на профильном...  ;)

За запись макроса как-то не подумал, да и в 2003 как скрывать листы, окромя как через редактор ВБА Alt+F11 не в теме...

зы спасибо что не послали...  ;D

grits

Граждане, помогите тупому с синтаксисом Sheets.

Вот наваял я код для предыдущего вопроса, действия пишу для Листа4:

Private Sub Worksheet_Change(ByVal Target As Range)
   If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
   Application.ScreenUpdating = False
   If Range("A1") <> "1" Then
   Sheets("Лист1").Visible = 0
   Sheets("Лист2").Visible = 0
   Sheets("Лист3").Visible = 1
   Else:
   Sheets("Лист1").Visible = 1
   Sheets("Лист2").Visible = 1
   Sheets("Лист3").Visible = 0
   Application.ScreenUpdating = True
   End If
End Sub


Естественно, любой здравый человек скажет: Зачем дублировать одинаковые условия в Then, Else для листов 1,2, если можно все описать в одном условии Sheets при помощи параметра "массив".

Достоверные данные из мануала звучат так
ЦитироватьUse Sheets(array) to specify more than one sheet. The following example moves the sheets named "Sheet4" and "Sheet5" to the beginning of the workbook.

Sheets(Array("Sheet4", "Sheet5")).Move before:=Sheets(1)

Используя полученные знания преобразуем код в
Private Sub Worksheet_Change(ByVal Target As Range)
   If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
   Application.ScreenUpdating = False
   If Range("A1") <> "1" Then
   Sheets(Array("Лист1", "Лист2")).Visible = 0
   Sheets("Лист3").Visible = 1
   Else:
   Sheets(Array("Лист1", "Лист2")).Visible = 1
   Sheets("Лист3").Visible = 0
   Application.ScreenUpdating = True
   End If
End Sub

который тут же требует отдебагить строки

Sheets(Array("Лист1", "Лист2")).Visible = 0
Sheets(Array("Лист1", "Лист2")).Visible = 1


Рождается 2 мысли на этот счет: или проблемы с синтаксисом, или возможно параметр .Visible нельзя использовать совместно с Array. Подскажите пожалуйста...  ::)

kuklp

#34
Нельзя. Но можно с выделенными листами:
    Sheets(Array("Лист1", "Лист2")).Select
    ActiveWindow.SelectedSheets.Visible = False

При этом следует помнить, что хотя бы один лист должен оставаться видимым(да и как Вы поменяете значение в А1 скрытого листа? Такой код в лист4(и там же А1):
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address <> "$A$1" Then Exit Sub
   Dim sh As Worksheet
   Application.ScreenUpdating = False
   For Each sh In Sheets(Array("Лист1", "Лист2", "Лист3"))
   sh.Visible = Range("A1") = 1 - (sh.Name = "Лист3")
   Next
End Sub



Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

grits

Я так и написал, что
Цитата: grits от 19.11.2012, 13:29
...действия пишу для Листа4:
ну и из кода понятно, что действия произвожу над 3-мя первыми листами...

KuklP спасибо, понял...

зы в коде Вы забыли включить обновление экрана... ;)


kuklp

#36
Не забыл:-) Оно и так включится.
ЦитироватьЦитата: grits от Сегодня в 12:29:23
...действия пишу для Листа4:
Виноват. Читал по диагонали:-)
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

DMaksimov

Дабы не плодить похожие темы, задам еще один вопрос в этой.
Можно ли средствами VB сделать заданный флажок неактивным, чтобы его невозможно было включить?

kuklp

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771