| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование, связанное с MS Office > Определить, что данные закончили грузиться в лист |
| Автор: Voldemar2004 24.11.2010, 09:38 | ||
| Excel автозапускается из сторонней программы, открывается Лист1 и в него из массива из этой программы пишутся данные. Затем после того, как все данные загрузились, требуется автозапуск макроса для обработки в Excel. Сейчас делаю просто с помощью такой функции:
задержку перед запуском макроса секунд 10. А если все данные в Excel уже загружены были за 2 секунды ? Или они будут грузиться 1 минуту ? Есть способ определить, что если количество строк в Листе1 не меняется в течении 3 секунд, то делать автозапуск макроса ? Или вручную писать функцию ? |
| Автор: Voldemar2004 24.11.2010, 16:14 | ||||
Akina,
Это я уже догадался |
| Автор: Akina 24.11.2010, 16:27 | ||
Ясен пень надо! не хочешь? ну тогда предлагаю такой костыль: Делаем шаблон. В нём - макрос, который запускается при открытии книги. Если макрос обнаруживает на [Лист1] данные - он выполняет обработку, иначе просто завершается. Далее - программа открывает этот шаблон. Макрос срабатывает, данных нет, он тут же завершается. Программа заполняет лист данными из массива и сохраняет (SaveAs - дабы не поганить шаблон) файл на диск. И тут же открывает снова. Макрос опять срабатывает, обнаруживает данные и выполняет требуемые действия. |
| Автор: Voldemar2004 25.11.2010, 09:29 | ||
В сторонней программе пишу "END" в самый конец листа Excel, затем вызываю функцию:
если она вернула true, то сразу же запускаю макрос уже из Excel. |
| Автор: Akina 25.11.2010, 09:36 |
| Мда... 1) Зачем флаг? DataIsLoaded - такая же переменная, работай прямо с ней. 2) Do While Flag <> True А почему не Do While NOT Flag 3) If Cells(i, 1) = "END" Then Flag = True А почему не Flag = (Cells(i, 1) = "END") 4) Зачем организовывать свой цикл, если есть Range.Find? И почему не поместить твой "END" в самом начале, чтобы проверять ОДНУ ячейку с известным (А1, например) адресом? |
| Автор: Voldemar2004 25.11.2010, 09:47 | ||||||||||
Тоже самое, только записано по-другому. Тоже самое, только записано по-другому.
Откуда будет известен этот ?? Добавлено @ 09:53
|
| Автор: Akina 25.11.2010, 10:03 |
Сначала загружаются данные. А потом ставится признак. Но почему он ставится ПОСЛЕ загруженных данных? не по времени - по месту расположения... |
| Автор: Voldemar2004 25.11.2010, 10:46 | ||
Сверху шапка таблицы, количество данных каждый раз разное |
| Автор: Akina 25.11.2010, 10:51 |
Вот и убери в неё признак загрузки - она же статическая, адреса ячеек известны... скажем, после окончания загрузки данных делаешь шрифт в неиспользуемой ячейке жирным (или там зелёным). И проверять надо только этот параметр и только у этой (одной и с известным адресом) ячейки. |
| Автор: Voldemar2004 25.11.2010, 10:56 |
| Akina, ну улучшать и придумывать можно до бесконечности |
| Автор: Akina 25.11.2010, 11:03 |
| Ну не надо так не надо... мне-то что. |