Конференція VBStreets - Перегляд теми - передати в процедуру масив
Весь смак програмування!
- Список форумів‹ Visual Basic‹ Visual Basic 1–6
- Змінити розмір шрифту
- FAQ
- Вхід
передати у процедуру масив
передати у процедуру масив
Допоможіть плз, як вирішувати завдання. Є користувальницький тип
Public Type MyType var1 як string var2 як string End Type
Є масив dim arr() as MyType
Є процедура Public Sub MySub(arg1, arg2, arr, arg3)
Так ось така фішка з масивом змінних користувача типу не працює. Компілятор каже: Тільки user-defined typs defined in public object modules can be coerced to or from a variant or passed to late-bound functions.
Підкажіть плз, які є варіанти, щоб процедурою обробити масив змінних користувача типу.
а якщо так функцію оголосити то на кшталт ok Public Sub MySub(arg1, arg2, arr() As MyType, arg3)
Спасибі хлопці. Проте до кінця цю ситуацію не виправило.
Те, що запропонував corgi без проблем працює, і це вже варіант. Недолік лише у цьому, що у процедуру передається масив жорстко заданого типу MyType, т. е. масив іншого вже передати не можна. Це потрібно для того, що є різні структури типів, які мають однакові властивості, так ось, для процедури MySub потрібні тільки ці однакові властивості масивів змінних різних типів. Трохи незручно.
Тепер про пропозицію superski. Якщо оголосити dim arr() as Variant, то компілятор скаже, що потрібно об'єкт, коли я заповнюватиму arr()
Напр. arr(1).var1 = "dima" скаже object required.
Може, я звичайно щось не зрозумів.
З цього випливає, що потрібно оголосити всі типигромадському модулі. Тоді можна їх передавати як завгодно.
Класна інтерпретація мого прізвища. Мені подобається! Чи може нік змінити?
1. модуль: Код: Виділити все Public Type MyType var1 як string var2 як string End Type
dim arr() як MyType 2. у форму: Код: Виділити все Public Sub MySub(arg1, arg2, arr, arg3) End Sub Private Sub Form_Load() MySub arg1, arg2, arr, arg3 End Але дивись потім сам заплутаєшся з варіантними типами, типи краще визначати без будь-яких гулянь
Ще раз дякую за допомогу Skiperski, дякую, що не образився. Це я ненароком. GSerg говорить правильно, але в моєму випадку це не спрацює.
Допустимо є тип
'опис об'єкта SQL Public Type sqlObject Name As String 'ім'я об'єкта БД Level As Long 'номер рівня в дереві залежностей XType As String 'тип об'єкта End Type
'ОБ'ЄКТ Public Type mdObject Name As String 'ім'я об'єкта Level As Long 'номер рівня в дереві залежностей End Type
Public Sub DrawDepsTree(mdObjects() As mdObject, . )
яка юзає масив змінних типу mdObject. Так от, вся підлянка в тому, що в неї хрін передаси масив змінних типу sqlObject, хоча цей тип просто розширення типу mdObject і суто логічно я тут не бачу жодних проблем.
Ні хрону! Будь-яким по порядку аргументом.
Ти напевно плутаєш з Param Array, коли процедура має довільну кількість аргументів.
Sub AnyNumberArgs(strName As String, ParamArray intScores() As Variant) Dim intI As Integer
Debug.Print strName; " Scores" ' Використовуйте UBound функцію для визначення верхньої межі array. For intI = 0 To UBound(intScores()) Debug.Print " "; intScores(intI) Next intI EndSub
Наведені приклади показують, як може call цей процес.
AnyNumberArgs "Jamie", 10, 26, 32, 15, 22, 24, 16
AnyNumberArgs "Kelly", "High", "Low", "Average", "High"