Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2020, 12:32   #1
mkm
Пользователь
 
Регистрация: 20.10.2019
Сообщений: 17
По умолчанию Два условия скрытия ячеек на одном листе

Добрый день! Прошу помочь разобраться. Есть условия скрытия ячеек по значению ячейки D59
Код:
Private Sub Worksheet_Calculate()
 If Range("D59").Value <> lastVal Then
        Application.EnableEvents = False
            If Range("D59").Value = "<" Then                    
                Range("A67:A71").EntireRow.Hidden = True                
                Range("A60:A66").EntireRow.Hidden = False                   
            ElseIf Range("D59").Value = ">" Then               
                Range("A60:A66").EntireRow.Hidden = True                    
                Range("A67:A71").EntireRow.Hidden = False                   
            End If
        Application.EnableEvents = True
    End If
End Sub
Пытаюсь добавить на лист еще одно условия по другой ячейке, и выдает ошибку. Дайте совет как правильно написать.
Код:
        
        If Range("AY7").Value = "ДА" Then
                Range("A180:A299").EntireRow.Hidden = False                   'Строка A180:A290 -
        End If
 включил
mkm вне форума Ответить с цитированием
Старый 02.07.2020, 16:16   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

ElseIF третья ветка, не?

Цитата:
и выдает ошибку.
кому выдает? Мы не видели никакой ошибки
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 02.07.2020, 17:30   #3
mkm
Пользователь
 
Регистрация: 20.10.2019
Сообщений: 17
По умолчанию

Мои попытки осуществить задуманное. Приметив но на что способен
Сам код:
Код:
Private Sub Worksheet_Calculate()
  If Range("D59").Value <> lastVal Then
        Application.EnableEvents = False
            If Range("D59").Value = "<" Then                    'Условие 1
                Range("A67:A71").EntireRow.Hidden = True                    'Строка A59:A63 - отключил
                Range("A60:A66").EntireRow.Hidden = False                   'Строка A52:A58 - включил
            ElseIf Range("D59").Value = ">" Then                'Условие 1
                Range("A60:A66").EntireRow.Hidden = True                    'Строка A52:A58 - отключил
                Range("A67:A71").EntireRow.Hidden = False                   'Строка A59:A63 - включил
            End If
        Application.EnableEvents = True
  End If
  If Not Application.Intersect(Range("AY7"), Range(Target.Address)) _
           Is Nothing Then                                  'Условие №1
           If Range("AY7").Value = "ДА" Then
                Range("A180:A299").EntireRow.Hidden = False                   'Строка A180:A290 - включил
           ElseIf Range("AY7").Value = "НЕТ" Then              'Условие 2
                Range("A180:A299").EntireRow.Hidden = True                    'Строка A180:A290 - отключил
        End If
  End If
End Sub
Ошибка : Run-time error "424" Object required
Изображения
Тип файла: jpg Microsoft Visual Basic.jpg (18.1 Кб, 32 просмотров)
Тип файла: jpg Microsoft Visual Basic for Applications [break] - [Лист4 (Code)].jpg (56.0 Кб, 1 просмотров)
mkm вне форума Ответить с цитированием
Старый 02.07.2020, 18:22   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Target где передается, каким будет значение Target.Address?
Уберите проверку на пересечение, как вариант
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 02.07.2020, 23:56   #5
mkm
Пользователь
 
Регистрация: 20.10.2019
Сообщений: 17
По умолчанию

Честно не знаю как правильно ответить на поставленный вопрос. Макрос работает на конкретном листе, соответственно ищет указанные ячейки на данном листе. По идее Target.Address - AY7

А можете дать совет как корректнее записать поставленную задачу. Если в словах, то нужно что бы на листе в разных ячейках D59 и AY7 были разные условия и каждое (в зависимости от разных значениях в этих ячейках) уже определяло для своих ячеек набор прописанных команд команд -
Код:
 Range("A180:A299").EntireRow.Hidden = False
mkm вне форума Ответить с цитированием
Старый 03.07.2020, 08:14   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от mkm Посмотреть сообщение
По идее Target.Address - AY7
Где екселю об этом сказано?
Вот, например, в событии смены выделения понятно что такое Target
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
' some code here
End Sub
Цитата:
Сообщение от mkm Посмотреть сообщение
в разных ячейках D59 и AY7 были разные условия и каждое (в зависимости от разных значениях в этих ячейках) уже определяло для своих ячеек набор прописанных команд команд
т.е если Д59 = ">" и АУ = "Да" то надо скрыть строки A60:A66 и A180:A299 ?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 03.07.2020, 14:21   #7
mkm
Пользователь
 
Регистрация: 20.10.2019
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
т.е если Д59 = ">" и АУ = "Да" то надо скрыть строки A60:A66 и A180:A299 ?
Нет. У каждой ячейки D59 и AY7 свои обособленные условия не связанные между собой. Каждое условие работает по своему принципу.

1-й вариант работы D59 условие - ">", тогда
Код:
                Range("A60:A66").EntireRow.Hidden = True  
                Range("A67:A71").EntireRow.Hidden = False
При смене условие - "<", тогда
Код:
                Range("A67:A71").EntireRow.Hidden = True                   
                Range("A60:A66").EntireRow.Hidden = False
При этом на ячейку AY7 не смотрим.

2-й вариант работы AY7 условие - "ДА", тогда
Код:
     Range("A180:A299").EntireRow.Hidden = False
При смене условие - "НЕТ", тогда

Код:
Range("A180:A299").EntireRow.Hidden = True
При этом на ячейку D59 не смотрим.
mkm вне форума Ответить с цитированием
Старый 05.07.2020, 00:49   #8
Elixi
Форумчанин
 
Регистрация: 10.05.2019
Сообщений: 163
По умолчанию

mkm
почему вы решили обработку вашего кода повесить на собитие .Calculate ?
Elixi вне форума Ответить с цитированием
Старый 06.07.2020, 11:25   #9
mkm
Пользователь
 
Регистрация: 20.10.2019
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Elixi Посмотреть сообщение
mkm
почему вы решили обработку вашего кода повесить на собитие .Calculate ?
У меня не получилось другими способами (известные мне) сделать условие скрытия ячеек в котором можно было использовать символы "<", ">"
mkm вне форума Ответить с цитированием
Старый 06.07.2020, 17:04   #10
Elixi
Форумчанин
 
Регистрация: 10.05.2019
Сообщений: 163
По умолчанию

https://office-guru.ru/excel/sobytija-v-excel-464.html

https://excelpedia.ru/makrosi-v-excel/obrabotka-sobitii

Последний раз редактировалось Elixi; 06.07.2020 в 21:11.
Elixi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При вводе данных в ячейку на одном листе появляются данные в ячейках на другом листе, но не макросов, не формул я не вижу. Подскажите, пожалуйста, как это осуществлено? CherryPashka Microsoft Office Excel 5 17.03.2020 00:06
Заполнение пустых ячеек по условию (копирование???) при помощи макроса, Макрос для копирования диапазона ячеек на текущем листе maxscorpio Microsoft Office Excel 0 06.02.2017 09:43
Макрос Скрытия строк в листе Zzema Microsoft Office Excel 20 13.06.2014 12:39
работа на одном листе с данными из LISTBOX, данные на другом листе konstantin1990 Microsoft Office Excel 3 22.07.2013 15:15
ячейка на одном листе, в которую необходимо подставлять данные из столбца, находящегося на другом листе Ирина Водолагина Microsoft Office Excel 4 04.03.2009 23:38