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

Пожалуйста, потерпите меня, потому что я самоучка и очень новичок в кодировании VBA.

Мне нужна помощь с кодом для рабочего проекта, чтобы автоматически / динамически скрывать столбец на основе значения строки в этом столбце.В моем примере, основываясь на списке проверки данных Да / Нет на альтернативном листе, текущий лист обновится и вернет то же значение «Да» или «Нет».Если ответ «Нет», мне нужно, чтобы этот столбец автоматически исчезал, как только пользователь выбрал эту опцию из списка проверки данных.

Набор данных выглядит следующим образом: Результат Да / Нет находится в строке 3, в диапазоне столбцов B:AR.Результаты строки 3 являются результатом формулы перекодирования из другого листа.

Бонусные баллы, если кодирование действительно динамическое, то есть, если я добавлю строки выше 3-й строки, код автоматически переместится в 4-ю строку.

Я просмотрел области Google и большую часть кодалибо не обновляется, либо сильно тормозит.Ниже приведен пример нескольких кодов, которые я пробовал:

Sub Hide_Columns_Containing_Value()

    Dim c As Range
    For Each c In Range("B3:AR3").Cells
        If c.Value = "No" Then
            c.EntireColumn.Hidden = True
        End If
    Next c

End Sub

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

Надеюсь, немного быстрее

Sub Hide_Columns_Containing_Value( _
        ByVal msg As String, _
        ByVal r As Range)

    Dim c As Range

    Set c = r.Find(msg)

    If Not c Is Nothing Then

        c.EntireColumn.Hidden = True

    End If
End Sub
0 голосов
/ 05 июля 2019

Вот что вам нужно сделать:

Сначала определите Named Range в листе для строк, которые вы хотите отметить No в. Преимущество Named Range в том, что это Dynamic, поэтому, если вы добавите еще одну строку до 3-й строки, она будет динамически перемещаться Именованный диапазон до 4-го ряда.

Как это:

Named Range

После создания именованного диапазона добавьте этот код в рабочую таблицу:

Private Sub Worksheet_Change(ByVal Target As Range)


If Not Intersect(Target, Range("roww")) Is Nothing Then

    For Each cel In Range("roww")
            If cel.Value = "No" Then Columns(cel.Column).EntireColumn.Hidden = True
    Next

End If


End Sub

-Второй код, добавляемый ниже первого.

Sub hdd()    

For Each cel In Range("roww")
            If cel.Value = "No" Then Columns(cel.Column).EntireColumn.Hidden = True
Next

End Sub 

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

Sheet

Это будет полный динамический код.

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