Я пытаюсь сделать сравнение деталей для нескольких компаний (a, b, c, d), которое представлено в раскрывающемся списке в ячейках A1 и B1.  Я использую подпрограмму VBA (представлена ниже), чтобы скрыть строки, когда вся строка не имеет значений, но остается скрытой даже при наличии одного значения

Для этого примера 1 подпрограмма не должна скрывать строки, но она скрыла обе строки 2 и 3, но строка 4 не скрыта

    A           B
1   Company A   Company B
2   las vegas
3               boston
4   north       north

Как мне убедиться, что VBA не будет скрывать строки 2 и 3 в примере?

Я использовал следующий код:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range, c As Range

    Set r = range[a2:b3]
    Application.ScreenUpdating = False
    For Each c In r
        If Len(c.Value) > 0 Then
            c.EntireRow.Hidden = False
        Else
            c.EntireRow.Hidden = True
        End If
    Next c
    Application.ScreenUpdating = True
End Sub

VBA, который я использовал выше, полезен только для одного столбца значений, но не для нескольких столбцов для сравнения.

Как я могу сделать это?

1 ответ1

1

Я немного озадачен вашей проблемой.  Когда я пытаюсь запустить вашу подпрограмму, она сразу дросселирует строку Set r = , потому что Union() должно быть задано как минимум два аргумента.  Но когда я изменяю это на Set r = [a2:b3] , он запускается и скрывает строку 2, но оставляет строку 3 скрытой.

Это то, что я ожидал от рутины.

Он смотрит на каждую ячейку в диапазоне A2:B3 индивидуально и воздействует на нее.  Он проходит через диапазон сверху вниз, а затем слева направо в каждом ряду.  (По крайней мере, это поведение по умолчанию; возможно, его можно изменить.)  Так вот что происходит:

  1. Посмотрите на ячейку A2 .  Это имеет значение, поэтому мы не скрываем строку 2.
  2. Посмотрите на ячейку B2 .  У него нет значения, поэтому мы скрываем строку 2.
  3. Посмотрите на ячейку A3 .  У него нет значения, поэтому мы скрываем строку 3.
  4. Посмотрите на ячейку B3 .  Это имеет значение, поэтому мы не скрываем строку 3.

Итак, строка 2 оказывается скрытой, а строка 3 - скрытой.

Вы должны смотреть на диапазон, а не просто на группу ячеек, а на ряд строк (каждая из которых представляет собой группу ячеек).  Вам нужна другая переменная, которая будет принимать логические (True/False) значения.  Для каждой строки начните с установки переменной в True, что будет означать «да, насколько я знаю, в этой строке нет данных».  Затем для каждой ячейки в этой строке, если ячейка имеет значение, установите для переменной значение False, что означает «нет, эта строка не пуста».  И, после того как вы посмотрите на каждую ячейку в строке, установите для атрибута Hidden строки значение переменной.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .