Изменение листа: несколько целевых значений не работают - PullRequest
0 голосов
/ 14 февраля 2019

Необходимо скрыть / показать строки в нескольких листах Excel на основе значений раскрывающихся ячеек в ячейке другого листа.У меня есть 3 листа: Dashbaord, Data Inputs, Metrics table. Я поместил следующий код в лист Dashboard.3 ячейки, указанные ниже, являются раскрывающимися и содержат различный набор значений.

Когда пользователь выбирает одно значение, скажем, в раскрывающемся списке C4, я скрываю / скрываю определенные строки на всех 3 листах, упомянутых выше.Но работает только выбранный случай ячейки C4.Как вы можете видеть, у меня есть формулы для C23 и C32, но они, похоже, не работают, не уверен, что это происходит из-за операций на тех же листах

Другой пример, когда, скажем, я выбираю раскрывающееся значение дляЯчейка С23.Операции, перечисленные в разделе C23 ниже, работают нормально (вызывается соответствующий макрос, а строки скрыты / не видны).Но когда я проверяю предыдущий выбор на ячейке, значение C4 исчезает.

Пожалуйста, помогите

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Not Intersect(Target, Range("C4,C23,C32")) Is Nothing Then  

For Each c In Intersect(Target, Range("C4,C23,C32"))
    Select Case c.Address(0, 0)

        Case "C4"
            If Target.Value = "Ecommerce" Then Call Ecommerce
            If Target.Value = "Non-Commerce" Then Call NonCommerce
            If Target.Value = "Ecommerce & Non-Commerce" Then Call Both
            If Target.Value = "Select Ecommerce/Non-Commerce" Then Call Both

        Case "C23"
            If Target.Value = "Select Year" Then Call SelectYear
            If Target.Value = "2020" Then Call Twentytwenty
            If Target.Value = "2021" Then Call TwentyOne
            If Target.Value = "2022" Then Call TwentyTwo
            If Target.Value = "2023" Then Call TwentyThree
            If Target.Value = "2024" Then Call TwentyFour
            If Target.Value = "2025" Then Call TwentyFive

        Case "C32"
            If Target.Value = "Select PPC" Then Call SelectPPC
            If Target.Value = "PPC 2" Then Call PPCTwo
            If Target.Value = "PPC 3" Then Call PPCThree
            If Target.Value = "PPC 4" Then Call PPCFour
            If Target.Value = "PPC 5" Then Call PPCFive
            If Target.Value = "PPC 6" Then Call PPCSix
            If Target.Value = "PPC 7" Then Call PPCSeven

        End Select
Next c
End If
End Sub

Я хочу, чтобы лист работал на все 3 ячейки вместе, сейчас он сломан и работает только одна.Ценю вашу помощь.

1 Ответ

0 голосов
/ 15 февраля 2019

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

Все, что вам нужно сделать, - это определить, что одна из трех ячеек была изменена, и затем на основе трех конкретных ячеек запустить соответствующие макросы.

Private Sub Worksheet_Change(ByVal Target As Range)
    ' This is all that you have to check, before deciding to run the macros
    If Intersect(Target, Range("C4,C23,C32")) Is Nothing Then Exit Sub

    Select Case Range("C4").Value
    Case "Ecommerce"
        Call Ecommerce
    Case "Non-Commerce"
        Call NonCommerce
    Case "Ecommerce & Non-Commerce", "Select Ecommerce/Non-Commerce"
        Both
    End Select

    Select Case Range("C23").Value
    Case "Select Year"
        Call SelectYear
    Case "2020"
        Call Twentytwenty
    Case "2021"
        Call TwentyOne
    Case "2022"
        Call TwentyTwo
    Case "2023"
        Call TwentyThree
    Case "2024"
        Call TwentyFour
    Case "2025"
        Call TwentyFive
    End Select

    Select Case Range("C32").Value
    Case "Select PPC"
        Call SelectPPC
    Case "PPC 2"
        Call PPCTwo
    Case "PPC 3"
        Call PPCThree
    Case "PPC 4"
        Call PPCFour
    Case "PPC 5"
        Call PPCFive
    Case "PPC 6"
        Call PPCSix
    Case "PPC 7"
        Call PPCSeven
    End Select
End Sub

Или еще лучше, послушатьBruceWayne, и вы получите что-то вроде этого:

Private Sub Worksheet_Change(ByVal Target As Range)
    ' This is all that you have to check, before deciding to run the macros
    If Intersect(Target, Range("C4,C23,C32")) Is Nothing Then Exit Sub

    Select Case Range("C4").Value
    Case "Ecommerce"
        Ecommerce
    Case "Non-Commerce"
        NonCommerce
    Case "Ecommerce & Non-Commerce", "Select Ecommerce/Non-Commerce"
        Both
    End Select

    If IsNumeric(Range("C23").Value) Then SelectYear CInt(Range("C23").Value)

    If IsNumeric(Mid(Range("C32").Value, 5)) Then SelectPPC CInt(Mid(Range("C32").Value, 5))
End Sub

Sub SelectYear(Year As Integer)
    ' Do stuff
End Sub

Sub SelectPPC(Value As Integer)
    ' Do stuff
End Sub

К вашему сведению, вам не нужно использовать Call.Единственная реальная разница, которую он имеет, заключается в том, требуются ли скобки или нет, когда Sub -программа имеет параметры.

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