Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 10.07.2014
Сообщений: 3
1

Возобновить прерванный макрос

10.07.2014, 22:25. Показов 1431. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
Подскажите, как решить следующую проблему. По протоколу DDE в таблицу Excel скидываются данные, постоянно обновляются одни и те же ячейки. В это время работает макрос, обрабатывающий получаемые данные. Иногда случаются обрывы связи. Таблица сбрасывается (ячейки "опустошаются"), после чего макрос перестает работать.
Проблема в том, что через некоторое время данные снова начинают поступать, а макрос уже не работает. Человек при этом не присутствует. Как сделать, чтобы макрос не прекращал работать или же каким-либо образом возобновлял работу после восстановления обновления данных?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2014, 22:25
Ответы с готовыми решениями:

Как запустить прерванный цикл while?
//--------------------------------------------------------------------------- #include <vcl.h>...

Прерванный через 2 сек. формат WD 1000 Gb
Добрый день Уважаемые форумчане! Предыстория: попросили починить ноутбук (т.к. сам программист)....

Прерванный Chkdsk повредил файловую систему HDD
Здравствуйте! У меня возникла проблема: Во время скандиска мигнул свет и компьютер...

Не возобновить работу VM BOX
Здравствуйте, друзья. Не могу никак восстановить работу виртуальной машины на vm box. Суть в...

16
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
10.07.2014, 22:37 2
Нужно изменить тот макрос - чтоб при вылете не оставались отключенными события. Это догадка такая...
2
5605 / 1591 / 412
Регистрация: 23.12.2010
Сообщений: 2,382
Записей в блоге: 1
11.07.2014, 10:15 3
Нужно изменить тот макрос - ввести обход и проверку обрабатываемых данных на вид пусто или ошибка.
3
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
11.07.2014, 16:42 4
1. Дайте поковырять DDE'-шный элементарный (ни к чему не привязанный) пример ... интерес академический (изучал, но руки пока не дошли ...). ссылки на ZVI не катят )
2. Повесьте виндовый таймер - ваша программа будет работать вечно ) - даже в режиме дебага(включеного режима конструктора)
1
0 / 0 / 0
Регистрация: 10.07.2014
Сообщений: 3
11.07.2014, 20:44  [ТС] 5
StepInLik, а нельзя ли привести примерный код виндового таймера?
DDE-шный пример дать не могу, ибо все происходит без моего участия, из другой программы передаются значения в ячейки Экселя, с ними и работаю. Квалификация не позволяет пока работать с DDE напрямую.
0
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
14.07.2014, 16:51 6
Уменьшение размера активного окна, передвижение вдоль границ экрана
0
Заблокирован
14.07.2014, 17:12 7
Цитата Сообщение от Techno1d Посмотреть сообщение
Возобновить прерванный макрос
Пример где макрос выполняется и не останавливается
пока не произайдет смена листа

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit
 
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 
Private Sub Макрос32()
    Static Name$
    If Name = "" Then Name = ActiveSheet.Name
    On Error Resume Next
    Do: DoEvents: Sleep 100
        If ActiveSheet.Name <> Name Then Exit Do
    Loop
    MsgBox "Макрос закончил выполнение"
End Sub
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
14.07.2014, 17:36 8
Я бы не использовал Name - как бы чего не сбойнуло.... Пишите лучше например Name_
1
Антихакер32
14.07.2014, 17:47
  #9

Не по теме:

Цитата Сообщение от Hugo121 Посмотреть сообщение
Я бы не использовал Name - как бы чего не сбойнуло.... Пишите лучше например Name_
..а ну да, тогда лучше Name32

0
Hugo121
14.07.2014, 17:54
  #10

Не по теме:

Почему 32?

0
Заблокирован
14.07.2014, 18:10 11

Не по теме:

..да так, цифра понравилась :)


