Страницы: 1
RSS
VBA: скрытие/отображение скрытых строк по условию
 
  Добрый день.
 Имеется файл с множеством таблиц для заполнения. Изначально все они скрыты и заполняются только при выполнении определенного условия.
 Эту задачу удалось решить с помощью довольно-таки простого макроса, добавленного в исходный код страницы с таблицами. Но, как по мне, решение вышло довольно-таки неэффективное, т. к. в реальном примере таких таблиц в одном файле порядка 2-х десятков с количеством строк в каждой от 5 до 10.
 Вопрос в том, можно ли как-то оптимизировать сам макрос, чтобы он не был настолько громоздким, но, при этом, не потерял в своей функциональности.
 Файл с примером во вложении.
 
Ну, вообще-то, это можно записать так
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Rows("4:7").Hidden = Cells(2, 7).Value = 0
        Rows("7:8").Hidden = Cells(6, 2).Value = 0
        Rows("9:10").Hidden = Cells(8, 2).Value = 0
        Rows("11:12").Hidden = Cells(10, 2).Value = 0
End Sub

Но сама затея немного бредовая.
 
Добрый день.
Подскажите, пожалуйста, почему в данном примере код работает без ошибок на незащищенном листе, но при установке защиты выдаёт ошибку.
 
Ответ в Вашем вопросе. Попробуйте зщитить лист и вручную скрыть строку.
 
vikttur, а, ну да, понял.
Спасибо!
 
Добрый день, при установке защиты нужно указать что макросам можно работать с защищенными листами. Для этого используют метод UserInterfaceOnly

https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=102754&TITLE_SEO=102754-razreshitmakrosu-rabotat-s-gruppirovkoy-dannykh-pri-zashchite-lista&MID=849908&tags=&q=UserinterfaceOnly&FORUM_ID%5B0%5D=0&DATE_CHANGE=0&order=relevance&s=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8#message849908
 
Товарищи, ещё вопрос по данному примеру.
В примере после того, как я выбираю "да" в ячейке С2, отображается строка 4. Но отображается она не сразу, а только после того, как я стану курсором в любую другую ячейку.
Вопрос в том, можно ли как-то избавиться от этой задержки и сделать так, чтобы строка появлялась сразу после того, как я выберу "да" в С2?
 
Дмитрий Тарковский, спасибо!
 
Потому что Вы так написали )) В модуле листа реакция на событие Worksheet_SelectionChange. Т.е. на активацию ячейки, а не на изменение значения.
 
Юрий М, а ведь действительно. Спасибо за помощь.
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("C2")) Is Nothing Then
        If Target = "Да" Then Rows(4).Hidden = False
    End If
End Sub
 
Юрий М, простите за глупый вопрос, но зачем такой объёмный код для моей задачи?)
Код товарища RAN вроде как неплохо и так работает.
Изменено: artem3.6 - 21.09.2019 13:33:36
 
В коде из #2 нет проверки адреса контролируемой ячейки и нет проверки на значение ("Да"). Он будет срабатывать при активации любой ячейки и не будет зависеть от значения в выпадающем списке.
Проверьте сами: в выпадающем списке выбрать "Нет" и активировать любую ячейку - строка 4 отобразится. Но Вам ведь нужно отобразить её только при значении "Да".
 
Юрий М, нет, у меня изначально в ячейке G2 была и есть формула, которая проверяла выполнение этих 2-х условий.
К тому же сейчас я немного усовершенствовал код к такому виду
Код
 Rows("4:7").Hidden = Cells(2, 3).Text <> "Да"  

Вроде как всё прекрасно работает.

Изменено: artem3.6 - 21.09.2019 13:49:58
 
Цитата
artem3.6 написал:
не, у меня изначально в G2 была и есть формула
Но я же видел только выпадающий список ))
И в #7 Вы пишете:
Цитата
artem3.6 написал:
после того, как я выбираю "да" в ячейке С2
Вот я и реагировал на это )
 
Юрий М, ну да, но в коде самого примера всё это есть)
Да и чего спорить-то, проблему мою решили и отлично.
Спасибо ещё раз помощь!
Страницы: 1
Наверх