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... но и радости нет.

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

1 ответ1

1

Если вы хотите, чтобы ваш код выполнялся при выборе переключателя, вам нужно либо вызвать макрос с помощью переключателя, либо вам нужно, чтобы макрос был private 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

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