我有三个单元格范围(来自我的工作簿中的另一个工作表),它存储我想要显示在下拉列表(表单控件)列表中的值。我需要宏代码来重置单元格范围,或者需要命名范围来根据其他单元格值在下拉列表中定义选项。 。 到目前为止,我已经尝试了以下代码但没有成功:
Sub DropDown11_Change()
如果范围(“A1”)= 1那么
(来自sheet1 a1的输入范围:a50)ElseIf范围(“A1”)= 2然后
(来自sheet2 a1的输入范围:a50)ElseIf Range(“A1”)= 3然后
(来自sheet3 a1的输入范围:a50)结束如果
结束子
有什么建议吗?
由于
答案 0 :(得分: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
答案 1 :(得分: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