Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
28.03.2024, 14:28:20

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  как передать функции массив пользовательского типа
Страниц: [1]   Вниз
Печать
Автор Тема: как передать функции массив пользовательского типа  (Прочитано 2221 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RuSoldatSe
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 27


Просмотр профиля E-mail
« : 07.04.2023, 14:49:29 »

Здравствуйте!
Подскажите пож-та, в коде работаю с несколькими массивами, в последствии нужно отсортировать каждый. Хотел сделать через функцию, на входе массив, на выходе он же, но отсортированный (по определенному полю).
Вот код:
Код: (vb)
Private Type myType 'пользовательский тип данных
    st As String
    dt As Date
End Type
Private Sub CommandButton1_Click()
Dim mas_1() As myType, mas_2() As myType, mas_3() As myType

 ReDim Preserve mas_1(2) As myType
 mas_1(1).dt = "01.02.2023"
 mas_1(1).st = "строка_1"
 mas_1(2).dt = "01.01.2023"
 mas_1(2).st = "строка_2"
 
 mas_1 = sort_mas(mas_1)

End Sub
'функция сортировки массива по полю дата
Public Function sort_mas(ByRef mas As myType) As myType
Dim i As Byte

 i = i

 sort_mas = mas
End Function


компилятор выдает ошибку. Как правильно написать и можно ли передавать значения массивов функции?
Спасибо.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #1 : 08.04.2023, 10:09:12 »

Первое - все передаваемые аргументы должны быть одного типа. И если объявлены как массив - значит и в функции тоже должна быть передача массива:
Public Function sort_mas(ByRef mas() As myType) As myType
Далее. Раз передаете через ссылку(ByRef) - то присвоение внутри функции не нужно. Тем более возвращаете массив собственного типа. В итоге должно быть так:
Код: (vb)
Private Type myType 'пользовательский тип данных
    st As String
    dt As Date
End Type
Private Sub CommandButton1_Click()
Dim mas_1() As myType, mas_2() As myType, mas_3() As myType
 
 ReDim Preserve mas_1(2) As myType
 mas_1(1).dt = "01.02.2023"
 mas_1(1).st = "строка_1"
 mas_1(2).dt = "01.01.2023"
 mas_1(2).st = "строка_2"
   
sort_mas mas_1 'передаете через ByRef - присвоение не нужно
 
End Sub
'функция сортировки массива по полю дата
Public Function sort_mas(ByRef mas() As myType) As myType
Dim i As Byte
 
 i = i
'передаете через ByRef - присвоение не нужно
'sort_mas = mas
End Function
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
RuSoldatSe
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 27


Просмотр профиля E-mail
« Ответ #2 : 08.04.2023, 12:35:48 »

спасибо за пояснения!
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru