Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите с макросом в EXCEL  (Прочитано 20158 раз)
0 Пользователей и 1 Гость смотрят эту тему.
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
Команда клуба

ru
Offline 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_
Помогающий

ua
Offline 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 » 

Цитата: ysv_
Цитата

anval, VBA - это полбеды. Все, о чем до сих пор шла речь, относится скорее к объектной модели Excel. В самом VBA нет ни WorkSheet, ни Range.

Позвольте не согласится. В VBA есть и то и другое. Вообще справка по VBA вполне подходит для целей автоматизации Excel'я.

Не позволю. VBA - это скриптовый язык для записи макросов, объектная модель которого к самому Excel не имеет ни малейшего отношения. Не верите - попробуйте вызвать VBA в Word и поработать там с WorkSheet. Ну или, к примеру, в MS Visio. Если получится - признаю, что совершенно не знаю VBA. Нет - не обессудьте, вывод сделаю противоположный.
Цитата: ysv_
Цитата

... поскольку даже в русской версии Excel вся документация по программированию оставлена в оригинале, и никуда без него не двинешься, увы.

Опять не верно - у меня стоит Excel и дока к VBA - на русском Ага

И что, таки файл VBAXL10.CHM перевели? Можно полюбопытствовать, что за версия такая? Не иначе спецпоставка какая-то, отродясь его на русском не давали.
Записан
Alf
Гость
« Ответ #12 : 20-04-2004 09:15 » 

Цитата: anval
И где надо смотреть эту объектную модель 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_
Помогающий

ua
Offline 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 » 

Жаль, что все на английском, а я уж обрадовалась, что хоть где-то в природе существуе это описание на русском.Может, кто-нибудь все-таки встречался хоть с каким-нибудь, пусть даже не очень профессиональным, переводом? Откликнитесь!
Записан
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #15 : 25-04-2004 13:31 » 

Цитата

Для начала следует завести подпрограмму, которая будет реагировать на изменение содержимого рабочего листа:


Ой, а зачем все так сложно?

Ведь можно создать кнопку "Обновить" при нажатии которой  выполняются определенные двйствия.

А проверять каждое изменение страницы WorkSheet не совсем оправдано, т.к. скорее всего будет существовать ряд ячеек изменение которых не должно вызывать подпрограмму, а на обработку её будет тратиться лишнее время...
Цитата

я уж обрадовалась, что хоть где-то в природе существуе это описание на русском.


А ты книги смотреть не пробовала, я например видела книгу "Создание макросов в Excel" и вообще если поискать в книгах довольно таки много информации по макросам.
Записан

Стену можно пробить только головой. Все остальное орудия.
Alf
Гость
« Ответ #16 : 25-04-2004 18:09 » 

Все так сложно потому, что anval спрашивает:
Цитата: anval
Как должен выглядеть макрос,  который выполняет некоторые действия, как только  в какай-то определенной ячейке(напр, А23), поменялось ее содержимое. Если это сложно, для начала можно упростить – как должен выглядеть макрос,  который выполняет некоторые действия, как только  в какую-то определенную ячейку(напр, А23), ввели значение. Спасибо

Не хочет человек жать никакие лишние кнопки, хочет, чтобы все автоматически работало. И имеет полное право, для того и компьютер покупали. А если будем экономить "лишнее время" на обработку, он так разленится, что мы за него еще и считать в столбик начнем.[/b]
Записан
anval
Гость
« Ответ #17 : 26-04-2004 05:37 » 

Да, Aif говорит верно - ну не хочет жать человек на кнопку("человек"-это постановщик задачи). А кнопка - это первое, что я ему сделала до того, как сюда с вопросом обратилась.
Книги смотрела, даже нашла что-то, как мне показалось, полезное, но пока искала в других магазинах, нету ли лучшего, эта исчезла, так что ищу теперь дальше. Но в справочной системе своя прелесть.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines