Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2010, 09:12   #1
gsg
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 108
По умолчанию ячейка, в которой произошло изменение

Здравствуйте.

Насколько я понимаю, есть объект Target, который решает данную проблемму, если код записан в модуле листа. А как получить ссылку на подобную ячейку, если код записан не в листе? Можно ли передать свойства Target из модуля листа в основной модуль?
-Возьмите лучших их лучщих!
-Лучшие из лучших зализывают раны...
-Тогда, возьмите лучших из худших!
gsg вне форума Ответить с цитированием
Старый 28.12.2010, 09:32   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Можно ли передать свойства Target из модуля листа в основной модуль?
Да, можно.

В модуль листа:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    МакросОтслеживанияИзменений Target
End Sub
В стандартный модуль:
Код:
Sub МакросОтслеживанияИзменений(ByRef ra As Range)
    MsgBox "Изменился диапазон: " & ra.Address
End Sub
Пример в файле: http://excelvba.ru/XL_Files/Sample__...__11-32-47.zip
EducatedFool вне форума Ответить с цитированием
Старый 28.12.2010, 09:46   #3
gsg
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 108
По умолчанию

несовсем точно сформулировал вопрос: нужно передать из листа в модуль, находящийся в PERSONAL.xls. Ни один из моих вариантов написания ссылок типа

Код:
run "personal.xls!МакросОтслеживанияИзменений"
не подошел...
-Возьмите лучших их лучщих!
-Лучшие из лучших зализывают раны...
-Тогда, возьмите лучших из худших!
gsg вне форума Ответить с цитированием
Старый 28.12.2010, 10:40   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Можно с использованием классов перехватывать события приложения и его объектов из любой книги, в том числе и из PERSONAL.xls

http://www.programmersforum.ru/showthread.php?t=45647

Цитата:
Надстройка, будучи загруженной вместе с Excel, способна перехватывать события активации листов и ячеек всех открытых книг.
Достаточно правильно прописать этот код в надстройке.

Потребуется создать модуль класса с подобным кодом:

Public WithEvents AppEv As Application

Private Sub AppEv_NewWorkbook(ByVal WB As Workbook)
msgbox "Создана новая книга excel"
End Sub

Private Sub AppEv_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox "Изменилось выделение на листе " & Sh.Name & " в книге " & Sh.Parent.Name
End Sub


Пример кода можно найти здесь:
http://yandex.ru/yandsearch?clid=145...ation&lr=11162
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что произошло? MyLastHit Общие вопросы Delphi 18 24.05.2014 05:30
как узнать произошло ли нажатие на кнопку в чужом окне(приложении) Dim969 Общие вопросы C/C++ 1 18.12.2010 15:05
Как приложению определить, что произошло переключение? wr_vu Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 05.10.2010 04:12
Ячейка с текстом, ячейка без текста. segail Microsoft Office Excel 5 16.09.2009 21:55
Защищаемая ячейка hamlook Microsoft Office Excel 4 15.06.2009 21:31