powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как очистить глобальную переменную с моим Type
8 сообщений из 8, страница 1 из 1
Как очистить глобальную переменную с моим Type
    #39299820
Нормальный парень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа!
Я тут решил от безделья поэкспериментировать, и столкнулся с одной интересной ситуацией.
Задача такая - создать пользовательский объект, одной процедурой присвоить значения свойствам, а второй использовать их.

Проясните один момент:
Создал пользовательский тип "свойства" в модуле, объявил перемеренную модуля obj , присвоил значения свойствам через процедуру setProperty , а через функцию Getpropetry я обратился к свойствам этого класса.
Все бы хорошо, но очистить эту переменную я не могу.
Собственно в этом вопрос - как очистить глобальную переменную пользовательского типа (Type) ? Возможно можно "обнулить" свойства этого класса? Подумываю через цикл это делать, но возможно есть более простой способ.

Если реализовывать это метод через встроенный Class эксель - нет проблем, через set..= nothing, а в примере ниже не могу это сделать. Не дает использовать Set (object recuired), максимум что я могу, передать другой переменной значение свойств этого типа, не не сам тип.

Пример:
Код: vbnet
1.
2.
3.
4.
Private obj As свойства
Private Newobj As Object
set Newobj =  obj.коллекция ' могу
set Newobj =  obj 'не могу, ругается



Код для понимания

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
    Type объекты
    объект As Object
    коллекция As Collection
    End Type
    
    Type свойства
    Имя As String
    Значение As Variant
    ВложенныйТип As объекты
    End Type

Private obj As свойства

Sub Getpropetry()
setProperty
MsgBox "значение - " & obj.Имя
MsgBox "Значение первой ячейки акт. листа - " & obj.Значение
MsgBox "объект из коллекции, имя - " & obj.ВложенныйТип.коллекция("actSheet").name
MsgBox "объект как свойство типа, имя - " & obj.ВложенныйТип.объект.name
'Set obj = Nothing 'ругается!!!object recuired
End Sub

Sub setProperty()
With obj
.Имя = "name"
Set .ВложенныйТип.коллекция = collectoins
Set .ВложенныйТип.объект = ThisWorkbook
.Значение = ActiveSheet.Cells(1, 1).Value
End With
End Sub

Function collectoins() As Collection
Dim col As New Collection
col.Add ActiveSheet, "actSheet"
Set collectoins = col
End Function



Модератор: > решил от безделья поэкспериментировать
Неплохо было еще от безделья предварительно прочесть правила форума
Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
Как очистить глобальную переменную с моим Type
    #39300048
Нормальный парень,

правильно ругается на Set, так как переменная не объектного типа, а UDT. Либо UDT 'свойства' сделать классом и использовать Set obj = Nothing, либо описать некую переменную типа 'свойства', присвоить её полям значения по умолчанию (либо оставить как есть, пустыми), и присваивать её значение obj:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private DefaultObj As свойства

Sub Getpropetry()
 ...
 'Set obj = Nothing 'ругается!!!Object required
 obj = DefaultObj
End Sub
...
Рейтинг: 0 / 0
Как очистить глобальную переменную с моим Type
    #39303382
Нормальный парень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й квартал,

Хм.. не попадалось информация о переменных типа UDT, для себя с их определяю как "ссылка на пользовательский тип" :)
А так, идея хорошая, сначала и не пришла мысль о создании 2ух перемен и вернуть значение по умолчанию, но и это вариант не прошел. Ругается - "...types defined in public..""

Как раз недавно мне представилась возможность использовать этот способ, я дополнительно реализовал процедуру CLEARDataObject, в которой, по завершению, каждому свойству присваиваю значение Null или Nothing.
...
Рейтинг: 0 / 0
Как очистить глобальную переменную с моим Type
    #39304678
Нормальный парень,

UDT - это User-Defined Type, он же пользовательский тип (структура). И это не ссылка.Нормальный пареньРугается - "...types defined in public..""Какие-то существенные подробности упущены (описатели области видимости, тип и instancing модулей, взаимодействие процедур и т. д). Приложите проект, так будет проще.

Вариант с классом вместо Type чем не устраивает?
...
Рейтинг: 0 / 0
Как очистить глобальную переменную с моим Type
    #39304749
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно через CopyMemory забить переменную нулями.
правда не знаю, что будет со счетчиком ссылок у объектных полей, может объекты и не уничтожатся. хотя по идее должны.
...
Рейтинг: 0 / 0
Как очистить глобальную переменную с моим Type
    #39304759
Antonariy,

ничего хорошего не будет. IUnknown::Release() не будет вызван, счётчик ссылок не уменьшится.
...
Рейтинг: 0 / 0
Как очистить глобальную переменную с моим Type
    #39311489
Нормальный парень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й кварталUDT - это User-Defined Type, он же пользовательский тип (структура). И это не ссылка.
но когда мы объявляем переменную на Type, это же ссылка на пользовательский тип - я это имел ввиду..
13-й кварталВариант с классом вместо Type чем не устраивает?
Ну не то, чтобы не устраивает.. Основное почему я озадачился Type-ом - не получалось реализовать вложенный Type в Type, как в моем примере выше - ВложенныйТип As объекты, приходится создавать отдельно class-модуль. В этом случае я и использую UDT.
Но ещё думал производительность кода будет шустрее, если реализовывать через Type, также, хотел оценить "гибкость" и удобство такого метода.
13-й кварталПриложите проект, так будет проще.
Это автономная программа, проект не имеется смысла выкладывать. Но на эту тему я еще писал на форуме, если интересно..
Как оптимизировать код и ускорить выполнения программы?
...
Рейтинг: 0 / 0
Как очистить глобальную переменную с моим Type
    #39311496
Нормальный парень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й кварталUDT - это User-Defined Type, он же пользовательский тип (структура).
Кстати, я вышел из ситуации так - отдельно прописал процедуру, которая по завершения программы присваивает каждому свойству значение null или nothing там где это нужно..
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как очистить глобальную переменную с моим Type
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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