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