首页 文章

带有条件数据的下拉列表

提问于
浏览
1

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

Sub DropDown11_Change()如果Range(“A1”)= 1则(来自sheet1 a1的输入范围:a50)ElseIf范围(“A1”)= 2然后(来自sheet2的输入范围a1:a50)ElseIf范围(“A1”) = 3然后(来自sheet3 a1的输入范围:a50)End If End Sub

有什么建议?

谢谢

2 回答

  • 0

    我使用命名范围做了类似的事情 . 这是一个应该有用的例子 .

    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
    
  • 0

    这应该可以帮助您,将其中任何一个放在标准模块中(例如,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的模块中放置以下内容(当您在VBA编辑器窗口中右键单击Sheet1时,选择视图代码...请参见下图):

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

    Sheet1 Code

相关问题