Есть тема на форуме старая https://www.planetaexcel.ru/techniques/9/121/ и вроде много написано комментарий, но не нашел то, что мне нужно. Не могу сделать так, чтоб макрос автоматический показывал строки после заполнения ячейки, скрывать он скрывает, а показывать не хочет. Мне нужно, чтоб если в ячейках в промежутке от D12 до D34 появляется 0, строка на которой 0 - скрылась и если там не 0, строка показывалась автоматический. Как мне дописать макрос, чтоб он это делал автоматический?
Код
Private Sub Worksheet_Calculate()
Dim cell As Range
Application.ScreenUpdating = False
For Each cell In ActiveSheet.Range("D12:D34").Cells
If cell.Value = "0" Then cell.EntireRow.Hidden = True
Next
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
lrSh = Sheets(ActiveSheet.Name).Columns(11).Find("*", SearchDirection:=xlPrevious, LookIn:=xlValues).Row '
Set KeyCells = Range("k1:k" & lrSh)
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
For i = 12 To 34
If Cells(i, 4) = 0 And Len(Cells(i, 4) = 0) > 0 Then
Rows(i).EntireRow.Hidden = True
Else: Rows(i).EntireRow.Hidden = False
End If
Next i
End If
End Sub
Borrusale, Все, сделал, чтоб пустые не скрывал. Спасибо большое! Вопрос: мне не совсем понятно почему он смотрит диапазон k? если я начну это макрос вставлять в другие калькуляции получается он встанет? Можно ли сделать, чтоб он смотрел только диапазон где меняются значения не используя диапазон, где вводятся значения?
Что нужно дописать, чтоб макрос не пересчитывал на других открытых книгах? При внесений изменений он долго все пересчитывает, мало того замечал в открытой другой книге на втором мониторе вижу как по строкам сверху вниз пробегает то ли пересчет то ли проверка.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
lrSh = Sheets(ActiveSheet.Name).Columns(11).Find("*", SearchDirection:=xlPrevious, LookIn:=xlValues).Row '
Set KeyCells = Range("i1:x15" & lrSh)
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
For i = 19 To 66
If Cells(i, 4) = "0" And Len(Cells(i, 4) = "0") > "0" Then
Rows(i).EntireRow.Hidden = True
Else: Rows(i).EntireRow.Hidden = False
End If
Next i
End If
End Sub