Показать или скрыть строки в листе Excel в зависимости от значения определенной ячейки (Excel 2007 и Windows 7)

1

Я сделал электронную таблицу, чтобы указать выбор украшений из ряда стандартных вариантов.

Есть пять отдельных диапазонов, так что это первый выбор, затем в каждом диапазоне есть дополнительные выборы.

Поэтому в начале моего листа я использовал «рамку» и пять «радиокнопок», и я связал этот выбор с ячейкой P1,

Поэтому, как только этот выбор сделан, я хочу скрыть различные строки и показывать только выборки, относящиеся к первому выбору (строки 10-19, относящиеся к диапазону 1, строки 20-29, относящиеся к диапазону 2 и т. Д.).

Ниже мой «код», но он ничего не делает, когда я меняю выбор радиокнопок (я вижу значение в ячейке P1 меняется как положено).

Sub HideShow()
'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection


If Range("P1").Value = 1 Then  ‘Decoration Range A
        Rows("10:19").Select
        Selection.EntireRow.Hidden = False
        Rows("20:59").Select
        Selection.EntireRow.Hidden = True

ElseIf Range("P1").Value = 2 Then  'Decoration Range B
        Rows("10:19").Select
        Selection.EntireRow.Hidden = True
        Rows("20:29").Select
        Selection.EntireRow.Hidden = False
        Rows("30:59").Select
        Selection.EntireRow.Hidden = False

ElseIf Range("P1").Value = 3 Then  'Decoration Range C
        Rows("10:29").Select
        Selection.EntireRow.Hidden = True
        Rows("30:39").Select
        Selection.EntireRow.Hidden = False
        Rows("40:59").Select
        Selection.EntireRow.Hidden = False

ElseIf Range("P1").Value = 4 Then  'Decoration Range D
        Rows("10:39").Select
        Selection.EntireRow.Hidden = True
        Rows("40:49").Select
        Selection.EntireRow.Hidden = False
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False

ElseIf Range("P1").Value = 5 Then  'Decoration Range E
        Rows("10:49").Select
        Selection.EntireRow.Hidden = True
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False
End If


End Sub

Я знаю, что мне, вероятно, не нужен окончательный выбор (если это не A, B, C или D, тогда это может быть только E), но я просто вставил его для аккуратности.

Я также попытался со значением ячейки в виде текста, т.е. ElseIf Range("P1").Value = "5" Then... но и радости нет.

Любое руководство приветствуется.

Mike H
источник
Если вы не уверены в том, что код подвергается удару, вставьте MsgBox перед «Если». Что-то вроде: MsgBox "P1 =" & amp; Диапазон ( «Р1»). Значение
mcalex

Ответы:

1

Если вы хотите, чтобы ваш код запускался при выборе переключателя, вам нужно либо вызвать макрос с помощью переключателя, либо вам нужно, чтобы макрос был приватный sub worksheet_change () работать на изменениях листа.

Сам код работает нормально. Есть лучшие способы сделать это, но в вашем коде нет ничего плохого.

Поместите это в VBA для листа, с которым вы работаете:

Private Sub worksheet_change(ByVal Target As Range)

'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection

If Not Intersect(Target, Cells(1, 16)) Is Nothing Then

    If Range("P1").Value = 1 Then
        'Decoration Range A
        Rows("10:19").Select
        Selection.EntireRow.Hidden = False
        Rows("20:59").Select
        Selection.EntireRow.Hidden = True

    ElseIf Range("P1").Value = 2 Then  'Decoration Range B
        Rows("10:19").Select
        Selection.EntireRow.Hidden = True
        Rows("20:29").Select
        Selection.EntireRow.Hidden = False
        Rows("30:59").Select
        Selection.EntireRow.Hidden = False

    ElseIf Range("P1").Value = 3 Then  'Decoration Range C
        Rows("10:29").Select
        Selection.EntireRow.Hidden = True
        Rows("30:39").Select
        Selection.EntireRow.Hidden = False
        Rows("40:59").Select
        Selection.EntireRow.Hidden = False

    ElseIf Range("P1").Value = 4 Then  'Decoration Range D
        Rows("10:39").Select
        Selection.EntireRow.Hidden = True
        Rows("40:49").Select
        Selection.EntireRow.Hidden = False
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False

    ElseIf Range("P1").Value = 5 Then  'Decoration Range E
        Rows("10:49").Select
        Selection.EntireRow.Hidden = True
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False
    End If

End If

End Sub

Но я бы сделал это так:

Private Sub worksheet_change(ByVal Target As Range)

'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection

If Not Intersect(Target, Range("p1")) Is Nothing Then
    On Error Resume Next
    ActiveSheet.Cells.EntireRow.Hidden = False

    If Range("P1") = 1 Then 'Decoration Range A
        Rows("20:59").Hidden = True

    ElseIf Range("P1") = 2 Then  'Decoration Range B
        Rows("10:19").Hidden = True

    ElseIf Range("P1") = 3 Then  'Decoration Range C
        Rows("10:29").Hidden = True

    ElseIf Range("P1") = 4 Then  'Decoration Range D
        Rows("10:39").Hidden = True

    ElseIf Range("P1") = 5 Then  'Decoration Range E
        Rows("10:49").Hidden = True

    End If

End If

End Sub
Raystafarian
источник