Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2010, 16:06   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Передача массива в функуцию

Как правильно передать одномерный массив в функцию? Так что бы элементы массива можно было изменить и потом вернуть не только переменную с результатом работы функцию, но и сам массив.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 23.11.2010, 16:13   #2
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

это Вам не Pascal, не понимаю сложности:

Код:
Sub a()
    Dim dd(3) As Integer
    ss aaa:=dd()
End Sub
Sub ss(aaa() As Integer)
    aaa(1) = 2
End Sub
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 23.11.2010, 16:36   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Skif-F Посмотреть сообщение
это Вам не Pascal, не понимаю сложности:

Код:
Sub a()
    Dim dd(3) As Integer
    ss aaa:=dd()
End Sub
Sub ss(aaa() As Integer)
    aaa(1) = 2
End Sub
Точно, не паскаль... А вот с функциями подобное не проходит. Ну и ладно, можно обойтись.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 23.11.2010, 16:43   #4
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

А так:
Код:
Sub a()
    Dim dd(3) As Integer
    q = ss(aaa:=dd())
    q(1) = 3
End Sub
Function ss(aaa() As Integer) As Variant
    aaa(1) = 2
    ss = aaa()
End Function
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 23.11.2010, 17:54   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Skif-F Посмотреть сообщение
А так:[/CODE]
Вот так работает как нужно
Код:
Sub a()
    Dim dd(3) As Integer
    qw = ss(aaa:=dd())
    dd(1) = 3
End Sub
Function ss(aaa() As Integer) As Variant
    aaa(1) = 2
    ss = 234
End Function
Спасибо за ответ!
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 23.11.2010, 19:08   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Есть 2 основных варианта:
Код:
Sub Макрос1()
    Dim ИсходныйМассив(3) As Integer
    НовыйМассив = ОбработкаМассива1(ИсходныйМассив)
    MsgBox НовыйМассив(1)
End Sub

Function ОбработкаМассива1(ByVal Массив)  ' функция возвращает массив
    Массив(1) = 111
    ОбработкаМассива1 = Массив
End Function
и

Код:
Sub Макрос2()    ' так намного проще - массив передаётся по ссылке
    Dim ИсходныйМассив(3) As Integer
    ОбработкаМассива2 ИсходныйМассив
    MsgBox ИсходныйМассив(1)
End Sub

Function ОбработкаМассива2(ByRef Массив)    ' массив передаётся по ссылке
    Массив(1) = 222    ' изменения вносятся в переданный массив
End Function
Проще всего использовать второй вариант.

То, что вам надо:
Код:
Sub Макрос3()
    Dim ИсходныйМассив(3) As Integer, ОбработкаПрошлаУспешно As Boolean
    
    ОбработкаПрошлаУспешно = ОбработкаМассива(ИсходныйМассив)
    
    If ОбработкаПрошлаУспешно Then MsgBox ИсходныйМассив(1) Else MsgBox "error"
End Sub

Function ОбработкаМассива(ByRef Массив) As Boolean
    ' возвращает результат типа Boolean - TRUE, если ошибок не было
    On Error Resume Next: Err.Clear
    
    Массив(1) = 222    ' изменения вносятся в переданный массив
    Массив(2) = 444    ' изменения вносятся в переданный массив
    
    ОбработкаМассива = Err = 0
End Function

Последний раз редактировалось EducatedFool; 23.11.2010 в 19:13.
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача массива в процедуру... nXs Общие вопросы Delphi 3 12.08.2010 16:40
Передача массива в метод Sempe4 Общие вопросы .NET 6 16.06.2010 17:25
Си++. Передача массива в функцию. Diamond2107 Помощь студентам 7 03.12.2009 20:15
Передача массива в функцию Vistar Общие вопросы C/C++ 1 27.04.2009 08:08
передача массива в процедуру Gash Общие вопросы Delphi 1 01.02.2009 00:30