Здравствуйте! Можно ли в Excel запретить переход с одного листа книги на другой,если в текущем листе имеются пустые(незаполненные) ячейки,которые обязательно должны быть заполнены. И ячейки эти из определенного диапазона, а может быть даже и нескольких разрозненных диапазонов (т.е. то тут несколько ячеек, то в другом месте). Возможно ли такое организовать в принципе и посредством чего? Надеюсь, вопрос в прикреплении примера не нуждается.
Здравствуйте! Можно ли в Excel запретить переход с одного листа книги на другой,если в текущем листе имеются пустые(незаполненные) ячейки,которые обязательно должны быть заполнены. И ячейки эти из определенного диапазона, а может быть даже и нескольких разрозненных диапазонов (т.е. то тут несколько ячеек, то в другом месте). Возможно ли такое организовать в принципе и посредством чего? Надеюсь, вопрос в прикреплении примера не нуждается.Ученик
Средствами Excel не получится. С помощью VBA - можно Попробуйте во вложении перейти на Лист2. Пока в ячейке А1Листа1 у Вас будет пусто - перейти на Лист2 не получится
Средствами Excel не получится. С помощью VBA - можно Попробуйте во вложении перейти на Лист2. Пока в ячейке А1Листа1 у Вас будет пусто - перейти на Лист2 не получитсяSerge_007
Так-то получается,но можно ли чтобы имя листа в коде изменялось, извлекаясь из названия листа. Потому что,если листов много для каждого прописывать сложновато, они по шаблону создаются,у каждого свое имя. Имеет смысл прописать код в шаблоне, извлекая имя листа? Как быть, если на "незаполненность" проверяется диапазон ячеек? Т.е. код нужно модифицировать следующим образом: [vba]
Код
If Sheets("Текущий лист").Range("Диапазон ячеек") = "" Then Sheets("Текущий лист").Activate
[/vba]
Так-то получается,но можно ли чтобы имя листа в коде изменялось, извлекаясь из названия листа. Потому что,если листов много для каждого прописывать сложновато, они по шаблону создаются,у каждого свое имя. Имеет смысл прописать код в шаблоне, извлекая имя листа? Как быть, если на "незаполненность" проверяется диапазон ячеек? Т.е. код нужно модифицировать следующим образом: [vba]
Код
If Sheets("Текущий лист").Range("Диапазон ячеек") = "" Then Sheets("Текущий лист").Activate
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Dim r As Range For Each r In Sh.[Rng].Cells If IsEmpty(r) Then Sh.Activate: Exit Sub Next End Sub
[/vba] Это весь код?Как?Как вычисляются пустые ячейки, которые должны быть заполнены?никаких диапазонов я в недоумении.
Скудные знания VBA останавливают.
[vba]
Код
Option Explicit
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Dim r As Range For Each r In Sh.[Rng].Cells If IsEmpty(r) Then Sh.Activate: Exit Sub Next End Sub
[/vba] Это весь код?Как?Как вычисляются пустые ячейки, которые должны быть заполнены?никаких диапазонов я в недоумении.Ученик
в книге на каждом листе определено имя rng уровня листа. ссылающееся на соответствующий диапазон (в т.ч. разрывный) ячеек (или одну ячейку). для удобства эти диапазоны сейчас на листах имеют заливку. но это необязательно.
макрос вызывается при деактивации любого листа. перебирает все ячейки диапазона [rng] как только попадается хотя бы одна пустая - заново активирует лист и заканчивает работу.
нет, блин, половина кода спрятана у меня в сейфе
в книге на каждом листе определено имя rng уровня листа. ссылающееся на соответствующий диапазон (в т.ч. разрывный) ячеек (или одну ячейку). для удобства эти диапазоны сейчас на листах имеют заливку. но это необязательно.
макрос вызывается при деактивации любого листа. перебирает все ячейки диапазона [rng] как только попадается хотя бы одна пустая - заново активирует лист и заканчивает работу.ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
теперь понятно,очень даже, все работает. но вот возникла новая проблема, добавила в книгу обычный пустой лист. и если в листах с rng есть пустые ячейки ни на этот лист,ни с него на ранее имеющиеся листы не переходит. даже когда все ячейки из rng заполнены, попытка перехода с нового добавленного листа на листы с rng - ошибка. выдается одна и та же ошибка: Object required. почему так никак не пойму,можно ли это как-то устранить?
теперь понятно,очень даже, все работает. но вот возникла новая проблема, добавила в книгу обычный пустой лист. и если в листах с rng есть пустые ячейки ни на этот лист,ни с него на ранее имеющиеся листы не переходит. даже когда все ячейки из rng заполнены, попытка перехода с нового добавленного листа на листы с rng - ошибка. выдается одна и та же ошибка: Object required. почему так никак не пойму,можно ли это как-то устранить?Ученик
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Dim r As Range On Error GoTo ex For Each r In Sh.[rng].Cells If IsEmpty(r) Then Sh.Activate: Exit Sub Next ex: End Sub
[/vba]
[offtop]
Цитата (Ученик)
добавила
гм... "Как вы яхту назовёте..." Юля, ну зачем Вы выбрали такой ник? [/offtop]
подскажите, где в
Цитата (Ученик)
запретить переход с одного листа книги на другой
(из первого поста) об этом сказано?
ну, например, можно так: [vba]
Код
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Dim r As Range On Error GoTo ex For Each r In Sh.[rng].Cells If IsEmpty(r) Then Sh.Activate: Exit Sub Next ex: End Sub
[/vba]
[offtop]
Цитата (Ученик)
добавила
гм... "Как вы яхту назовёте..." Юля, ну зачем Вы выбрали такой ник? [/offtop]ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Сообщение отредактировал ikki - Воскресенье, 14.04.2013, 00:32