Vba 方法返回对调用工作表/单元格的引用

Vba 方法返回对调用工作表/单元格的引用,vba,excel,excel-2010,Vba,Excel,Excel 2010,我有一个方法可以从工作表上的表列执行不同的结果 该方法的结果将进入单元格中的数据验证列表框。我现在有两个需求,需要通过限制传递给该方法的列数来“虚拟缓解”该方法的使用。这部分我可以完成,我想做的是,如果范围中有多个列,那么它会“吐”到用户身上,说明从“工作表”“单元格”进行了非法函数调用,并提醒it支持解决问题 拿到工作表很好,也是最简单的部分。它更多的是获取对调用单元的引用,而无需明确地强制IT支持将单元作为值传递给方法 关于如何提取呼叫单元有什么想法吗 最终,此方法将在多个工作表中使用,以执

我有一个方法可以从工作表上的表列执行不同的结果

该方法的结果将进入单元格中的数据验证列表框。我现在有两个需求,需要通过限制传递给该方法的列数来“虚拟缓解”该方法的使用。这部分我可以完成,我想做的是,如果范围中有多个列,那么它会“吐”到用户身上,说明从“工作表”“单元格”进行了非法函数调用,并提醒it支持解决问题

拿到工作表很好,也是最简单的部分。它更多的是获取对调用单元的引用,而无需明确地强制IT支持将单元作为值传递给方法

关于如何提取呼叫单元有什么想法吗

最终,此方法将在多个工作表中使用,以执行相同的逻辑,并将不同的范围传递给它

编辑时间:2012-09-24美国中部时间上午10:30 这是我到目前为止的实现,我还没有在其中使用
应用程序.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工作簿的
应用程序.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

Application.Caller
返回调用函数的单元格。看看这个。

我不太懂,但是
Application.Caller
返回调用函数的单元格。显示一些实际代码怎么样?这将使你的问题更容易理解。@Douglancy Thanx,仍在学习2007+vba框架的精髓。@TimWilliams如果我确切地知道我将使用什么来反向引用调用单元格,那就太好了。我希望进行错误处理,并希望返回调用该方法的单元格,以便向最终用户提供准确(尽可能)的错误报告,以便向IT支持部门报告。正如Doug指出的,
应用程序。调用者是您需要的。