我有我的自定義函數在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