Как запустить код VBA, когда все ячейки в столбце таблицы имеют определенное значение? - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь запустить код на своем листе, когда все ячейки в столбце отфильтрованной таблицы содержат определенное значение. Как мне сослаться на столбец таблицы вместо одной ячейки?

Я использую Worksheet_Change.

Код работает, когда я использую одно значение ячейки в моем диапазоне, но когда я использую ссылку на столбец в качестве моего диапазона, я получаю сообщение об ошибке «Run-time error '13': несоответствие типов».

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("n2").Value = "P" Then
'If Range("Table1[Verify]").Value = "P" Then

    ActiveSheet.Shapes("Oval 5").Visible = True

ElseIf Range("n2").Value <> "P" Then
'ElseIf Range("Table1[Verify]").Value <> "P" Then

    ActiveSheet.Shapes("Oval 5").Visible = False

End If

End Sub

Я ожидал, что это сработает, потому что я могу запустить код:

Range("Table1[Verify]").Value = "P"

и заполняет каждую ячейку в отфильтрованном столбце «Проверка» значением «Р». Есть идеи?

1 Ответ

0 голосов
/ 25 июня 2019
Range("Table1[Verify]").Value

возвращает двумерный массив значений (количество строк x количество столбцов), поэтому вы не можете сравнить это с "P".Только если есть одна видимая строка, это сработает (поскольку .Value в этом случае не является массивом)

Только для видимых ячеек вам понадобится что-то вроде:

Dim rng As Range
Set rng = Range("Table1[Verify]").SpecialCells(xlCellTypeVisible)

Тогдапереберите каждую ячейку в rng и проверьте, если "P"

Dim c As range
For Each c in rng.Cells
     'check the value
Next c

Вы не можете использовать application.countif(rng,"P"), если rng не является смежным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...