powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / VBA, время жизни объекта
18 сообщений из 18, страница 1 из 1
VBA, время жизни объекта
    #32998057
Pteros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В VBA модуле объявлен и создается глобальный объект

Код: plaintext
Public MyObject as New CMyObject

Вопрос - каково время жизни этого объекта, когда он создается и уничтожается?

Спасибо!
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #32998122
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в Excel создаётся при первом обращении к этому объекту, и живёт до закрытия документа
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #32998268
Pteros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я сделал для объекта обработчик Terminate()

Код: plaintext
1.
2.
Private Sub Class_Terminate()
  MsgBox "CMyObject - Terminate()"
End Sub

Получается что после обращения к этому объекту он будет создан и перед закрытием документа появится мессаджбокс? У меня мессаджбокс не выскакивает...
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #32999038
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- такая же фигня. сам проверял
- но это не значит что объект по прежнему сидит в оперативной памяти.
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #33000396
Pteros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда такой вопрос. Мне нужно сделать объект, который будет создаваться при запуске приложения и уничтожаться при его закрытии. Создание и уничтожение объекта должно обрабатываться в его Initialize() и Terminate(). Как это сделать в VBA?
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #33000482
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это код книги
событие 'Workbook_Open' обрабатывается при её открытии автоматически
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim cTest As clsTest

Private Sub Workbook_Open()
    Set cTest = New clsTest
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Set cTest = Nothing
End Sub
и соответственно код класса 'clsTest' для проверки
Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Class_Initialize()
    MsgBox "Initialize"
End Sub

Private Sub Class_Terminate()
    MsgBox "Terminate"
End Sub
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #33000797
Pteros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну понятно что так можно :) Только мне надо в Access'e а там нету Workbook_Open
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #33059104
Ангара
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант - в Access можно назначить стартовую форму, сделать ее невидимой и на Form_Load повесить чего тебе нужно, потом ее закрыть
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #33061595
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marvanв Excel создаётся при первом обращении к этому объекту, и живёт до закрытия документаЭто утверждение не всегда верно.
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #33062416
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объект в VBA живет до тех пор, пока живы ссылки на него.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
VBA, время жизни объекта
    #37529688
Januuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Темный,
Почему тогда в этом случае:

Dim rst As ADODB.Recordset - объявление в разделе объявлений модуля. Должен быть виден во всех процедурах этого модуля.

Private Sub MySub1()
.....
Set rst=New ADODB.Recordset
rst.Open .....
End Sub
После выхода из процедуры ссылка на рекордсет не работает.
Private Sub MySub2()
.....
Здесь ссылка на rst
End Sub

???????????
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #37529725
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должна работать. Приведенного кода мало. К примеру, внутри процедуры переопределен rst
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #37529742
Januuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Если ходить отладчиком, то при выходе из процедуры1 rst становится Out of context, как и остальные объекты.
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #37529745
Januuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Januuu,
Возможно время жизни определяется где-то в этой строке?
Set rst=New ADODB.Recordset
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #37529802
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет.
Пишите реальный код, который не работает, урезанный до такого состояния, чтобы строк было минимум, а ошибка воспроизводилась
Тогда будем разбираться.
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #37529887
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверяйте :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public rs As ADODB.Recordset
Sub start()
Dim cn As ADODB.Connection
Dim SCon$, StrSql$
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
SCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName _
& ";Extended Properties=""Excel 8.0;HDR=Yes"";"
cn.Open SCon
If Not cn.State =  1  Then Exit Sub
StrSql = "SELECT *  FROM [Лист1$]"
rs.Open StrSql, cn, adOpenKeyset, adLockPessimistic
rs.MoveLast: rs.MoveFirst
End Sub

Код: plaintext
1.
2.
3.
Sub hhh()
MsgBox rs.RecordCount
End Sub

Чего нибудь должно быть на листе "Лист1"
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #37529977
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JanuuuЕсли ходить отладчиком, то при выходе из процедуры1 rst становится Out of context, как и остальные объекты. кстати, будет Out of context до входа в MySub2
...
Рейтинг: 0 / 0
VBA, время жизни объекта
    #37530109
Januuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос снимается. Ошибка действительно в коде
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / VBA, время жизни объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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