2015-12-07 5 views
0

Access 2013 32 бит: Win 7 64bitAccess VBA Pass многомерный массив в функции

Пробовал: Is it possible to pass a multidimensional array as a parameter in EXCEL VBA? без толку

(Если вы можете ответить на этот вопрос, вероятно, можно ответить на этот вопрос, но они немного отличается)

Sub CreateArray() 
    Dim myArray(1 to 10, 1 to 5) 
    'Code that assigns values to (1 to 10, 1 to 4) 
    myArray() = CalculateLastColofArray(myArray()) 
    'Do stuff with full array 
End sub 

Function CalculateLastColofArray(calcArray) 
    For i = LBound(calcArray()) to UBound(calcArray()) 
     calcArray(i,5) = calcArray(i,1) + calcArray(i,3) 
    Next i 
    CalculateLastColofArray = calcArray() 
End Function 

Мой расчет на самом деле гораздо сложнее, чем простое добавление и мой массив динамически велик (х, 5)

Do как я показал выше, заполняет myArray, но отладка показала это, когда я нависаю над ним, завернутый в вызов функции, и ошибки перед входом в функцию

+0

Вы не объявили аргумент 'calcArray' как массив. Попробуйте 'Функция CalculateLastColofArray (calcArray())' –

+0

Эй, Скотт, благодарю вас за ответ - это была проблема, но это было на другой стороне прохода - myArray() читался как один вариант, а не как массив myArray, мне пришлось изменить вызов myArray из myArray() – Schalton

+0

справа. проблема была в любом случае ... если вы сделали то, что я предложил или что вы сделали, любой из них сработал бы. В принципе, вы пытались называть яблоко апельсином, и вам нужно было заставить их обе яблоки работать :) Просто подумал, что стоит отметить, чтобы вы не думали, что это может быть только один. –

ответ

0

Вы можете передать многомерный массив в качестве параметра.

Вы также можете назначить результат функции переменной массива, однако эта переменная должна быть объявлена ​​как динамический массив (поэтому ее размеры не могут быть указаны в строке объявления).

Кроме того, у вас есть другие ошибки в коде. Ниже приведен правильный вариант:

Sub CreateArray() 
    'Dim myArray(1 To 10, 1 To 5) As Variant 
    Dim myArray() As Variant 

    ReDim myArray(1 To 10, 1 To 5) 

    'Code that assigns values to (1 to 10, 1 to 4) 
    myArray = CalculateLastColofArray(myArray) 
    'Do stuff with full array 

End Sub 

Function CalculateLastColofArray(calcArray() As Variant) As Variant() 
    For i = LBound(calcArray) To UBound(calcArray) 
     calcArray(i, 5) = calcArray(i, 1) + calcArray(i, 3) 
    Next i 
    CalculateLastColofArray = calcArray 
End Function 
0

Ключ был CalculateLastColofArray(myArray()), потому что я включил скобки в аргумент myArray(), он искал одно значение, не принимая массив в целом. изменить эту строку CalculateLastColofArray(myArray) решить мою проблему

это всегда что-то маленькое ...

Смежные вопросы