Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Автоматическое скрытие строк - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматическое скрытие строк (Макросы/Sub)
Автоматическое скрытие строк
A16Smersh Дата: Воскресенье, 16.06.2019, 13:03 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Добрый день,

В связи с необходимостью подготовки более 1000 однотипных документов (тотально урезанная копия во вложении, исходник весит 25 мб), появилась необходимость создания базовой формы, на которую все данные подтягиваются с 2-х других листов (фотографии, данные и т.п.), с формой и данными проблем не возникло, но есть одна проблема, которую победить я не смог: необходимо автоматически скрывать строки по вычисляемому значению в ячейке (например если F129 = "нет", то скрыть строки 128-133).

Я облазил форумы, смотрел видео и пробовал предложенные примеры применить к своему варианту, но ничего у меня не вышло, в связи с тем, что я в макросах, модулях листа и прочего полный ноль.

Если Вам не сложно, опишите как это сделать, если будет понятен принцип это будет великолепно, так как подобную процедуру надо распространить на 45 значений.
К сообщению приложен файл: 4481352.xlsx (67.3 Kb)
 
Ответить
СообщениеДобрый день,

В связи с необходимостью подготовки более 1000 однотипных документов (тотально урезанная копия во вложении, исходник весит 25 мб), появилась необходимость создания базовой формы, на которую все данные подтягиваются с 2-х других листов (фотографии, данные и т.п.), с формой и данными проблем не возникло, но есть одна проблема, которую победить я не смог: необходимо автоматически скрывать строки по вычисляемому значению в ячейке (например если F129 = "нет", то скрыть строки 128-133).

Я облазил форумы, смотрел видео и пробовал предложенные примеры применить к своему варианту, но ничего у меня не вышло, в связи с тем, что я в макросах, модулях листа и прочего полный ноль.

Если Вам не сложно, опишите как это сделать, если будет понятен принцип это будет великолепно, так как подобную процедуру надо распространить на 45 значений.

Автор - A16Smersh
Дата добавления - 16.06.2019 в 13:03
_Igor_61 Дата: Воскресенье, 16.06.2019, 16:44 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
В модуль листа:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("F129")) Is Nothing Then
If Range("F129").Value = "Нет" Then
   Rows("128:133").Hidden = True
End If
End If
End Sub
[/vba]
Будет срабатывать при вводе в F29 значения "Нет". Если нужно чтобы макрос срабатывал при каком-то другом событии, нужно об этом сообщить, т.к. из стартового сообщения непонятно по какому событию должен запускаться макрос.
К сообщению приложен файл: A16Smersh.xlsm (75.7 Kb)


Сообщение отредактировал _Igor_61 - Воскресенье, 16.06.2019, 16:46
 
Ответить
СообщениеВ модуль листа:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("F129")) Is Nothing Then
If Range("F129").Value = "Нет" Then
   Rows("128:133").Hidden = True
End If
End If
End Sub
[/vba]
Будет срабатывать при вводе в F29 значения "Нет". Если нужно чтобы макрос срабатывал при каком-то другом событии, нужно об этом сообщить, т.к. из стартового сообщения непонятно по какому событию должен запускаться макрос.

Автор - _Igor_61
Дата добавления - 16.06.2019 в 16:44
A16Smersh Дата: Воскресенье, 16.06.2019, 17:05 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
_Igor_61, огромное спасибо, все работает, а как мне теперь это размножить, чтобы было 45 подобных значений, будут меняться лишь ссылка на ячейку и строки, то есть объединить:

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("F513")) Is Nothing Then
If Range("F513").Value = "Нет" Then
Rows("512:517").Hidden = True
End If
End If
End Sub
[/vba]
и
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("F129")) Is Nothing Then
If Range("F129").Value = "Нет" Then
Rows("128:133").Hidden = True
End If
End If
End Sub
[/vba]

Или для каждой ячейки надо отдельно прописывать?


Сообщение отредактировал A16Smersh - Воскресенье, 16.06.2019, 20:22
 
Ответить
Сообщение_Igor_61, огромное спасибо, все работает, а как мне теперь это размножить, чтобы было 45 подобных значений, будут меняться лишь ссылка на ячейку и строки, то есть объединить:

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("F513")) Is Nothing Then
If Range("F513").Value = "Нет" Then
Rows("512:517").Hidden = True
End If
End If
End Sub
[/vba]
и
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("F129")) Is Nothing Then
If Range("F129").Value = "Нет" Then
Rows("128:133").Hidden = True
End If
End If
End Sub
[/vba]

Или для каждой ячейки надо отдельно прописывать?

Автор - A16Smersh
Дата добавления - 16.06.2019 в 17:05
RAN Дата: Воскресенье, 16.06.2019, 18:44 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
1 Двух макросов, обрабатывающих одно событие в модуле быть не может.
2 Для этого есть ElseIf
[vba]
Код
ElseIf Not Intersect(Target, Range("F129")) Is Nothing Then
If Range("F129").Value = "Нет" Then
Rows("128:133").Hidden = True
End If
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение1 Двух макросов, обрабатывающих одно событие в модуле быть не может.
2 Для этого есть ElseIf
[vba]
Код
ElseIf Not Intersect(Target, Range("F129")) Is Nothing Then
If Range("F129").Value = "Нет" Then
Rows("128:133").Hidden = True
End If
[/vba]

Автор - RAN
Дата добавления - 16.06.2019 в 18:44
Pelena Дата: Воскресенье, 16.06.2019, 19:39 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 19163
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
A16Smersh, оформите коды тегами с помощью кнопки # в режиме правки поста


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеA16Smersh, оформите коды тегами с помощью кнопки # в режиме правки поста

Автор - Pelena
Дата добавления - 16.06.2019 в 19:39
gling Дата: Воскресенье, 16.06.2019, 21:13 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2519
Репутация: 674 ±
Замечаний: 0% ±

2010
Дубль темы
[admin]Переместила ответ из дубля[/admin]


ЯД-41001506838083

Сообщение отредактировал Pelena - Воскресенье, 16.06.2019, 21:33
 
Ответить
СообщениеДубль темы
[admin]Переместила ответ из дубля[/admin]

Автор - gling
Дата добавления - 16.06.2019 в 21:13
gling Дата: Воскресенье, 16.06.2019, 21:13 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2519
Репутация: 674 ±
Замечаний: 0% ±

2010
Здравствуйте. Посмотрите вариант, но не знаю то ли.[vba]
Код
Sub Скрыть()
Dim i As Long
Rows("98:134").EntireRow.Hidden = False
For i = 98 To 133
    If Cells(i, 6) = "Нет" Then: Rows(i - 1 & ":" & i + 4).EntireRow.Hidden = True
Next
End Sub
[/vba]
К сообщению приложен файл: 2175181.xlsm (75.8 Kb)


ЯД-41001506838083
 
Ответить
СообщениеЗдравствуйте. Посмотрите вариант, но не знаю то ли.[vba]
Код
Sub Скрыть()
Dim i As Long
Rows("98:134").EntireRow.Hidden = False
For i = 98 To 133
    If Cells(i, 6) = "Нет" Then: Rows(i - 1 & ":" & i + 4).EntireRow.Hidden = True
Next
End Sub
[/vba]

Автор - gling
Дата добавления - 16.06.2019 в 21:13
Pelena Дата: Воскресенье, 16.06.2019, 21:34 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 19163
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
A16Smersh, зачем дублируете темы? Это нарушение Правил форума


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеA16Smersh, зачем дублируете темы? Это нарушение Правил форума

Автор - Pelena
Дата добавления - 16.06.2019 в 21:34
_Igor_61 Дата: Понедельник, 17.06.2019, 04:49 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
В связи с необходимостью подготовки более 1000 однотипных документов...


Осмелюсь предположить, что "Нет" уже введены в нужные ячейки, и задача макроса - скрыть строки по этому условию, т.е. перебрать нужные листы и таблицы и где в заданных ячейках будет "Нет" - там скрыть строки. Поэтому навряд ли будет удобен запуск макроса по событию изменения листа, наверное его как-то нужно привязать к уже существующим макросам или к форме?
 
Ответить
Сообщение
В связи с необходимостью подготовки более 1000 однотипных документов...


Осмелюсь предположить, что "Нет" уже введены в нужные ячейки, и задача макроса - скрыть строки по этому условию, т.е. перебрать нужные листы и таблицы и где в заданных ячейках будет "Нет" - там скрыть строки. Поэтому навряд ли будет удобен запуск макроса по событию изменения листа, наверное его как-то нужно привязать к уже существующим макросам или к форме?

Автор - _Igor_61
Дата добавления - 17.06.2019 в 04:49
A16Smersh Дата: Понедельник, 17.06.2019, 15:06 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Pelena, извиняюсь, изначально не там тему создал, и забыл удалить впопыхах...
 
Ответить
СообщениеPelena, извиняюсь, изначально не там тему создал, и забыл удалить впопыхах...

Автор - A16Smersh
Дата добавления - 17.06.2019 в 15:06
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматическое скрытие строк (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!