#vba #hide
Вопрос:
Я ищу код, чтобы скрыть пустые строки для определенного диапазона столбцов с помощью кнопки переключения. У меня есть таблица, начинающаяся с P9 по U71, и я хотел бы, чтобы код скрывал любую строку, которая не содержит никаких данных в этой конкретной таблице. Я попробовал несколько кодов с последней публикацией ниже, но этот код скрывается на основе значений в столбце U и даже если в той же строке были данные, но в другом столбце. Я должен отметить, что у меня нет никакого опыта в кодировании, и поэтому я благодарю вас за любую помощь в этом вопросе.
Sub Worksheet_Activate()
Dim r As Range, c As Range
Set r = Range("q9:u71")
Application.ScreenUpdating = False
For Each c In r
If Len(c.Text) = 0 Then
c.EntireRow.Hidden = True
Else
c.EntireRow.Hidden = False
End If
Next c
Application.ScreenUpdating = True
End Sub
Комментарии:
1. Итак, вы хотели бы скрыть все строки в указанном диапазоне, если они полностью пусты . Правильно ли это понимание?
2. Это правильно
3. Используйте
WorksheetFunction.CountA
в каждой строке. Если результат равен 0, скройте строку.4. Затем проверьте адаптированный код, который я опубликовал. Но если ячейки в обработанном диапазоне изменяются кодом и некоторые (уже) скрытые ячейки получают значение, разве вам не нужно, чтобы эти строки были видны?
Ответ №1:
Попробуйте следующий код, пожалуйста:
Sub Worksheet_Activate()
Dim i As Long, rngH As Range
For i = 9 To 71
If WorksheetFunction.CountA(Range("P" amp; i amp; ":U" amp; i)) = 0 Then
If rngH Is Nothing Then
Set rngH = Range("P" amp; i)
Else
Set rngH = Union(rngH, Range("P" amp; i))
End If
End If
Next i
If Not rngH Is Nothing Then rngH.EntireRow.Select '.Hidden = True
End Sub
Он выбирает только строки, которые должны быть скрыты. Если это работает так, как вам нужно, поставьте .Hidden = True
вместо Select
.
Это должно быть очень быстро, помещая пустые ячейки в диапазон и скрывая EntireRow
их сразу, в конце.
Теперь, если ячейки в обработанном диапазоне изменены кодом и некоторые (уже) скрытые ячейки получают значение, не нужно ли сделать их видимыми?
Я закрою свой ноутбук. Если ответ на мой вышеприведенный вопрос «да», пожалуйста, используйте следующий код. Если нет, не используйте его…
Sub Worksheet_Activate()
Dim r As Range, i As Long, rngH As Range, rngV As Range
For i = 9 To 71
If WorksheetFunction.CountA(Range("P" amp; i amp; ":U" amp; i)) = 0 Then
If rngH Is Nothing Then
Set rngH = Range("P" amp; i)
Else
Set rngH = Union(rngH, Range("P" amp; i))
End If
Else
If rngV Is Nothing Then
Set rngV = Range("P" amp; i)
Else
Set rngV = Union(rngV, Range("P" amp; i))
End If
End If
Next i
If Not rngH Is Nothing Then rngH.EntireRow.Hidden = True
If Not rngV Is Nothing Then rngV.EntireRow.Hidden = False
End Sub
Комментарии:
1. Я попробовал оба кода, но ни один не сработал. Когда я нажал «Запустить форму Суб/пользователя», ничего не произошло.
2. Что нужно проверить? Вы должны скопировать код (только один) в модуль листа, и он автоматически запустится при активации листа. Это событие для листа!
3. А, понятно. На самом деле я использую кнопку переключения… как я уже упоминал, у меня нулевые знания в VBA, поэтому я приношу извинения, когда спотыкаюсь.
4. @Karla: Теперь, когда у вас есть некоторые знания, не могли бы вы отправить отзыв о своих тестах? Если у вас возникла проблема, пожалуйста, объясните ее. Если нет, то, по крайней мере, вежливо отправить несколько отзывов…
5. @Karla: Я использовал ваш пример кода, как это было. Я могу просто адаптировать его для работы как субмарину, когда вам нужно запустить его… Но вы должны сказать, что вам нужно, и отправить некоторые отзывы.