繁体   English   中英

Excel函数宏:创建一个下拉列表

[英]Excel Function Macro: Creating a drop down list

我想创建一个函数,将单元格变成一个包含值的下拉列表。

到目前为止,与我在网上阅读的内容相距甚远,它仅显示了如何以sub形式进行操作,但我想尝试在单元格中使用它,以便它自动填充。 到目前为止,我明白了。

function test(val as Range)
    if val = 1 then
        set test = Range(name_of_defined_list)
    elseif val = 2 then
        test = "no list"
    end if
end function

然后在单元格中将其写入并拖动到下面的单元格中

=test(C2)

回答您的第一行问题:我想创建一个函数,该函数将单元格变成一个包含值的下拉列表。

如果您想要这个,可以尝试以下代码:

Sub test()
'drop down list
Dim MyList(5) As String ' create array with definite size and value
MyList(0) = 1 ' assign value
MyList(1) = 2
MyList(2) = 3
MyList(3) = 4
MyList(4) = 5
MyList(5) = 6

'put in C2 array MyList
    With Range("C2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
             Operator:=xlBetween, Formula1:=Join(MyList, ",")
    End With
    End Sub

或者您可以使用大小为un的un array并从单元格中获取项目

Sub test()
'drop down list example with 5 items into list
Dim MyList() As String
Dim i, myDim As Integer

myDim = 5 ' number of items that you can get from a cell
ReDim MyList(myDim)

'get items from cells. example A1-B1-C1-D1-E1
For i = 0 To myDim
    MyList(i) = Cells(1, i + 1) ' assign value into MyList
Next i

'cell A10 is mi drop down list
With Range("A10").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
         Operator:=xlBetween, Formula1:=Join(MyList, ",")
End With
End Sub

希望这对您有帮助

有一种方法可以解决此类需求,但它可能无法满足您的需求...

步骤1 创建一个函数,当用户单击单元格内验证列表下拉菜单时调用该函数。 本示例检查单元格左侧的值,并且只有在其值为“是”时,它才会返回要用于列表的范围。

Function Lister()
    Dim rv As Range
    If TypeName(Application.Caller) = "Range" Then
        If Application.Caller.Offset(0, -1).Value = "Yes" Then
            Set rv = Sheet1.Range("A1:A5")
        End If
    End If
    Set Lister = rv
End Function

第二步 您不能直接从验证列表设置中引用此函数,因此需要使用工作簿名称将验证调用“路由”到该函数:

在此处输入图片说明

第三步 创建您的单元内下拉列表,引用您刚创建的名称(依次链接到VBA功能)。 现在,当左侧的单元格为“是”时,您将获得一个列表,否则没有列表。 或者,您可以改用相同的方法来返回两个不同的列表,具体取决于其他单元格中的内容。

在此处输入图片说明

好的,因此,在研究了提供给我的所有答案之后,我找到了此链接, https://www.excel-easy.com/vba/events.html

我能够编写一个Change事件Sub,以便当用户向单元格中添加一个值并切换出该单元格时,该子程序将运行并创建下拉列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM