Что-то я тормознул. Не могу вспомнить, как в VBA задать функцию, возвращающую массив? С любыми другими типами переменных всё просто: [vba]
Код
Function Qwerty$(Arr, Arg) ' Function Qwerty(Arr, Arg) As String Function Qwerty%(Arr, Arg) ' Function Qwerty(Arr, Arg) As Integer Function Qwerty&(Arr, Arg) ' Function Qwerty(Arr, Arg) As Long Function Qwerty(Arr, Arg) As Boolean …
[/vba] А вот как быть с массивом, чтобы, когда я возвращаю значение из неё в массив, не ругалось на размерность? Пока я просто не указываю размерности функции (получается As Variant). Но это как-то не хорошо.
Что-то я тормознул. Не могу вспомнить, как в VBA задать функцию, возвращающую массив? С любыми другими типами переменных всё просто: [vba]
Код
Function Qwerty$(Arr, Arg) ' Function Qwerty(Arr, Arg) As String Function Qwerty%(Arr, Arg) ' Function Qwerty(Arr, Arg) As Integer Function Qwerty&(Arr, Arg) ' Function Qwerty(Arr, Arg) As Long Function Qwerty(Arr, Arg) As Boolean …
[/vba] А вот как быть с массивом, чтобы, когда я возвращаю значение из неё в массив, не ругалось на размерность? Пока я просто не указываю размерности функции (получается As Variant). Но это как-то не хорошо.Alex_ST
Function testFunc(length As Long) As Long() Dim res() As Long ReDim res(length) For i = 0 To length res(i) = i Next i testFunc = res() End Function Sub ttt() Dim arr arr = testFunc(5) For i = 0 To UBound(arr) Debug.Print i, arr(i) Next i End Sub
[/vba]
Alex_ST, здравствуйте. Может так? [vba]
Код
Function testFunc(length As Long) As Long() Dim res() As Long ReDim res(length) For i = 0 To length res(i) = i Next i testFunc = res() End Function Sub ttt() Dim arr arr = testFunc(5) For i = 0 To UBound(arr) Debug.Print i, arr(i) Next i End Sub
Manyasha, спасибо. Я, правда, не знаю, какая размерность будет у элементов массива. Поэтому и пытался сделать As Variant, но по привычке в сокращённой записи, т.е. просто опустив его. Ну и, естественно, Function Qwerty()() не прошло (что не удивительно). А Function Qwerty() As Variant() - работает. [vba]
Код
Function Qwerty(Arr, Qwas) As Variant() Qwerty = Array(1, 2, 3, 4) End Function Sub test_Qwerty() Debug.Print IsArray(Qwerty(1, 2)) Dim Arr(): Arr = Qwerty(1, 2) End Sub
[/vba]
Manyasha, спасибо. Я, правда, не знаю, какая размерность будет у элементов массива. Поэтому и пытался сделать As Variant, но по привычке в сокращённой записи, т.е. просто опустив его. Ну и, естественно, Function Qwerty()() не прошло (что не удивительно). А Function Qwerty() As Variant() - работает. [vba]
Код
Function Qwerty(Arr, Qwas) As Variant() Qwerty = Array(1, 2, 3, 4) End Function Sub test_Qwerty() Debug.Print IsArray(Qwerty(1, 2)) Dim Arr(): Arr = Qwerty(1, 2) End Sub