4

我似乎无法弄清楚为什么这个 UDF 在currentInput = inputArray(i). 以下是相关代码:

Function OrderRange(inputRange As Range) As Variant

    Dim length As Integer
    inputHeight = inputRange.Count

    Dim inputArray As Variant
    inputArray = inputRange

    Dim strippedArray() As Variant
    ReDim strippedArray(0 To (inputHeight - 1))

    Dim currentInput As String

    Dim i As Integer

    For i = 0 To (inputHeight - 1)

        currentInput = inputArray(i)
        '...computations on currentInput...'
        strippedArray(i) = currentInput
    Next i
    OrderRange = strippedArray
End Function

调试器到达currentInput = inputArray(i),但是一旦我移到下一行,函数就会终止,并且#VALUE!在我调用函数的单元格中输入了一个错误。我知道这是一个具体问题,但我确定这是一个普遍问题,我将编辑这篇原始帖子以反映一般问题是什么。

编辑:这是关于将范围分配给变量数组的问题。

4

1 回答 1

7

通过将它们设置为等于范围创建的变体数组具有两个维度,即使它们只有一列或一行宽。因此,如果您使用 A1:A10 调用该函数,您将得到一个 10 * 1 数组。维度的下限也将是一,而不是零。因此,您必须执行以下操作:

For i = 1 To (inputHeight)
    currentInput = inputArray(i, 1)

此外,您应该使用 Option Explicit 以便提醒您声明所有变量。InputHeight 永远不会被声明。

于 2012-06-28T04:41:17.490 回答