Страницы: 1
RSS
Collection и user-defined type
 
Нужно создать коллекцию из UDT элементов  
 
Type HistoryPeak  
...  
End Type  
 
Dim HPeakCollection As New Collection  
 
и добавить новые UDT элементы.  
Планировалось как-то так  
 
   For Each ...  
       Dim HPeak As New HistoryPeak  
       HPeakCollection.Add HPeak  
       Set HPeak = Nothing  
   Next...  
 
но не работает.  
Оказывается Dim...New и Set...New используются только с классами.  
Как создать новые UDT элементы для включения в коллекцию.  
Или это противоречит идеологии VBA и нужно отказаться от UDT и определять новые элементы через класс.
 
1. Переменная пользовательского типа объявляется как обычная - без New.    
2. В коллекцию можно запихнуть всё что угодно, кроме переменных пользовательского типа.  
Вместо коллекции создайте массив ППТ.
 
udt определять в классе, создавать коллекцию классов..
Живи и дай жить..
 
Примерчик (модуль modIteration).
 
Предыдущий пост - мой. :-)
There is no knowledge that is not power
 
или чуточку проще
Живи и дай жить..
 
{quote}{login=слэн}{date=28.04.2011 10:59}{thema=}{post}или чуточку проще{/post}{/quote}  
А в чём состоит "простота"? У тебя - Collection, а у меня - HistoryPeakCollection. Это одно и то же?
There is no knowledge that is not power
 
Спасибо! В целом ситуация проясняется, но возникла дополнительная проблема.  
ВБ не дает вставить в класс массив фиксированной размерности.  
Как можно обойти это ограничение?
 
А что ты хочешь сделать?
There is no knowledge that is not power
 
Планировалась такая структура данных  
 
Type HistoryPeak  
   Dim InstrName As String  
   Dim max(0 To 3) As Double  
   Dim min(0 To 3) As Double  
End Type  
 
для определения значимых локальных пиков в различных последовательностях InstrName за определенные интервалы времени. Т.к. количество таких структур заранее не известно, я хотел запоминать их в коллекции для дальнейшей обработки.
 
Сорри  
 
Type HistoryPeak  
   InstrName As String  
   max(0 To 3) As Double  
   min(0 To 3) As Double  
End Type
 
А чем тебя класс не устраивает?
There is no knowledge that is not power
 
{quote}{login=Yorik}{date=28.04.2011 05:58}{thema=Re: Re: }{post}  
ВБ не дает вставить в класс массив фиксированной размерности.  
Как можно обойти это ограничение?{/post}{/quote}  
Johny, с Вашего позволения:
 
Файл:
 
{quote}{login=С.М.}{date=29.04.2011 10:47}{thema=Re: }{post}{quote}{login=Yorik}{date=28.04.2011 05:58}{thema=Re: Re: }{post}  
ВБ не дает вставить в класс массив фиксированной размерности.  
Как можно обойти это ограничение?{/post}{/quote}  
Johny, с Вашего позволения:{/post}{/quote}  
Что за чушь???? Смотри файл.
 
Johny, а если хочется загнать Position в массив  
'  
Sub Test0()  
   Dim hp As New HistoryPeak  
   Dim hp_arr  
   hp_arr = hp.Position  
End Sub  
???
 
{quote}{login=С.М.}{date=29.04.2011 01:11}{thema=}{post}Johny, а если хочется загнать Position в массив  
'  
Sub Test0()  
   Dim hp As New HistoryPeak  
   Dim hp_arr  
   hp_arr = hp.Position  
End Sub  
???{/post}{/quote}  
 
Ну и что значит hp_arr = hp.Position? Если ты так пишешь - значит, не понимаешь, как работает свойство с параметрами. Если надо вернуть массив с Position'ами, то нужно просто добавить новое read-only свойство. Ну вот так, например:  
 
Property Get Positions() As Integer()  
   Positions = arr  
End Property  
 
И проверка:  
MsgBox "Верхняя граница массива" & UBound(hp.Positions)
 
> Если ТЫ так пишешь - значит, не понимаешь  
Re:  
Johny, мы с Вами водку вместе не пили.
 
Если Вы так пишете - значит, не понимаете, как работает свойство с параметрами.  
 
Property Get Position(ByVal i As Integer) As Integer  
   Position = arr(i)  
End Property  
Property Let Position(ByVal i As Integer, ByVal iVal As Integer)  
   arr(i) = iVal  
End Property  
 
В Propert Let "i" - это параметр (для массива arr), а "iVal" - это значение, которое мы присваиваем в коде: hp.Position(1) = 123. То есть iVal = 123.
There is no knowledge that is not power
 
{quote}{login=С.М.}{date=29.04.2011 01:33}{thema= }{post}> Если ТЫ так пишешь - значит, не понимаешь  
Re:  
Johny, мы с Вами водку вместе не пили.{/post}{/quote}  
И вообщея - я не пью :-)
There is no knowledge that is not power
Страницы: 1
Читают тему
Наверх