方法返回参考调用工作表/单元格

时间:2012-09-24 14:27:15

标签: vba excel-vba excel-2010 excel

我有一种从工作表上的表列执行不同结果的方法。

方法的结果将进入单元格中的数据验证列表框。我现在有两个需求,要求我通过将传递给方法的列数限制为1来“虚拟减轻”方法的使用。这部分我可以完成,我想要做的就是让它如果在Range中有多个列,那么它“呕吐”用户,说明非法函数调用来自“工作表”。“单元“并提醒IT支持人员解决问题。

获取工作表很棒,也很容易。更多的是获取对Calling Cell的引用,而没有明确强制IT支持将Cell作为值传递给方法。

有关如何提取呼叫单元的任何想法?

最终,这个方法将用于多个工作表,以执行相同的逻辑,并传递不同的范围。

编辑2012-09-24 10:30 am 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

此方法已在代码隐藏逻辑中使用。我将复制此逻辑并将其分为我正在处理的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

1 个答案:

答案 0 :(得分:1)

Application.Caller返回调用函数的单元格。请参阅此MSDN definition