我有一种方法可以从工作表上的表列执行不同的结果。
该方法的结果将进入单元格中的数据验证列表框。我现在有两个需求,需要我通过将传递给该方法的列数限制为一来“虚拟减轻”该方法的使用。这部分我可以完成,我想做的是拥有它,这样如果 Range 中有多个列,那么它会对用户“呕吐”,说明从“工作表”进行了非法函数调用。单元”并提醒 IT 支持人员解决问题。
获得工作表很棒而且很简单。它更多的是获得对调用单元的引用,而无需明确强制 IT 支持将单元作为值传递给方法。
关于如何提取呼叫单元的任何想法?
最终,此方法将在多个工作表中使用,以执行相同的逻辑,并将不同的范围传递给它。
于 2012 年 9 月 24 日上午 10:30 CST 编辑
到目前为止,这是我的实现,还没有使用该Application.Caller
方法。
Function UniqueValues(ws As Worksheet, col As String) As Variant
Dim rng As Range: Set rng = ws.Range(col)
Dim dict As New Scripting.Dictionary
If Not (rng Is Nothing) Then
Dim cell As Range, val As String
For Each cell In rng.Cells
val = CStr(cell.Value)
If Not dict.Exists(val) Then
dict.Add val, val
End If
Next cell
End If
'Return value
UniqueValues = dict.Items
End Function
此方法已在代码隐藏逻辑中使用。我将复制此逻辑并将其Application.Volatile
作为我正在处理的 Excel 工作簿的一部分。会相似但不一样。
这是当前的设计,不多,但我正在使用 atm。
Function DistinctValues(rng As Range)
Application.Volatile True
If rng.Columns.Count > 1 Then
Err.Raise -1542376, rng.Worksheet.name, "An invalid function call was made!"
End If
End Function