Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с программой для Excel

6.0K
22 ноября 2006 года
grishkov
14 / / 25.08.2004
Добрый день!

Передо мной стоит такая вот задача.

Есть таблица, которая обновляется в реальном времени каждые n секунд. Нужно сделать макрос, который бы также в реальном времени отслеживал изменения в этой таблице и выводил лог обо всех изменениях на другой лист. Лог должен вестись, пока не будет нажата нужная кнопка.

Можно ли в экселе сделать бесконечный цикл, который бы работал до нажатии кнопки. Я попытался его сделать, но когда мой макрос работает, то в это время нельзя производить никаких манипуляций с экселем. Например, нельзя нажимать кнопки, редактировать информацию и т.д.

Пожалуйста, помогите советом. Может есть какой-то стандартный способ работы с такими задачами.
267
22 ноября 2006 года
Cutty Sark
1.2K / / 17.10.2002
У тебя есть два пути:

Первый - использовать события. Создаёшь в модуле нужного листа процедуру:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
....
End Sub

и в ней обрабатываешь любые измененения листа. Чтобы была возможность включать/выключать это дело - первое действие в этой процедуре будет проверка состояния галочки вести-не вести лог.

Второй путь. Запускать каждые К секунд самому макрос с обработкой.
Это делается с помощью такой команды:
Application.OnTime EarliestTime:=Now+K/86400, Procedure:="MySub"

Когда ты начинаешь вести лог - ты выполняешь эту команду.
А дальше процедура MySub будет после внесения в лог всех изменений в конце устанавливать запуск себя самой (если лог ещё нужно продолжать вести).

У каждого из вышеперечисленных способов есть свои плюсы и минусы.
Скажи-ка, а каким образом в Экселе будут появляться данные?
6.0K
23 ноября 2006 года
grishkov
14 / / 25.08.2004
Я не совсем понял, что делает процедура в первом варианте, это какая-то стандартная функция для обработки событий на листе, которая вызывается как-то по особому? Какой в нее передется параметр и кто его передает?

Второй вариант наверное должен пройти. Попробую сегодня его реализовать.

Но все равно, хотелось бы узнать ответы про первый :)

Данные в эксель будут попадать через связь с внешними данными.
263
24 ноября 2006 года
koltaviy
816 / / 16.12.2004
[quote=Cutty Sark]У каждого из вышеперечисленных способов есть свои плюсы и минусы.[/quote]
ИМХО, лучше использовать все-таки первый вариант..
[quote=grishkov]Я не совсем понял, что делает процедура в первом варианте, это какая-то стандартная функция для обработки событий на листе, которая вызывается как-то по особому? Какой в нее передется параметр и кто его передает?[/quote]
Заходишь в Excel - жмешь Alt+F11(попадаешь в VBA) - в Project Explorer'e щелкаешь на листе, где будут производится изменения(Project Explorer, по умолчанию, в левом верхнем углу). Откроется модуль листа.. Сверху от модуля появится два выпадающих списка - в одном выбираешь Worksheet, в другом-Change.
Параметр Range обозначает диапозон ячеек, который был изменен.. с ним и работаешь:)
Данное событие, из названия, будет вызываться, когда в ячейках листа произошли какие-то изменения..
А вообще тебе надо почитать литературу или даже тот же родной help и узнать чо такое события!!!
267
26 ноября 2006 года
Cutty Sark
1.2K / / 17.10.2002
Цитата: koltaviy
ИМХО, лучше использовать все-таки первый вариант..



Это зависит от контекста задачи. Не бывает никаких абсолютных истин. :)

Цитата: grishkov

Данные в эксель будут попадать через связь с внешними данными.


А не через ДДЕ ли? Для ДДЕ есть третий, самый удобный путь.

Цитата: koltaviy

А вообще тебе надо почитать литературу или даже тот же родной help и узнать чо такое события!!!


Подпишусь под каждым словом! Уважаемый grishkov, выполняйте!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог