В связи с необходимостью подготовки более 1000 однотипных документов (тотально урезанная копия во вложении, исходник весит 25 мб), появилась необходимость создания базовой формы, на которую все данные подтягиваются с 2-х других листов (фотографии, данные и т.п.), с формой и данными проблем не возникло, но есть одна проблема, которую победить я не смог: необходимо автоматически скрывать строки по вычисляемому значению в ячейке (например если F129 = "нет", то скрыть строки 128-133).
Я облазил форумы, смотрел видео и пробовал предложенные примеры применить к своему варианту, но ничего у меня не вышло, в связи с тем, что я в макросах, модулях листа и прочего полный ноль.
Если Вам не сложно, опишите как это сделать, если будет понятен принцип это будет великолепно, так как подобную процедуру надо распространить на 45 значений.
Добрый день,
В связи с необходимостью подготовки более 1000 однотипных документов (тотально урезанная копия во вложении, исходник весит 25 мб), появилась необходимость создания базовой формы, на которую все данные подтягиваются с 2-х других листов (фотографии, данные и т.п.), с формой и данными проблем не возникло, но есть одна проблема, которую победить я не смог: необходимо автоматически скрывать строки по вычисляемому значению в ячейке (например если F129 = "нет", то скрыть строки 128-133).
Я облазил форумы, смотрел видео и пробовал предложенные примеры применить к своему варианту, но ничего у меня не вышло, в связи с тем, что я в макросах, модулях листа и прочего полный ноль.
Если Вам не сложно, опишите как это сделать, если будет понятен принцип это будет великолепно, так как подобную процедуру надо распространить на 45 значений.A16Smersh
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 значения "Нет". Если нужно чтобы макрос срабатывал при каком-то другом событии, нужно об этом сообщить, т.к. из стартового сообщения непонятно по какому событию должен запускаться макрос.
В модуль листа: [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
_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]
Или для каждой ячейки надо отдельно прописывать?
_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
Сообщение отредактировал A16Smersh - Воскресенье, 16.06.2019, 20:22
Здравствуйте. Посмотрите вариант, но не знаю то ли.[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]
Здравствуйте. Посмотрите вариант, но не знаю то ли.[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
так как подобную процедуру надо распространить на 45 значений.
.
Осмелюсь предположить, что "Нет" уже введены в нужные ячейки, и задача макроса - скрыть строки по этому условию, т.е. перебрать нужные листы и таблицы и где в заданных ячейках будет "Нет" - там скрыть строки. Поэтому навряд ли будет удобен запуск макроса по событию изменения листа, наверное его как-то нужно привязать к уже существующим макросам или к форме?
так как подобную процедуру надо распространить на 45 значений.
.
Осмелюсь предположить, что "Нет" уже введены в нужные ячейки, и задача макроса - скрыть строки по этому условию, т.е. перебрать нужные листы и таблицы и где в заданных ячейках будет "Нет" - там скрыть строки. Поэтому навряд ли будет удобен запуск макроса по событию изменения листа, наверное его как-то нужно привязать к уже существующим макросам или к форме?_Igor_61