從工作表中調用的函數(即,= UYGULAMAADI(A1)時,把這個小區中的呼叫的功能)不能像這樣工作表對象進行操作。也就是說,你想要的 - 幾乎所有的範圍和工作方法被稱爲這種方式,以防止循環引用錯誤,依賴錯誤,無限循環UDF等
您正在使用Target
作爲輸入內禁止向目標單元添加驗證。你可以做同樣的Selection
,在子程序
Sub UYGULAMAADI()
'Applies this macro to the range currently SELECTED by the user
With Selection.Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
Formula1:="=IF(OFFSET(" & Selection.Value & ";0;1;1;1)='stackoverflow';INDIRECT('x1');INDIRECT('x2'))"
.IgnoreBlank = True
.InCellDropdown = True
End With
End Sub
或者提示用戶進行輸入:
Sub UYGULAMAADI()
'Prompts the user for an input/range
Dim rng as Range
Set rng = Application.InputBox("Select a cell", Type:=8)
If rng Is Nothing Then Exit Sub
With rng.Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
Formula1:="=IF(OFFSET(" & Selection.Value & ";0;1;1;1)='stackoverflow';INDIRECT('x1');INDIRECT('x2'))"
.IgnoreBlank = True
.InCellDropdown = True
End With
End Sub
從工作表中調用(即'= UYGULAMAADI(A1)'當你的函數把它放在一個單元格中調用函數)不能在這樣的工作表對象上操作。具體來說,'.Select'方法可能是導致函數提前中止的原因。我期望'.Validation'方法也會出錯。 – 2015-03-30 19:42:03
謝謝@David。你對解決方案有什麼建議? – 2015-03-30 19:48:07
這取決於問題。你想做什麼?我解釋了爲什麼這不起作用。只要你提供一種方法來傳遞一個範圍參數(inputbox,或者使用'Selection'作爲輸入等等),它應該很可能作爲一個sub來使用。 – 2015-03-30 20:01:57