我有一种从工作表上的表列执行不同结果的方法。
方法的结果将进入单元格中的数据验证列表框。我现在有两个需求,要求我通过将传递给方法的列数限制为1来“虚拟减轻”方法的使用。这部分我可以完成,我想要做的就是让它如果在Range中有多个列,那么它“呕吐”用户,说明非法函数调用来自“工作表”。“单元“并提醒IT支持人员解决问题。
获取工作表很棒,也很容易。更多的是获取对Calling Cell的引用,而没有明确强制IT支持将Cell作为值传递给方法。
有关如何提取呼叫单元的任何想法?
最终,这个方法将用于多个工作表,以执行相同的逻辑,并传递不同的范围。
到目前为止,这是我的实现,还没有使用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
此方法已在代码隐藏逻辑中使用。我将复制此逻辑并将其分为我正在处理的Excel工作簿的Application.Volatile
段。会有类似但不一样的。
这是当前的设计,不过是我用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