а если по теме, это называется вероятный конфликт имен
так как, если я объявил явно Name в процедуре
то и имя по умолчанию, тоже Name будет недоступно,
наверное это вы хотели сказать
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
14.07.2014, 18:29 12
Не знаю точно как этот конфликт называется, но конфликт точно есть
0
0 / 0 / 0
Регистрация: 10.07.2014
Сообщений: 3
14.07.2014, 22:09  [ТС] 13
StepInLik, благодарю! попробую прикрутить
0
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
15.07.2014, 10:20 14
Обратите внимание на то, что после запуска таймера - остановить его можно только установкой маркера (см. функцию). После того как таймер отработал и увидел наличие маркера - он снимается с выполнения.
Нужно понимать, что любые изменения функции таймера или ряда используемых ею - недопустимы при работе таймера т.к. если в процессе работы таймера в одной из функций будут ошибки (в ходе редактирования строк кода) - таймер остановится в режиме указания ошибки (с желтой подсветкой строки) и код со всем экселем вылетят.
Т.е.
1. работающий код таймера не должен содержать ошибок и не может быть оттестирован пошагово в каком-либо режиме дебага
2. перед тем как продолжить редактировать код - надо установить маркер и лишь после остановки всех таймеров - приступать к редактированию
Штука очень интересная, полезная и довольно сильная (работает даже в режиме конструктора), - но! и достаточно сложная с т.зрения создания и совершенствования.
0
Антихакер32
15.07.2014, 11:22
  #15

Не по теме:

Вообщето я выложил самый элементарный вариант
вечно-работающего макроса, с пропуском всех ошибок..
но если это вы не могли прикрутить, тогда также попрошу
модеров снести мой пост, дабы не светить сдесь бесполезным офтопом

Добавлено через 2 минуты
PS, пользователю который отказывается от помощи вдвойне неприятно помогать
есть статья, об этом на нашем замечательном форуме...

0
StepInLik
15.07.2014, 11:45
  #16

Не по теме:

Уважаемый коллега, Антихакер32. Мне кажется ваши эмоции излишние.
Пользователь вправе выбрать из ряда предложенных вариантов решения нужный ему. Тем более, что они совершенно разного порядка и решают совершенно разные задачи. Ваш вариант - обеспечивает непрерывное выполнение один раз запущенной программы, а предложенный мною - обеспечивает возможность ПЕРЕзапуска остановленной программы (не важно по каким причинам - аварийным (после полной остановки интерпритатора), умышленным ...). Они дополняют друг друга и могу быть использованы вместе в одном коде.
Поверьте ... не знаю как в классическом VB, но VBA выкидывает такие фортели, когда и после On Error Resume Next - полностью либо вылетает с выполнения (когда-то с таким встречался - происходит аналог отработки End), либо выдает окно ошибки (если есть академический интерес - могу попробовать воспроизвести пример)

1
Антихакер32
15.07.2014, 11:55     Возобновить прерванный макрос
  #17

Не по теме:

Все понятно, извиняюсь за эмоции :), я уже говорил
что основные алгоритмы я понял, но не мог прочесть Ваш файл
и з в и н я ю с ь

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.07.2014, 11:55

Как возобновить вывод программы
По ssh я удаленно подключаюсь к серверу, запускаю на нем программу непрерывно выводящую информацию...

Созданый процесс приостановить возобновить
Добрый день всем. Я студент университеты и сейчас мы начали разбор полетов по процессам. наше...

Возобновить работу прерванного процесса
Доброго времени суток. Вопрос следующий. Есть задание: Написать скрипт, который контролирует...

Как возобновить просмотр сначала?
В матрице размером NxM упорядочить строки матрицы по возрастанию средних геометрических значений...

Как возобновить работу функции
Пишу небольшую программу в институт - надо сделать элементарный шифровщик файлов. Среда разработки...

Как возобновить отправку формы
я запрещаю отправку формы по какой либо причинам Вот код: if(res.indexOf(true)!== -1){ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru