下拉与条件数据列表(Drop-down Lists with Conditional Data)

2019-10-21 08:46发布

我有一个存储我希望出现在下拉(表单控件)列表中的值的单元格(从另一片在我的工作簿)的三个范围。 我需要的宏代码重置单元格区域或命名范围在下拉列表基于其他单元格的值定义的选项。 。 我试过没有成功下面的代码至今:

子DropDown11_Change()

如果范围( “A1”)= 1,则
(从工作表Sheet A1输入范围:A50)

elseif的范围( “A1”)= 2然后
(从Sheet2的A1输入范围:A50)

elseif的范围( “A1”)= 3然后
(从表Sheet 3 A1输入范围:A50)

万一
结束小组

有什么建议么?

谢谢

Answer 1:

这应该可以帮助你,无论是放置这些在标准模块(例如,模块1)。

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



Answer 2:

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

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


文章来源: Drop-down Lists with Conditional Data