В вашем коде отсутствует та часть, где строки возвращены к видимой, а где скрыты ранее.Так, например, если вы введете 1, строки 5 ... 1000 будут скрыты.Теперь, если вы измените значение на 2, вы прячете строки 36 ... 1000 (но они уже скрыты), но строки 5.35 не отображаются.
Следующий код вычисляетпервый ряд будет скрыт.Все строки выше, которые отображаются, все строки, начиная с этой строки до строки 1000, скрыты.Если математика не соответствует вашим потребностям, ее легко изменить, чтобы адаптировать ее.
Обратите внимание, что я использовал функцию Val
для предотвращения ошибок во время выполнения, если пользователь вводит что-то, что не являетсячисловой
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$E$3" Then Exit Sub
Dim startrow As Long
If Val(Target.Value) <= 0 Then
startrow = 5
Else
startrow = Val(Target.Value) * 32
End If
With Sheets("Abutments")
If startrow > 5 Then
.Rows("5:" & startrow - 1).Hidden = False
End If
If startrow <= 1000 Then
.Rows(startrow & ":1000").Hidden = True
End If
End With
End Sub
Обновление Не знаю, правильно ли я понимаю ваш бонусный вопрос.Если ячейка E3
содержит формулу, событие Change
не будет вызываться при изменении значения.Вы должны реализовать логику, используя событие Worksheet_Calculate
, как описано в https://stackoverflow.com/a/11409569/7599798