2015-07-26 3 views
-2

У меня есть быстрый вопрос относительно кодирования в vba, я пытаюсь написать алгоритм сортировки в vba.Передача массивов в функции или подпроцедуры

Однако мне не удается передать целочисленный массив в функцию. Есть ли способ передать массив в функцию? Я считаю, что передать его, как вариант, это правильный способ сделать это.

Также есть способ получить возвращаемое значение функции для передачи как массива?

+1

[Как: передать массив в процедуре] (https://msdn.microsoft.com/en-us/library/vstudio/63y5ksfs%28v= vs.100% 29.aspx? f = 255 & MSPPError = -2147217396) – 0m3r

+0

@Omar хорошая ссылка, но не совсем VBA –

ответ

0

По Chip Pearson's examples Вы можете передать массив в качестве параметра

Function SumArray(Arr() As Long) As Long 
    ''''''''''''''''''''''''''''''''''''''''''' 
    ' SumArray 
    ' This sums the elements of Arr and returns 
    ' the total. 
    ''''''''''''''''''''''''''''''''''''''''''' 
    Dim N As Long 
    Dim Total As Long 
    For N = LBound(Arr) To UBound(Arr) 
     Total = Total + Arr(N) 
    Next N 
    SumArray = Total 
End Function 

также возвращает массив в качестве результата функции, например.

Function LoadNumbers(Low As Long, High As Long) As Long() 
    ''''''''''''''''''''''''''''''''''''''' 
    ' Returns an array of Longs, containing 
    ' the numbers from Low to High. The 
    ' number of elements in the returned 
    ' array will vary depending on the 
    ' values of Low and High. 
    '''''''''''''''''''''''''''''''''''''''' 
    Dim ResultArray() As Long 
    Dim Ndx As Long 
    Dim Val As Long 
    ''''''''''''''''''''''''''''''''''''''''' 
    ' Ensure Low <= High 
    ''''''''''''''''''''''''''''''''''''''''' 
    If Low > High Then 
     Exit Function 
    End If 
    ''''''''''''''''''''''''''''''''''''''''' 
    ' Resize the array 
    ''''''''''''''''''''''''''''''''''''''''' 
    ReDim ResultArray(1 To (High - Low + 1)) 
    '''''''''''''''''''''''''''''''''''''''' 
    ' Fill the array with values. 
    '''''''''''''''''''''''''''''''''''''''' 
    Val = Low 
    For Ndx = LBound(ResultArray) To UBound(ResultArray) 
     ResultArray(Ndx) = Val 
     Val = Val + 1 
    Next Ndx 

    LoadNumbers = ResultArray() 

End Function 

Далее информация/примеры www.cpearson.com

+1

Почему вы публикуете код Chip Pearson без правильной атрибуции? –

+0

Не могли бы вы посоветовать мне, как включить надлежащую атрибуцию? Недостаточно со ссылкой? – davcs86

+1

См. Следующее: http://stackoverflow.com/help/referencing. Поскольку вы включили ссылку, я знал, что вы не пытаетесь ввести в заблуждение, но вот как это может произойти. Главное, что если вы цитируете большой раздел кода, который кто-то написал, он должен быть ясным в тексте ответа, а не в ссылке, которую не все последуют. –