1

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

子 DropDown11_Change()

If Range("A1") = 1 Then
(输入范围来自 sheet1 a1:a50)

ElseIf Range("A1") = 2 Then
(输入范围来自 sheet2 a1:a50)

ElseIf Range("A1") = 3 Then
(输入范围来自 sheet3 a1:a50)

End If
End Sub

有什么建议么?

谢谢

4

2 回答 2

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 代码

于 2014-12-03T16:00:32.413 回答
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
于 2014-12-03T17:00:21.473 回答