我有我的自定义函数在Excel(VBA),但我试图做类似的细胞功能内的列表:VBA定制Excel函数与下拉列表
尝试在Excel中:
= CELL(资讯类型[然后在这里出现的下拉列表]
所以,我想:
= MyFunction的(my_variable [这里我的自定义下拉列表]
列表应该出现在Excel中,而不是在VBA窗口。
有谁知道如何做到这一点?
对不起,我不能发布图片。
我有我的自定义函数在Excel(VBA),但我试图做类似的细胞功能内的列表:VBA定制Excel函数与下拉列表
尝试在Excel中:
= CELL(资讯类型[然后在这里出现的下拉列表]
所以,我想:
= MyFunction的(my_variable [这里我的自定义下拉列表]
列表应该出现在Excel中,而不是在VBA窗口。
有谁知道如何做到这一点?
对不起,我不能发布图片。
这是可能的工作笨重的方法。我们的想法是使用Worksheet_Change
事件捕捉,你进入你的函数的不完整版本的实例在哪个阶段显示在单元格为您提供可能的方式来完成功能的开即时数据验证下拉列表。然后,再次使用Worksheet_Change
,检测完成的版本,转换为公式,并删除数据验证。
由于概念证明 - 我写了一个版本的sin
它允许用户选择“度”或“弧度”:
Function Sine(ParamArray args() As Variant) As Variant
On Error GoTo err_handler
If args(1) = "Degrees" Then
Sine = Sin(args(0) * Application.WorksheetFunction.Pi()/180)
Else
Sine = Sin(args(0))
End If
Exit Function
err_handler:
Sine = "=Sine(" & args(0) & ","
End Function
此,如果用户没有在抛出一个未捕获错误至少给一个角度。
然后,在Worksheet_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
并回车。您将看到以下内容(点击下拉箭头后):
然后,例如选择后“45度”,在A1中的公式变为
=sine(45, "Degrees")
并显示值(0.707107),和数据验证已被删除。
的想法,可能是更灵活的变化是由单元格中显示一个窗体,而不是依赖此数据验证破解。
它 - 是 - 太棒了! – dsegovia
[VBA函数参数列表选择](http://stackoverflow.com/questions/5340002/vba-function-argument-list-select) –
的可能的重复看看那里的链接;似乎有你在找什么。 –
它密切是什么,我正在寻找,但名单应在Excel中,而不是在VBA窗口。如果您有Excel,打开它,并键入“= CELL(”,然后你会看到该列表。我以前读该职位的时刻。 – dsegovia