anval
Гость
|
|
« : 16-04-2004 06:20 » |
|
Как должен выглядеть макрос, который выполняет некоторые действия, как только в какай-то определенной ячейке(напр, А23), поменялось ее содержимое. Если это сложно, для начала можно упростить – как должен выглядеть макрос, который выполняет некоторые действия, как только в какую-то определенную ячейку(напр, А23), ввели значение. Спасибо
|
|
|
Записан
|
|
|
|
Alf
Гость
|
|
« Ответ #1 : 16-04-2004 06:59 » |
|
Насколько мне известно, у ячейки или у диапазона ячеек нет возможности реагировать на события. Минимальный объект, способный обрабатывать события, - это WorkSheet. Вот что на этот счет говорит справочная система: Change Event Occurs when cells on the worksheet are changed by the user or by an external link.
Private Sub Worksheet_Change(ByVal Target As Range) Target The changed range. Can be more than one cell. Таким образом, следует перехватывать событие изменения листа в целом и смотреть, какие именно ячейки изменились (аргумент Target). Если нужные - соответственно реагировать.
|
|
|
Записан
|
|
|
|
Anonymous
Гость
|
|
« Ответ #2 : 16-04-2004 07:39 » |
|
Спасибо за реакцию. Если это не будет большой нагрузкой, напишите, как это можно сделать. Пока VB не владею, по-английски не читаю, а ответ хотелось бы дать.
|
|
|
Записан
|
|
|
|
anval
Гость
|
|
« Ответ #3 : 16-04-2004 07:40 » |
|
Спасибо за реакцию. Если это не будет большой нагрузкой, напишите, как это можно сделать. Пока VB не владею, по-английски не читаю, а ответ хотелось бы дать.
|
|
|
Записан
|
|
|
|
Dusk
Команда клуба
Offline
Пол:
Редкий, но веселый вид
|
|
« Ответ #4 : 16-04-2004 08:44 » |
|
Alf, я точно так же и думал, но Target возвращает не изменяемую ячейку, а записываемое значение... но как определить именно изменяемую ячейку я не нашел, поэтому сразу не ответил....
|
|
|
Записан
|
Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших Опыт - это то, что появляется сразу после того, как он был так необходим... Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
|
|
|
Alf
Гость
|
|
« Ответ #5 : 16-04-2004 08:47 » |
|
Для начала следует завести подпрограмму, которая будет реагировать на изменение содержимого рабочего листа: Private Sub Worksheet_Change)ByVal Target As Range: Как только содержимое какой-от области изменится, она будет вызвана, причем аргумент Range содержит измененные ячейки. Если допустимо одновременное изменение нескольких ячеек, задача становится немного сложнее. Тогда придется перебрать все ячейки диапазона Target (свойство Cells) и для каждой из них проверить координаты (свойства Row и Column). Проще, наверное, не получится. А справочной системы по объектной модели Excel на русском я не встречал. Так что придется обратиться за посторонней помощью, там еще много деталей придется выяснять, если нет опыта работы с Excel через COM.
|
|
|
Записан
|
|
|
|
Alf
Гость
|
|
« Ответ #6 : 16-04-2004 08:57 » |
|
Dusk, Target - это объект типа Range. Насколько я помню (а Excel не программировал уж года 4 этак), Value, т.е. значение ячейки, является свойством Range по умолчанию. Так что если полностью не квалифицировать свойство, то и получишь в результате значение.
|
|
|
Записан
|
|
|
|
anval
Гость
|
|
« Ответ #7 : 16-04-2004 11:23 » |
|
Спасибо еще раз за информацию. Что-то чуть-чуть становится яснее, а главное - то, что надо сначала изучить VBA.
|
|
|
Записан
|
|
|
|
Alf
Гость
|
|
« Ответ #8 : 16-04-2004 11:52 » |
|
anval, VBA - это полбеды. Все, о чем до сих пор шла речь, относится скорее к объектной модели Excel. В самом VBA нет ни WorkSheet, ни Range. А еще раньше придется все же выучить английский, поскольку даже в русской версии Excel вся документация по программированию оставлена в оригинале, и никуда без него не двинешься, увы.
|
|
|
Записан
|
|
|
|
anval
Гость
|
|
« Ответ #9 : 20-04-2004 05:15 » |
|
И где надо смотреть эту объектную модель EXCEL?Посмотрела сейчас в справке для EXCEL, нашла пару абзацев - как загрузить настройку для COM и больше ничего
|
|
|
Записан
|
|
|
|
ysv_
Помогающий
Offline
|
|
« Ответ #10 : 20-04-2004 06:43 » |
|
anval, VBA - это полбеды. Все, о чем до сих пор шла речь, относится скорее к объектной модели Excel. В самом VBA нет ни WorkSheet, ни Range.
Позвольте не согласится. В VBA есть и то и другое. Вообще справка по VBA вполне подходит для целей автоматизации Excel'я. ... поскольку даже в русской версии Excel вся документация по программированию оставлена в оригинале, и никуда без него не двинешься, увы.
Опять не верно - у меня стоит Excel и дока к VBA - на русском И где надо смотреть эту объектную модель EXCEL?Посмотрела сейчас в справке для EXCEL, нашла пару абзацев - как загрузить настройку для COM и больше ничего
Справку надо вызывать из редактора Visual Basic (Alt+F11).
|
|
|
Записан
|
|
|
|
Alf
Гость
|
|
« Ответ #11 : 20-04-2004 09:00 » |
|
anval, VBA - это полбеды. Все, о чем до сих пор шла речь, относится скорее к объектной модели Excel. В самом VBA нет ни WorkSheet, ни Range.
Позвольте не согласится. В VBA есть и то и другое. Вообще справка по VBA вполне подходит для целей автоматизации Excel'я. Не позволю. VBA - это скриптовый язык для записи макросов, объектная модель которого к самому Excel не имеет ни малейшего отношения. Не верите - попробуйте вызвать VBA в Word и поработать там с WorkSheet. Ну или, к примеру, в MS Visio. Если получится - признаю, что совершенно не знаю VBA. Нет - не обессудьте, вывод сделаю противоположный. ... поскольку даже в русской версии Excel вся документация по программированию оставлена в оригинале, и никуда без него не двинешься, увы.
Опять не верно - у меня стоит Excel и дока к VBA - на русском И что, таки файл VBAXL10.CHM перевели? Можно полюбопытствовать, что за версия такая? Не иначе спецпоставка какая-то, отродясь его на русском не давали.
|
|
|
Записан
|
|
|
|
Alf
Гость
|
|
« Ответ #12 : 20-04-2004 09:15 » |
|
И где надо смотреть эту объектную модель EXCEL?Посмотрела сейчас в справке для EXCEL, нашла пару абзацев - как загрузить настройку для COM и больше ничего Поищите файлы справки в том каталоге, куда установлен MS Office. У меня это C:\Program Files\Microsoft Office\OFFICE11\1049 (для MS Office 2003). Сам файл называется VBAXL10.CHM. Для других версий Office название может быть другим, но непременно VBAXL*.CHM Из самой справки Excel в принципе тоже есть туда лазейка, но не во всех версиях она реализована нормально, так что я предпочитаю вызывать справку напрямую. Кстати, приобрел недавно MSDN за январь 2004 и был приятно удивлен, увидев там документацию по объектным моделям приложений MS Office. Так что если попадется в продаже, настоятельно рекомендую. Или, если вдруг окажется, что ysv_ и правда досталась русскоязычная справка по Excel, попробуйте выпросить у него, файл не очень велик (меньше 2Мб).
|
|
|
Записан
|
|
|
|
ysv_
Помогающий
Offline
|
|
« Ответ #13 : 20-04-2004 12:00 » |
|
И что, таки файл VBAXL10.CHM перевели? Можно полюбопытствовать, что за версия такая? Не иначе спецпоставка какая-то, отродясь его на русском не давали.
Нет это я проехал :oops: Уже английский от русского отличить не могу :oops: Не позволю. VBA - это скриптовый язык для записи макросов, объектная модель которого к самому Excel не имеет ни малейшего отношения. Не верите - попробуйте вызвать VBA в Word и поработать там с WorkSheet. Ну или, к примеру, в MS Visio. Если получится - признаю, что совершенно не знаю VBA. Нет - не обессудьте, вывод сделаю противоположный
И будете правы. Не внимателен :oops: Все, о чем до сих пор шла речь, относится скорее к объектной модели Excel.
Вот ключевая фраза. Так оно и есть. Еще раз извиняюсь :oops:
|
|
|
Записан
|
|
|
|
anval
Гость
|
|
« Ответ #14 : 20-04-2004 12:48 » |
|
Жаль, что все на английском, а я уж обрадовалась, что хоть где-то в природе существуе это описание на русском.Может, кто-нибудь все-таки встречался хоть с каким-нибудь, пусть даже не очень профессиональным, переводом? Откликнитесь!
|
|
|
Записан
|
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #15 : 25-04-2004 13:31 » |
|
Для начала следует завести подпрограмму, которая будет реагировать на изменение содержимого рабочего листа:
Ой, а зачем все так сложно? Ведь можно создать кнопку "Обновить" при нажатии которой выполняются определенные двйствия. А проверять каждое изменение страницы WorkSheet не совсем оправдано, т.к. скорее всего будет существовать ряд ячеек изменение которых не должно вызывать подпрограмму, а на обработку её будет тратиться лишнее время... я уж обрадовалась, что хоть где-то в природе существуе это описание на русском.
А ты книги смотреть не пробовала, я например видела книгу "Создание макросов в Excel" и вообще если поискать в книгах довольно таки много информации по макросам.
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Alf
Гость
|
|
« Ответ #16 : 25-04-2004 18:09 » |
|
Все так сложно потому, что anval спрашивает: Как должен выглядеть макрос, который выполняет некоторые действия, как только в какай-то определенной ячейке(напр, А23), поменялось ее содержимое. Если это сложно, для начала можно упростить – как должен выглядеть макрос, который выполняет некоторые действия, как только в какую-то определенную ячейку(напр, А23), ввели значение. Спасибо Не хочет человек жать никакие лишние кнопки, хочет, чтобы все автоматически работало. И имеет полное право, для того и компьютер покупали. А если будем экономить "лишнее время" на обработку, он так разленится, что мы за него еще и считать в столбик начнем.[/b]
|
|
|
Записан
|
|
|
|
anval
Гость
|
|
« Ответ #17 : 26-04-2004 05:37 » |
|
Да, Aif говорит верно - ну не хочет жать человек на кнопку("человек"-это постановщик задачи). А кнопка - это первое, что я ему сделала до того, как сюда с вопросом обратилась. Книги смотрела, даже нашла что-то, как мне показалось, полезное, но пока искала в других магазинах, нету ли лучшего, эта исчезла, так что ищу теперь дальше. Но в справочной системе своя прелесть.
|
|
|
Записан
|
|
|
|
|