Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Обращение к полям пользовательского типа данных через переменную / 9 сообщений из 9, страница 1 из 1
01.11.2011, 12:56
    #37506652
Snowblast
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полям пользовательского типа данных через переменную
В модуле Excel задан пользовательский тип данных и объявлен массив данного типа.

Type MyType
MyDate As Date
MyQty As Long
MyName As String
End Type

Public TestRec (1 to 10) as MyType


Обращение к полю (например, MyQty) элемента такого массива выглядит как:
TestRec(i).MyQty=100

Вопрос:
Каким образом возможно обратиться к произвольному полю такого массива используя переменную, содержащую имя поля.

В примере ниже выдает ошибку на последней строке - Method or data member not found.

Dim FieldName As String
FieldName="MyQty"
TestRec(i).FieldName=100
...
Рейтинг: 0 / 0
01.11.2011, 12:59
    #37506663
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полям пользовательского типа данных через переменную
сделайте свой класс с нужными вам свойствами
...
Рейтинг: 0 / 0
01.11.2011, 13:32
    #37506743
Snowblast
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полям пользовательского типа данных через переменную
Konst_Oneсделайте свой класс с нужными вам свойствами

Спасибо за совет. С этим вопросом пока детально не знаком, буду разбираться.
А помимо использования класса, возможно ли иное решение, м.б. с применением функции CallByName?
...
Рейтинг: 0 / 0
01.11.2011, 13:34
    #37506746
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полям пользовательского типа данных через переменную
Совет был наилучшим.

Иные решения породят кучу кода в основном проекте, а зачем? Самое логичное - засунуть весь этот код в черный ящик - класс. Один раз отладить класс и пользоваться им.
...
Рейтинг: 0 / 0
01.11.2011, 14:58
    #37506925
Обращение к полям пользовательского типа данных через переменную
SnowblastА помимо использования класса, возможно ли иное решение, м.б. с применением функции CallByName?CallByName как раз и обеспечивает вызов по имени public метода или свойства объекта (экземпляра класса).
...
Рейтинг: 0 / 0
01.11.2011, 15:29
    #37506988
Snowblast
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полям пользовательского типа данных через переменную
13-й кварталSnowblastА помимо использования класса, возможно ли иное решение, м.б. с применением функции CallByName?CallByName как раз и обеспечивает вызов по имени public метода или свойства объекта (экземпляра класса).

А не сможете подсказать правильный синтаксис для CallByName применительно к моей ситуации?
Все мои попытки, к сожалению, оказались неудачны.
...
Рейтинг: 0 / 0
01.11.2011, 15:47
    #37507030
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полям пользовательского типа данных через переменную
CallByName применим к объектам и не применим к пользовательским типам. Поэтому либо разбираться с классами либо отказаться от вызова полей по имени.
...
Рейтинг: 0 / 0
01.11.2011, 15:51
    #37507040
Обращение к полям пользовательского типа данных через переменную
Snowblast,

Модуль класса MyType:
Код: plaintext
1.
2.
3.
4.
Option Explicit

Public MyDate As Date
Public MyQty As Long
Public MyName As String
Модуль, с тестовой процедурой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Option Explicit

Public TestRec( 1  To  10 ) As MyType

Sub Test()
 Dim i As Long
 For i = LBound(TestRec) To UBound(TestRec)
    Set TestRec(i) = New MyType
    With TestRec(i)
       .MyDate = Now
       .MyName = "TestRec(" & i & ")"
       .MyQty = i *  3 
    End With
 Next i
  
 Dim FieldName As String
 FieldName = "MyQty"
 
 i =  5 
 CallByName TestRec(i), FieldName, VbLet,  100 
 
 Debug.Print TestRec(i).MyQty
End Sub
...
Рейтинг: 0 / 0
02.11.2011, 20:22
    #37509521
Snowblast
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обращение к полям пользовательского типа данных через переменную
Всем спасибо за помощь. Разобрался.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Обращение к полям пользовательского типа данных через переменную / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]