2017-05-19 116 views
1

我寫了下面顯示的功能。它適用於我在Sub中使用它。這是我第一次嘗試寫一個函數。我知道這是一個noob問題,但我似乎無法得到運行的功能。這可能是關於不正確調用函數或者可能沒有正確定義函數頭中的變量的問題Excel VBA排序數組功能

任何人都可以請指點我正確的方向。

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 
+0

你想用代碼做什麼,它沒有做什麼?看起來你正在對同一個陣列進行比較,當一個更大時,將它們切換。基本上是升序? –

+0

函數應該按字母順序對數組進行排序。就像我上面所說的那樣,這在Sub中起作用。我從來沒有寫過一個函數,所以我不確定這是否是作爲函數實現代碼的正確方法。本質上,該函數內的代碼與Sub中的代碼相同,所以我不確定我要錯的位置 –

+0

您可以將其設置爲Sub,因爲您的函數不會返回任何內容... – MacroMarc

回答

3

添加括號,以確保該參數是一個數組

Function SortArray(ArrayToSort() As String) 
    'your code 
End Function 

Sub CreateUniquesList() 
    Dim References() As String 
    '... 
    SortArray References 'lose the parentheses 
    '... 
End Sub 
0

通常(我總是說,但隨後有人會發布5個引用,以顯示它是如何不總是),函數返回一個值。您的函數定義應包含要返回的變量類型,如

Function SortArray(ArrayToSort As String) as variant 

其中變體將包含結果的排序數組。

然後在函數的末尾,你設定的功能本身結果的值,如

Next x 
SortArray = ArrayToSort 
End Function 

,然後調用它,你設置一個變量等於函數,如在

References = SortArray References 

而且應該這樣做。

我也建議你不要被裁判傳遞的價值,所以

Function SortArray(byval ArrayToSort As String) 

,因爲你不(通常)希望你的功能與原來的數組實際上一塌糊塗。

+0

我低估了,因爲雖然你說的一些話很好,但有些是錯誤的。他正在嘗試使用數組,因此傳遞的變量需要被創建爲一個數組。爲此需要括號。另外一個數組不能通過ByVal,除非它作爲一個變量傳遞(並接收)。 – MacroMarc