我似乎无法弄清楚为什么这个 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)
但一旦我移动到下一行,函数就会终止,并且在单元格 I 中输入 #VALUE!
错误从调用该函数。我知道这是一个具体问题,但我确信这是一个普遍问题,我将编辑这篇原始帖子以反射(reflect)普遍问题。
编辑:这是一个有关将范围分配给变体数组的问题。
最佳答案
通过将其设置为等于范围而创建的变体数组具有二维,即使它们只有一列或行宽。因此,如果您使用 A1:A10 调用该函数,您将得到一个 10 * 1 数组。此外,维度的下限将为一,而不是零。所以你必须做类似的事情:
For i = 1 To (inputHeight)
currentInput = inputArray(i, 1)
此外,您还应该使用 Option Explicit,以便提醒您声明所有变量。 InputHeight 从未声明。
关于arrays - 在 VBA 中将数组值分配给变量会导致我的 UDF 退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11237567/