Excel 带有条件数据的下拉列表

Excel 带有条件数据的下拉列表,excel,input,form-control,vba,Excel,Input,Form Control,Vba,我有三个单元格区域(来自工作簿中的另一个工作表),用于存储我希望显示在下拉列表(表单控件)中的值。我需要宏代码来重置单元格区域,或者需要命名区域来定义基于其他单元格值的下拉列表中的选项。 . 到目前为止,我尝试了以下代码,但没有成功: 子下拉列表11_Change() 如果范围(“A1”)=1,则 (输入范围从表1 a1:a50) ElseIf范围(“A1”)=2,则 (输入范围从表2 a1:a50开始) ElseIf范围(“A1”)=3,则 (输入范围从第3页a1:a50) 如果 端接头 有

我有三个单元格区域(来自工作簿中的另一个工作表),用于存储我希望显示在下拉列表(表单控件)中的值。我需要宏代码来重置单元格区域,或者需要命名区域来定义基于其他单元格值的下拉列表中的选项。 . 到目前为止,我尝试了以下代码,但没有成功:

子下拉列表11_Change()

如果范围(“A1”)=1,则
(输入范围从表1 a1:a50)

ElseIf范围(“A1”)=2,则
(输入范围从表2 a1:a50开始)

ElseIf范围(“A1”)=3,则
(输入范围从第3页a1:a50)

如果
端接头

有什么建议吗


谢谢

这应该可以帮助您解决问题,将其中任何一个放在标准模块中(例如模块1)

如果要使用命名范围,可以使用:

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的模块中放置以下内容(当您在VBA编辑器窗口中右键单击Sheet1时,选择查看代码…请参见下图):


我使用命名范围做过类似的事情。这里有一个例子也应该有所帮助

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

如何选择要添加到具有命名范围的组合框中的数据范围?@DhimasAFanji更新了我的答案,以包含命名范围方法。此运行,但当单元格A1更改时,列表不会更改,除非我必须先单击,@DhimasAFanji抱歉,没有意识到这是一个要求。很快更新我的答案…嘿@jaysunice3401,这非常有效,感谢您的帮助只是为了澄清,您希望何时触发此更改?当下拉列表更改或单元格A1更改时?谢谢@Geoff,我希望在单元格A1更改时触发此更改。太好了,@jaysunice4301正在提供下面的答案,我会回答。
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("A1")) Is Nothing Then DropDown1_Change
End Sub
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