|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.02.2017, 08:57 | #1 |
Пользователь
Регистрация: 03.05.2012
Сообщений: 10
|
Фоновое выполнение макроса
Добрый день! Подскажите, возможно ли запускать макрос так, чтобы Excel оставался доступным для работы?
Есть макрос, который открывает файл (примерно 13Мб), работает там с большим массивом данных и снова его сохраняет. Все это занимает некоторое время. Есть возможность во время работы макроса продолжать работать с Excel в посторонних файлах, открывать новые? А макрос путь потихоньку работает с низким приоритетом в фоне и не мешает. Пробовал поиск, но либо не то, либо я не понимаю, что нашел))) |
28.02.2017, 09:35 | #2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Макрос запускать в отдельном процессе.
Открывать файлы и работать в другом. С открытием придётся потрудится, чтоб файлы открывались в нужном процессе. Но может проще оптимизировать тот макрос, чтоб он работал не время, а секунды?
webmoney: E265281470651 Z422237915069 R418926282008
|
28.02.2017, 10:36 | #3 |
Пользователь
Регистрация: 03.05.2012
Сообщений: 10
|
Оптимизировать макрос можно только в одном - заменив сортировку пузырьком более быстрым методом. Остальное вряд ли - только если менять логику работы, чего не хочется. Не знаю, много или мало считается - но 1500 строк в макросе. Достаточно разношерстные операции, много конкретных ячеек и диапазонов.
Про фоновое выполнение интересно еще и для собственного развития. Но если это ОЧЕНЬ сложно... Т.е. я так понимаю, средствами самого VBA никак, и надо использовать внешние системные функции? |
28.02.2017, 12:50 | #4 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
13Мб - это повод для медленной работы
а 1500 - строк это скромное число, обработка такого количества данных обычно происходит моментально
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
28.02.2017, 12:54 | #5 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Как я понял - 1500 строк кода
А значит там селекты, активации, и даже может быть много много SmallScroll... Честно - не хочется уже смотреть...
webmoney: E265281470651 Z422237915069 R418926282008
|
28.02.2017, 13:30 | #6 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
эт точно
разобрать 1500 строк грамотно написанного кода - вполне допустимо, а разбирать 1500 строк склеенных из записей макрорекордера - это неблагодарное занятие и, однозначно, удовольствия от этого не получишь...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
28.02.2017, 13:52 | #7 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Off//
Кстати один из таких моих самых первых кодов с селектами и активациями, и даже может с SmallScroll работал у коллеги довольно долго, даже наверное пока задача не отпала. И оптимизировать не просил (а я и не рвался особо) - говорит завораживает и успокаивает Потому что я там по неопытности и обновление экрана ещё не отключал.
webmoney: E265281470651 Z422237915069 R418926282008
|
28.02.2017, 14:16 | #8 |
Пользователь
Регистрация: 03.05.2012
Сообщений: 10
|
Я и не прошу в коде разбираться (сам с трудом отслеживаю уже), я про процесс выполнения макроса спрашивал))) Может хотя бы ссылку дадите (я пытался искать), или названия функций (или что там должно быть). Или... я правильно понимаю, что средствами самого VBA никак, и надо использовать внешние системные функции?
PS> Селекты и активации я использовал 5 лет назад, и тоже нравилось смотреть)) Сам макрос не из макрорекодера, вручную набирал(( Просто действий много и не с одном листом, не с простой заменой чисел. Сама логика(методика) обсчета сложная и специфичная. Никаких активаций и прочего (SmallScroll не знаю даже), только чтение в массив, большая работа с ним и запись обратно (типа Workbooks(FN).Worksheets(NS).Range( "A10:EW1017").Value = Gf). Ну и обращения к конкретным ячейкам с итоговыми значениями. Но по времени они не являются определяющими. Основное время - открытие, сохранение файлов и, конечно же, работа с массивами в памяти. Последний раз редактировалось andbrother; 28.02.2017 в 14:18. |
28.02.2017, 14:46 | #9 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Вы можете попробовать запустить 2-й (и сколько угодно еще) экземпляр Excel (это не вторая, третья книга открытая в Excel - я говорю именно о втором экземпляре программы загруженном в память, в ХР это точно работало)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
28.02.2017, 18:40 | #10 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
1) запускаем новую копию Excel
Обычно это удаётся через Пуск - Программы - Microsoft Excel 2) видим, что у нас запустился еще один Excel теперь у вас запущено 2 Excel, никак между собой не связанных 3) в одном запускаем макрос, в другом занимаемся своими делами |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Остановить выполнение макроса | Svetofor-ed | Microsoft Office Excel | 1 | 08.09.2014 10:52 |
Выполнение макроса PowerPoint | Vladislava-smile | Microsoft Office Excel | 0 | 23.05.2014 03:00 |
Выполнение макроса при фильтре | REztor | Microsoft Office Excel | 3 | 31.12.2013 23:23 |
Повторное выполнение макроса | Jaroslav | Microsoft Office Excel | 3 | 26.07.2009 10:12 |
Выполнение макроса во всех листах | Bu$ter | Microsoft Office Excel | 18 | 14.11.2008 14:34 |