31

Есть ли способ ограничить доступ к процессору в Excel при работе? У меня есть скрипт VBA, который вычисляет кучу формул гигантского массива. Весь расчет занимает, может быть, 20 минут, используя 100% моего процессора, но я не могу использовать свою машину в это время и предпочел бы, чтобы он работал в фоновом режиме при 50% загрузки процессора, чтобы я мог продолжать делать другие вещи. Какие-либо предложения?

Моя ОС - Windows 7 Enterprise, 64-разрядная, а версия Excel - 2007-32-разрядная.

9 ответов9

54

Если функция VBA вызывается из нескольких формул или если ваш сценарий генерирует или форсирует пересчет нескольких формул, то в этом случае обязательно должна использоваться функция многопоточных вычислений Excel. Соответственно, это будет либо запускать несколько экземпляров вашей функции VBA для каждой формулы, либо пересчитывать несколько ячеек одновременно, пока ваш скрипт vba работает в одном потоке.

Вы можете ограничить количество потоков, используемых Excel для пересчета формул в Excel Options ... Продвинутая вкладка... Раздел формул.

27

Вместо понижения приоритета, попробуйте изменить сходство в диспетчере задач. Если у вас более 1 процессора, вы можете ограничить количество процессоров, которые Excel будет использовать. Это освободит другие процессоры для работы над другими вещами.

Щелкните правой кнопкой мыши Excel на вкладке «Процессы» и выберите «Установить сходство». Выберите ЦП, где вы хотите, чтобы Excel работал.

7

Вы можете попытаться снизить приоритет процесса Excel, открыв диспетчер задач, перейдя на вкладку "Подробности" или "Процессы" (в зависимости от версии Windows), щелкнув правой кнопкой мыши по процессу Excel.exe и выбрав более низкий приоритет Это должно дать больше процессорного времени другим процессам.

3

Есть функции Sleep и Wait, доступные в VBA или через объявление. Тем не менее, "чрезмерно упрощенное правило большого пальца" состоит в том, чтобы никогда не использовать Sleep(). (Google "Никогда не используйте sleep ()" Программирование ")

Страница документа для заявки.Подождите ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Обратите внимание, что режим «Сон и ожидание» приведет к тому, что Excel перестанет отвечать на запросы в течение указанного вами времени, и это может привести к «срыву поезда».

Если в ваших вычислениях используется какой-то цикл, то один из способов справиться с этим для вашей конкретной цели (лишиться времени на вычисление доступности ЦП) - это создать специальную собственную функцию ожидания, которая, например, циклически повторяет DoEvents () в течение 1 секунды и потом возвращается.

DoEvents в основном говорит вашему коду / интерпретатору отказаться от времени для ОС и т.д. Это определенно заставит ваш код занять больше времени. Это также может позволить вам редактировать рабочий лист во время расчета, поэтому ваш пробег может варьироваться. Тестовое задание.

См., Например, https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba

2

Несколько лет назад был задан похожий квестин, в котором есть решение:существуют ли решения, которые могут ограничить использование процессором ЦП?

Процесс Tamer работает для Windows 7. http://www.donationcoder.com/Software/Mouser/proctamer/

0

Добавьте следующие 2 строки где-то рядом с началом вашего макроса:

'Turn off screen updating

 Application.ScreenUpdating = False

И эти 2 строки в конце:

'Turn screen updating back on

 Application.ScreenUpdating = True

Тогда у вас будет меньше работы, пока вы будете заниматься чем-то другим.

0

У меня была такая же проблема, когда на моем ноутбуке было 4 ГБ памяти. Как только я получил обновление до 16 ГБ, проблема прекратилась. Просто еще одно возможное решение.

-2

Если вы используете 32-битный офис в 64-битной ОС, вы должны использовать это приложение:http://www.ntcore.com/4gb_patch.php

Это приложение позволит Excel или любой другой офис 32bit использовать Мо

-5

Используйте OpenOffice или LibreOffice: его возможности сценариев гораздо эффективнее, чем у MS, и вы можете буквально иметь "газ" в своих вычислениях.

РЕДАКТИРОВАТЬ: Почему downvote? взгляните на руководство и убедитесь сами. Вы можете конвертировать ваши расчеты в Java и просто отлично со всей дроссельной силой JVM, например.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .