Выпадающие списки с условными данными

У меня есть три диапазона ячеек (из другого листа в моей книге), в которых хранятся значения, которые я хочу отображать в раскрывающемся списке (Form Control). Мне нужен код макроса, чтобы сбросить диапазон ячеек, или именованный диапазон, чтобы определить параметры в раскрывающемся списке на основе другого значения ячейки. . Я пробовал следующий код безуспешно:

Sub DropDown11_Change ()

Если Range ("A1") = 1, то
(диапазон ввода от листа1 a1: a50)

ElseIf Range ("A1") = 2 Then
(диапазон ввода от листа2 a1: a50)

ElseIf Range ("A1") = 3 Then
(диапазон ввода от листа3 a1: a50)

Конец, если
Конец подписки

Какие-либо предложения?

Спасибо


person Dhimas AFanji    schedule 03.12.2014    source источник


Ответы (2)


Это должно вам помочь, поместите любой из них в стандартный модуль (например, Module1).

Sub DropDown1_Change()

    Dim ddFillRange As String

    If Sheet1.Range("A1") = 1 Then
        ddFillRange = "Sheet1!A1:A50"
    ElseIf Sheet1.Range("A1") = 2 Then
        ddFillRange = "Sheet2!A1:A50"
    ElseIf Sheet1.Range("A1") = 3 Then
        ddFillRange = "Sheet3!A1:A50"
    End If

    Sheet1.Shapes("Drop Down 1").ControlFormat.ListFillRange = ddFillRange

End Sub

Если вы хотите использовать именованные диапазоны, вы можете использовать:

Sub DropDown1_Change()

    Dim ddFillRange As String

    If Sheet1.Range("A1") = 1 Then
        ddFillRange = Range("NamedRange1").Name
    ElseIf Sheet1.Range("A1") = 2 Then
        ddFillRange = Range("NamedRange2").Name
    ElseIf Sheet1.Range("A1") = 3 Then
        ddFillRange = Range("NamedRange3").Name
    End If

    Sheet1.Shapes("Drop Down 1").ControlFormat.ListFillRange = ddFillRange

End Sub

Затем, чтобы они сработали при изменении ячейки A1, вам нужно будет поместить следующее в модуль Sheet1 (когда вы щелкните правой кнопкой мыши Sheet1 в окне редактора VBA, выберите код просмотра ... см. Рисунок ниже):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("A1")) Is Nothing Then DropDown1_Change
End Sub

Код Sheet1

person JasonAizkalns    schedule 03.12.2014
comment
как выбрать диапазон данных, который я хочу добавить в поле со списком с именованным диапазоном? - person Dhimas AFanji; 04.12.2014
comment
@DhimasAFanji Я обновил свой ответ, включив в него подход именованного диапазона. - person JasonAizkalns; 04.12.2014
comment
Это запускается, но когда ячейка A1 изменяется, список не изменяется, если мне не нужно сначала щелкнуть, - person Dhimas AFanji; 05.12.2014
comment
@DhimasAFanji Извините, я не понял, что это требование. Скоро обновлю свой ответ ... - person JasonAizkalns; 05.12.2014
comment
привет @ jaysunice3401, это сработало отлично, спасибо за помощь - person Dhimas AFanji; 05.12.2014
comment
@DhimasAFanji круто, рад, что помог, не стесняйтесь голосовать и выбирать ответ. - person JasonAizkalns; 05.12.2014

Я делал аналогичные вещи, используя именованные диапазоны. Вот пример, который тоже должен помочь.

Sub DropDown11_Change()

Dim dropdown As String

If Range("A1") = 1 Then
    '(input range from sheet1 a1:a50)
    dropdown = "=Sheet1!R1C1:R50C1"
ElseIf Range("A1") = 2 Then
    '(input range from sheet2 a1:a50)
    dropdown = "=Sheet2!R1C1:R50C1"
ElseIf Range("A1") = 3 Then
    '(input range from sheet3 a1:a50)
    dropdown = "=Sheet3!R1C1:R50C1"

End If

ActiveWorkbook.Names.Add Name:="DynamicList", RefersToR1C1:=dropdown

End Sub
person Geoff Hayward    schedule 03.12.2014
comment
Просто для пояснения, когда вы хотите, чтобы это изменение было инициировано? Когда изменяется раскрывающийся список или когда изменяется ячейка A1? - person Geoff Hayward; 04.12.2014
comment
спасибо @Geoff, я хочу, чтобы это изменение запускалось при изменении ячейки A1. - person Dhimas AFanji; 05.12.2014
comment
отлично, @ jaysunice4301 дает ответ ниже, как я бы ответил. - person Geoff Hayward; 05.12.2014