Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带下拉列表的VBA自定义Excel函数_Excel_Vba_List_Function - Fatal编程技术网

带下拉列表的VBA自定义Excel函数

带下拉列表的VBA自定义Excel函数,excel,vba,list,function,Excel,Vba,List,Function,我在Excel(VBA)中有我的自定义函数,但我正在尝试在CELL函数中执行类似列表的操作: 在Excel中试用: =单元格(信息类型[然后出现下拉列表] 所以,我想: =MyFunction(my_变量[和此处的自定义下拉列表] 该列表应显示在Excel中,而不是VBA窗口中 有人知道怎么做吗 很抱歉,我无法发布图片。这里有一个可能有效的笨拙方法。其思想是使用工作表\u Change事件捕获您输入函数的不完整版本的实例,在该阶段,单元格上会显示一个动态数据验证下拉列表,为您提供完成函数的可能方

我在Excel(VBA)中有我的自定义函数,但我正在尝试在CELL函数中执行类似列表的操作:

在Excel中试用:

=单元格(信息类型[然后出现下拉列表]

所以,我想:

=MyFunction(my_变量[和此处的自定义下拉列表]

该列表应显示在Excel中,而不是VBA窗口中

有人知道怎么做吗


很抱歉,我无法发布图片。

这里有一个可能有效的笨拙方法。其思想是使用
工作表\u Change
事件捕获您输入函数的不完整版本的实例,在该阶段,单元格上会显示一个动态数据验证下拉列表,为您提供完成函数的可能方法然后,再次使用
工作表\u Change
,检测完成的版本,将其转换为公式,并删除数据验证

作为概念证明——我编写了一个版本的
sin
,允许用户选择“度”或“弧度”:

如果用户至少没有给出一个角度,就会抛出一个未捕获的错误

然后,在
工作表\u Change
中,我使用了:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim choices As String, angle As String, tval As String

    On Error GoTo err_handler
    tval = Target.Value
    If tval Like "=Sine(*," Then
        angle = Mid(tval, 7)
        angle = Left(angle, Len(angle) - 1) 'get rid of comma
        choices = angle & " Degrees, " & angle & " Radians"
        Target.Validation.Add xlValidateList, Formula1:=choices
        Target.Select
    ElseIf tval Like "* Degrees" Then
        Target.Validation.Delete
        Target.Formula = "=Sine(" & Val(tval) & ", ""Degrees"")"
        Target.Offset(1).Select
    ElseIf tval Like "* Radians" Then
        Target.Validation.Delete
        Target.Formula = "=Sine(" & Val(tval) & ", ""Radians"")"
        Target.Offset(1).Select
    End If
err_handler:
End Sub
它的工作原理是这样的。在A1(比如)中键入
=Sine(45
)并单击enter。单击下拉箭头后,您将看到以下内容:

然后,在选择例如“45度”后,A1中的公式变为

=sine(45, "Degrees")
并显示值(0.707107),数据验证已被删除


另一种可能更灵活的方法是按单元格显示用户表单,而不是依赖此数据验证黑客。

可能的重复项查看此处的链接;似乎与您要查找的内容相同。它与我要查找的内容非常接近,但列表应在Excel中,而不是在VBA窗口中。如果您有Excel,请打开我的t和类型“=单元(”,然后你会看到列表。我刚才还在读那篇文章。看来不幸的是,没有,没有一种方法可以在Excel中作为自定义项进行下拉。但是,我只花了搜索其他答案所需的时间,所以我承认我对此一无所知。好吧,我会继续尝试。谢谢。=)
=sine(45, "Degrees")