Здравствуйте! Есть таблица исходных данных (см. вложение), в которой в зависимости от значения Схемы котельной (строка 8) необходимо скрыть строки с данными, которые не будут использоваться при дальнейших расчетах. В VBA только начинаю разбираться и познаний хватило только на то, что есть во вложении. Такой вариант в принципе работает, но есть проблема: при вставке новой строки (таблица периодически редактируется) в коде приходится изменять все номера скрываемых строк... Можно как-то еще скрывать строки, чтобы не менять код при добавлении строк в таблицу?
Здравствуйте! Есть таблица исходных данных (см. вложение), в которой в зависимости от значения Схемы котельной (строка 8) необходимо скрыть строки с данными, которые не будут использоваться при дальнейших расчетах. В VBA только начинаю разбираться и познаний хватило только на то, что есть во вложении. Такой вариант в принципе работает, но есть проблема: при вставке новой строки (таблица периодически редактируется) в коде приходится изменять все номера скрываемых строк... Можно как-то еще скрывать строки, чтобы не менять код при добавлении строк в таблицу?PurpleMan
Pelena, просмотрел после Вашего сообщения темы из поиска, но, к сожалению, ничего что я смог бы переделать под себя я не нашел (практически ничего не понимаю)... Но справиться с задачей все же получилось С помощью формул промаркировал строки (те которые надо скрыть - 1, которые не надо - 0), и потом скрыл строки с помощью не хитрого макроса [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim a As Integer For a = 1 To 50 If Cells(a, 1).Value = 1 Then Rows(a).Hidden = True Else Rows(a).Hidden = False End If Next a End Sub
[/vba]
Спасибо!
Pelena, просмотрел после Вашего сообщения темы из поиска, но, к сожалению, ничего что я смог бы переделать под себя я не нашел (практически ничего не понимаю)... Но справиться с задачей все же получилось С помощью формул промаркировал строки (те которые надо скрыть - 1, которые не надо - 0), и потом скрыл строки с помощью не хитрого макроса [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim a As Integer For a = 1 To 50 If Cells(a, 1).Value = 1 Then Rows(a).Hidden = True Else Rows(a).Hidden = False End If Next a End Sub
Мажет кому пригодится... При увеличении диапазона цикла For с 50 до 300 обнаружилось значительное замедление работы макроса. Поискав другие решения, нашел следующее: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng, out, out1, i, one, zero Dim Col Set rng = Range(Cells(1, 1), Cells(300, 1)) Col = rng one = True zero = True
With rng.Cells(1, 1) For Each v In Col i = i + 1 If v = 1 Then If one Then Set out = .Offset(i - 1) one = False Else Set out = Union(out, .Offset(i - 1)) End If End If If v = 0 Then If zero Then Set out1 = .Offset(i - 1) zero = False Else Set out1 = Union(out1, .Offset(i - 1)) End If End If Next End With
End Sub
[/vba]
Макрос отрабатывает практически мгновенно.
Мажет кому пригодится... При увеличении диапазона цикла For с 50 до 300 обнаружилось значительное замедление работы макроса. Поискав другие решения, нашел следующее: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng, out, out1, i, one, zero Dim Col Set rng = Range(Cells(1, 1), Cells(300, 1)) Col = rng one = True zero = True
With rng.Cells(1, 1) For Each v In Col i = i + 1 If v = 1 Then If one Then Set out = .Offset(i - 1) one = False Else Set out = Union(out, .Offset(i - 1)) End If End If If v = 0 Then If zero Then Set out1 = .Offset(i - 1) zero = False Else Set out1 = Union(out1, .Offset(i - 1)) End If End If Next End With
End Sub
[/vba]
Макрос отрабатывает практически мгновенно.PurpleMan