0

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

该方法的结果将进入单元格中的数据验证列表框。我现在有两个需求,需要我通过将传递给该方法的列数限制为一来“虚拟减轻”该方法的使用。这部分我可以完成,我想做的是拥有它,这样如果 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
4

1 回答 1

1

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

于 2012-09-24T16:25:06.027 回答