powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Excel: как отловить события созданной переменной?
13 сообщений из 13, страница 1 из 1
VBA Excel: как отловить события созданной переменной?
    #35565456
garmonist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Я в в модуле объявляю переменную:
Код: plaintext
Dim wbNew As Workbook

Потом в процедуре создаю книгу и присваиваю этой переменной значение новой книги:
Код: plaintext
1.
2.
Лист1.Copy
Set wbNew = Application.ActiveWorkbook

Мне нужно перехватить событие закрытия этой книги крестиком именно в исходном файле, где я пишу скрипт (это надстройка)... Подскажите, пожалуйста, каким образом это можно сделать.

Заранее благодарен.
...
Рейтинг: 0 / 0
VBA Excel: как отловить события созданной переменной?
    #35565475
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
Dim WithEvents wbNew As Workbook

Prvate Sub wbNew_BeforeClose(Cancel as Boolean)
...
Рейтинг: 0 / 0
VBA Excel: как отловить события созданной переменной?
    #35565558
garmonist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

"Dim WithEvents" можно прописать только в модуле класса. Если я прописываю в модуле класса
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim WithEvents wbNew As Workbook


Private Sub wbNew_BeforeClose(Cancel As Boolean)

MsgBox "111"

End Sub

а из обычного модуля убираю

Код: plaintext
Dim wbNew As Workbook

то в обычном модуле VBA ругается при использовании wbNew.

А если не убираю, то wbNew_BeforeClose не срабатывает
...
Рейтинг: 0 / 0
VBA Excel: как отловить события созданной переменной?
    #35565769
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На уровне модуля вообще-то не пишут Dim, а либо Private, либо Public. Можно почувствовать разницу. Вы с ходу вспомните что на уровне модуля Dim: - Private или Public?
...
Рейтинг: 0 / 0
VBA Excel: как отловить события созданной переменной?
    #35565855
garmonist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VladConnНа уровне модуля вообще-то не пишут Dim, а либо Private, либо Public. Можно почувствовать разницу. Вы с ходу вспомните что на уровне модуля Dim: - Private или Public?Я извиняюсь, но ничего не понял...
...
Рейтинг: 0 / 0
VBA Excel: как отловить события созданной переменной?
    #35565863
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На уровне модуля вы никак не узнаете о закрытии книги. Объявляйте wbNew в классе или в объекте экселя.
...
Рейтинг: 0 / 0
VBA Excel: как отловить события созданной переменной?
    #35565870
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garmonist VladConnНа уровне модуля вообще-то не пишут Dim, а либо Private, либо Public. Можно почувствовать разницу. Вы с ходу вспомните что на уровне модуля Dim: - Private или Public?Я извиняюсь, но ничего не понял...

То-то и оно... Почитайте о "scope of variables".

Успехов
...
Рейтинг: 0 / 0
VBA Excel: как отловить события созданной переменной?
    #35565874
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnНа уровне модуля вообще-то не пишут Dim, а либо Private, либо Public. Можно почувствовать разницу. Вы с ходу вспомните что на уровне модуля Dim: - Private или Public?Вообще-то пишут, если хотят. Никаких ограничений, за исключением психологических, для этого нет.
...
Рейтинг: 0 / 0
VBA Excel: как отловить события созданной переменной?
    #35565886
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyНа уровне модуля вы никак не узнаете о закрытии книги. Объявляйте wbNew в классе или в объекте экселя.

Вот именно. Antonariy, я позволю себе вмешаться на секундочку. Дело в том, что чтобы перехватить событие, его нужно иметь и иметь код внутри него. А это возможно в класс-модуле, но не в обычном модуле. На то классы и придумали (не только из-за этого, конечно). Поправь, если что не так.
...
Рейтинг: 0 / 0
VBA Excel: как отловить события созданной переменной?
    #35565890
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy VladConnНа уровне модуля вообще-то не пишут Dim, а либо Private, либо Public. Можно почувствовать разницу. Вы с ходу вспомните что на уровне модуля Dim: - Private или Public?Вообще-то пишут, если хотят. Никаких ограничений, за исключением психологических, для этого нет.

Пишут то пишут, но многие неосознанно, не догадываясь о последствиях. Имелось ввиду: вообще-то зубы чистят по утрам"
...
Рейтинг: 0 / 0
VBA Excel: как отловить события созданной переменной?
    #35565937
garmonist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VladConn, значит, надо в модуле переменную объявлять с помощью public. Спасибо, но на мой вопрос это не отвечает. Проблема остается.
...
Рейтинг: 0 / 0
VBA Excel: как отловить события созданной переменной?
    #35565967
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема остается, потому что не читаете:
AntonariyНа уровне модуля вы никак не узнаете о закрытии книги. Объявляйте wbNew в классе или в объекте экселя.
...
Рейтинг: 0 / 0
VBA Excel: как отловить события созданной переменной?
    #35565993
garmonist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyПроблема остается, потому что не читаете:
AntonariyНа уровне модуля вы никак не узнаете о закрытии книги. Объявляйте wbNew в классе или в объекте экселя.Понял, спасибо.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Excel: как отловить события созданной переменной?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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