【问题标题】:VBA function with a variable number of arrays as arguments具有可变数量的数组作为参数的 VBA 函数
【发布时间】:2016-06-14 11:02:57
【问题描述】:

有很多关于如何使用 ParamArray 创建具有可变数量参数的 vba 函数的帖子。但是我需要创建一个以可变数量的数组作为参数的函数。也就是说,我的函数将至少有两个数组作为输入,但可能有几个。

函数可能显示为:

MyFunc(A1:A10,B1:B10)

在这种情况下,它将有两个数组作为参数,或者它可能是:

MyFunc(A1:A10,B1:B10,C1:C10,D1:D10)

在这种情况下会有四个数组。VBA 可以处理这种类型的函数吗?如果有,怎么做?

【问题讨论】:

  • 明确地说,我希望编写一个可以在工作表中(在单元格中)使用的用户定义函数。我所追求的功能类似于sumproduct 公式 - 它最多可以处理 255 个数组(或可以从中提取数组的范围)。
  • 在 MNS 指出我实际上是在寻找一个具有可变数量的 ranges 的函数,而不是可变数量的 arrays 之后,我做到了更多搜索并喜欢答案here。谢谢

标签: vba


【解决方案1】:

以下是传递可变数量范围的一种方法,如您的问题所示。

Sub MyFunc(ByRef Ranges() As Range)

    Dim ObjCell As Range
    Dim nIndex As Integer
    For nIndex = 0 To UBound(Ranges)
        For Each ObjCell In Ranges(nIndex).Cells
            MsgBox ObjCell.Text
        Next ObjCell
    Next nIndex
End Sub

并调用上面的函数,如下所示。

Public Sub Auto_open()

    Dim Ranges(4) As Range

    Set Ranges(0) = Worksheets("Sheet1").Range("A1:A10")
    Set Ranges(1) = Worksheets("Sheet1").Range("B1:B10")
    Set Ranges(2) = Worksheets("Sheet1").Range("C1:C10")
    Set Ranges(3) = Worksheets("Sheet1").Range("D1:D10")

    MyFunc Ranges

End Sub

希望对您有所帮助!

【讨论】:

  • 非常感谢。我实际上正在尝试编写一个可以在工作簿(在单元格中)中使用的函数。我已经在我原来的问题中添加了一条评论以供澄清。如果我将上面的 MyFunc 代码转换为函数(即使我修改代码以使其简单地返回 UBound(Ranges).
猜你喜欢
  • 2014-03-08
  • 1970-01-01
  • 2011-12-24
  • 2018-06-27
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 2011-01-21
相关资源
最近更新 更多