Excel, Событие на добавление строки

Программирование на Visual Basic for Applications
Зелёный
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 25.06.2003 (Ср) 15:52
Откуда: Russia

Excel, Событие на добавление строки

Сообщение Зелёный » 26.06.2003 (Чт) 14:19

Каое событие в Excel обрабатывать на добавление строки?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 26.06.2003 (Чт) 14:30

Worksheet_SelectionChange(ByVal Target As Range)

Зелёный
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 25.06.2003 (Ср) 15:52
Откуда: Russia

Сообщение Зелёный » 26.06.2003 (Чт) 14:40

На добавление строки это событие не обрабатывается, к сожалению... :(

Зелёный
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 25.06.2003 (Ср) 15:52
Откуда: Russia

Сообщение Зелёный » 26.06.2003 (Чт) 15:00

Как вообще мне отловить момент добавление строки или момент после добавление строки (ну или момент до добавления строки)? Мне надо что-то вроде cобытий BeforeAddRow or AddRow or AfterAddRow

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 26.06.2003 (Чт) 16:14

А простой Change? Должен же он вызваться.

Зелёный
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 25.06.2003 (Ср) 15:52
Откуда: Russia

Сообщение Зелёный » 26.06.2003 (Чт) 16:26

У меня и простой Change не отлавливает момент добавления строки

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 26.06.2003 (Чт) 16:30

Тогда Workbook_SheetChange

И проверь, разрешены ли у тебя макросы.

Зелёный
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 25.06.2003 (Ср) 15:52
Откуда: Russia

Сообщение Зелёный » 26.06.2003 (Чт) 16:38

Макросы разрешены. Но нет реакции на добавление строки в Workbook_SheetChange
А вот на удаление работает, но мне надо на AddRow

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 26.06.2003 (Чт) 16:49

Что то значит криво. У меня работают все три.

Зелёный
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 25.06.2003 (Ср) 15:52
Откуда: Russia

Сообщение Зелёный » 26.06.2003 (Чт) 16:59

Похоже на то

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 27.06.2003 (Пт) 8:58

2Зелёный а офис у тебя какой скорей всего эта фигня с отловом таких событий творится только в xp в 2000 и ниже такого походу нет
Ничто так не ограничивает полёт мысли программиста, как компилятор

Зелёный
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 25.06.2003 (Ср) 15:52
Откуда: Russia

Сообщение Зелёный » 27.06.2003 (Пт) 9:24

У меня Вындоуз 2000 Про и Офис 2000

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 27.06.2003 (Пт) 9:36

значит увы, покрайней мере у меня никак не получилось получить событие на добавление
зы может тебе стоит защитить лист и добавить свои кнопки на добавление или удаляй ВСЕ стандартные кнопки добавления и заменяй их своими
Ничто так не ограничивает полёт мысли программиста, как компилятор

Зелёный
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 25.06.2003 (Ср) 15:52
Откуда: Russia

Сообщение Зелёный » 27.06.2003 (Пт) 9:49

зы может тебе стоит защитить лист и добавить свои кнопки на добавление или удаляй ВСЕ стандартные кнопки добавления и заменяй их своими

Собственно, этим я сейчас и занят...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.06.2003 (Пт) 9:52

Можно попробовать определить свою процедуру с тем же именем, что и стандартная. Т.е. если например при вставке строки вызывается встроенная процедура "InsertNewRow", то попробуй создать глобальную процедуру с именем "InsertNewRow".
В этом случае, когда пользователь попытается вставить новую строку (с панели инструментов, через основное или контекстное меню или с помощью "горячих клавиш"), то будет вызвана твоя процедура.
А уже в ней ты будет делать необходимую обработку, а затем вставлять строку.

Проблема в том, что я не знаю, как называется встроенная функция вставки строки, "InsertNewRow" я написал только для примера. В Word проще, там при создании новой кнопки на панели инструментов можно выбрать группу "Все команды" и посмотреть их название.
Lasciate ogni speranza, voi ch'entrate.

Зелёный
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 25.06.2003 (Ср) 15:52
Откуда: Russia

Сообщение Зелёный » 27.06.2003 (Пт) 9:57

alibek, можно попробовать.
Надо только название этой процедуры узнать, конечно

SergeySV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 124
Зарегистрирован: 17.04.2003 (Чт) 14:39
Откуда: Россия, Москва

Сообщение SergeySV » 27.06.2003 (Пт) 10:49

alibek писал(а):Можно попробовать определить свою процедуру с тем же именем, что и стандартная. Т.е. если например при вставке строки вызывается встроенная процедура "InsertNewRow", то попробуй создать глобальную процедуру с именем "InsertNewRow".
В этом случае, когда пользователь попытается вставить новую строку (с панели инструментов, через основное или контекстное меню или с помощью "горячих клавиш"), то будет вызвана твоя процедура.
А уже в ней ты будет делать необходимую обработку, а затем вставлять строку.

Проблема в том, что я не знаю, как называется встроенная функция вставки строки, "InsertNewRow" я написал только для примера. В Word проще, там при создании новой кнопки на панели инструментов можно выбрать группу "Все команды" и посмотреть их название.


Прикольно, каждый день узнаешь что-нибудь новое, действительно в Word такая замена работает.
Это похоже на перегрузку методов класса. Но тут такой еще момент, а как вызвать из своей глобальной функции, родную Word'ую...? (Ведь строку-то кто должен в итоге вставить, а не только радоваться получению этого события). Есть какие-нибудь мысли на этот счет?
Главное двигаться не быстрее, чем думает твоя голова.

SergeySV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 124
Зарегистрирован: 17.04.2003 (Чт) 14:39
Откуда: Россия, Москва

Сообщение SergeySV » 27.06.2003 (Пт) 11:07

Блин, дурак. Доперло наконец. Все достаточно просто.

Эти процедуры (которые мы видим в Word -> Все команды) - это методы объектов.

Например Copy - метод объекта Selection. После перекрытия его своей глобальной процедурой, родный вызываем просто - Selection.Copy (смотреть все это лучше через Object Browser)

А по поводу Excel, ща поищем... :)
Главное двигаться не быстрее, чем думает твоя голова.

SergeySV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 124
Зарегистрирован: 17.04.2003 (Чт) 14:39
Откуда: Россия, Москва

Сообщение SergeySV » 27.06.2003 (Пт) 11:32

А Excel че-то вообще не позволяет перекрывать свои методы :(:(:(
У меня с ним ничего не получилось.... :(

После долгого общения с Word и Excel у меня сложилось такое впечатление, что Ecxel и Word разработан разными группами программистов, и только немного потом привели к одному виду, а начинка ....
Главное двигаться не быстрее, чем думает твоя голова.

Зелёный
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 25.06.2003 (Ср) 15:52
Откуда: Russia

Сообщение Зелёный » 27.06.2003 (Пт) 11:38

Сейчас решаю эту задачу методом, озвученным corgi

SergeySV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 124
Зарегистрирован: 17.04.2003 (Чт) 14:39
Откуда: Россия, Москва

Сообщение SergeySV » 27.06.2003 (Пт) 13:35

У меня Win98+Office Xp событие (объекта WorkSheets) Change нормально все отслеживает. Тока вот трудно понять - удаляет пользователь строку или добавляет или еще что... Хотя мысль есть, мона свои номера строкам поставить(столбец скрыть) и как Excel обновлять их при каждом измнении - хотя тоже, очень геморойно... :(
Главное двигаться не быстрее, чем думает твоя голова.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 32

    TopList