Excel VBAsorting数组函数

我写了下面显示的function。 当我在Sub中使用它的时候它是有效的。 这是我第一次尝试写一个函数。 我知道这是一个noob问题,但我似乎无法得到运行的function。 这可能是关于不正确调用函数,或者可能没有正确定义函数头中的variables

任何人都可以请指出我在正确的方向。

Function SortArray(ArrayToSort As String) Dim x As Long, y As Long Dim TempTxt1 As String Dim TempTxt2 As String For x = LBound(ArrayToSort) To UBound(ArrayToSort) For y = x To UBound(ArrayToSort) If UCase(ArrayToSort(y)) < UCase(ArrayToSort(x)) Then TempTxt1 = ArrayToSort(x) TempTxt2 = ArrayToSort(y) ArrayToSort(x) = TempTxt2 ArrayToSort(y) = TempTxt1 End If Next y Next x End Function Sub CreateUniquesList() Dim References() As String ... SortArray (References) ... End Sub 

添加括号以确保参数是一个数组

 Function SortArray(ArrayToSort() As String) 'your code End Function Sub CreateUniquesList() Dim References() As String '... SortArray References 'lose the parentheses '... End Sub 

通常(我总是说,但有人会张贴5引用,以显示它不总是),一个函数返回一个值。 你的函数定义应该包含一个要返回的variablestypes,如

 Function SortArray(ArrayToSort As String) as variant 

变体将包含结果的sorting数组。

然后在函数结束时,将函数本身的值设置为结果,如下所示

  Next x SortArray = ArrayToSort End Function 

然后,为了调用它,你可以设置一个等于该函数的variables

 References = SortArray References 

这应该做到这一点。

我也build议你不要通过ref传递值,所以

 Function SortArray(byval ArrayToSort As String) 

因为你不(通常)希望你的函数实际上混乱的原始数组。