Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Медленная работа макросов на конкретном ноутбуке - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Медленная работа макросов на конкретном ноутбуке (Макросы/Sub)
Медленная работа макросов на конкретном ноутбуке
vereschetin Дата: Пятница, 06.10.2023, 11:50 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel LTSC MSO 16.0.14332
Приветствую форумчан. Суть проблема такова. Макросы значительно медленнее работают на конкретном ноутбуке. Макросы у меня простенькие, выполняется практически мгновенно везде кроме конкретного ноутбука.
Попробовал уже много что. Устанавливал разные версии офиса. Конкретно Office LTSC 2021 (6.0.14332.20400, 16.0.14332.20565), Office 365, Office 2019 (16.0.10827.20138). Отключал аппаратное ускорение графики.
Макросы лежат в персональной книге макросов, так что решение с включением папки в доверенные расположения не актуальна. У меня английская версия, так что не знаю как это точно называется в русской версии.
Ноутбук Huawei Matebook X Pro(2023). Для сравнения. На моем ноутбуке один конкретный макрос выполняется за 30 с. На компьютерах со схожим железом (конкретно i7-7700k и i5-8400) он выполняется мгновенно.
У i5-8400 стоит абсолютно такая же версия офиса, поставленная из этого же установочника. Даже на сильно более слабых ноутбуках исполнение макроса занимает секунды 2.


Денис
 
Ответить
СообщениеПриветствую форумчан. Суть проблема такова. Макросы значительно медленнее работают на конкретном ноутбуке. Макросы у меня простенькие, выполняется практически мгновенно везде кроме конкретного ноутбука.
Попробовал уже много что. Устанавливал разные версии офиса. Конкретно Office LTSC 2021 (6.0.14332.20400, 16.0.14332.20565), Office 365, Office 2019 (16.0.10827.20138). Отключал аппаратное ускорение графики.
Макросы лежат в персональной книге макросов, так что решение с включением папки в доверенные расположения не актуальна. У меня английская версия, так что не знаю как это точно называется в русской версии.
Ноутбук Huawei Matebook X Pro(2023). Для сравнения. На моем ноутбуке один конкретный макрос выполняется за 30 с. На компьютерах со схожим железом (конкретно i7-7700k и i5-8400) он выполняется мгновенно.
У i5-8400 стоит абсолютно такая же версия офиса, поставленная из этого же установочника. Даже на сильно более слабых ноутбуках исполнение макроса занимает секунды 2.

Автор - vereschetin
Дата добавления - 06.10.2023 в 11:50
igrtsk Дата: Пятница, 06.10.2023, 12:58 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 314
Репутация: 50 ±
Замечаний: 0% ±

Excel 2016
В первых строках макроса попробуйте отключить прорисовку станиц
[vba]
Код

Application.ScreenUpdating = False                    'отключаем обновление экрана для ускорения
[/vba]

И не забыть включить прорисовку перед завершением работы макроса
[vba]
Код

Application.ScreenUpdating = True                            'включаем обновление экрана
[/vba]


Инструктор по применению лосей в кавалерийских частях РККА
 
Ответить
СообщениеВ первых строках макроса попробуйте отключить прорисовку станиц
[vba]
Код

Application.ScreenUpdating = False                    'отключаем обновление экрана для ускорения
[/vba]

И не забыть включить прорисовку перед завершением работы макроса
[vba]
Код

Application.ScreenUpdating = True                            'включаем обновление экрана
[/vba]

Автор - igrtsk
Дата добавления - 06.10.2023 в 12:58
vereschetin Дата: Пятница, 06.10.2023, 13:27 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel LTSC MSO 16.0.14332
igrtsk, Это первым делом сделал. Также вначале пробовал прописывать Application.Calculation = xlCalculationManual. Стало лучше конечно, но настолько большая разница мне не понятна.


Денис
 
Ответить
Сообщениеigrtsk, Это первым делом сделал. Также вначале пробовал прописывать Application.Calculation = xlCalculationManual. Стало лучше конечно, но настолько большая разница мне не понятна.

Автор - vereschetin
Дата добавления - 06.10.2023 в 13:27
WowGun Дата: Пятница, 06.10.2023, 13:52 | Сообщение № 4
Группа: Проверенные
Ранг: Новичок
Сообщений: 28
Репутация: 3 ±
Замечаний: 0% ±

"Макросы значительно медленнее работают на конкретном ноутбуке" то есть ВСЕ макросы, а не конкретный ...
Можно было бы подумать на Celeron, но вроде как там i7 полный.
Возможно программное обеспечение, но при установке Офисов должны устанавливаться, при необходимости, разные библиотеки.
Какие-нибудь установки BIOS - виртуализация или что-то в этом роде ... Ограничение памяти по частоте или не правильный тайминг.
Прогнать тест и сравнить его с опубликованными данными в интернете ...
 
Ответить
Сообщение"Макросы значительно медленнее работают на конкретном ноутбуке" то есть ВСЕ макросы, а не конкретный ...
Можно было бы подумать на Celeron, но вроде как там i7 полный.
Возможно программное обеспечение, но при установке Офисов должны устанавливаться, при необходимости, разные библиотеки.
Какие-нибудь установки BIOS - виртуализация или что-то в этом роде ... Ограничение памяти по частоте или не правильный тайминг.
Прогнать тест и сравнить его с опубликованными данными в интернете ...

Автор - WowGun
Дата добавления - 06.10.2023 в 13:52
Alex_ST Дата: Пятница, 06.10.2023, 14:24 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
А не антивирус ли у Вас маньячит?
Попробуйте временно вырубить его (если дастся, конечно, зараза).



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеА не антивирус ли у Вас маньячит?
Попробуйте временно вырубить его (если дастся, конечно, зараза).

Автор - Alex_ST
Дата добавления - 06.10.2023 в 14:24
vereschetin Дата: Пятница, 06.10.2023, 14:46 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel LTSC MSO 16.0.14332
Alex_ST, Специально не отключал. Стоит встроенный. Так же как и на других сравниваемых компьютерах. Но при переустановке офисов постоянно отключал антивирус (по понятным причинам), так что думаю были моменты когда антивирус был отключен.
Откопал на компьютере установочник Office 2010 и о чудо. В нем все работает нормально.


Денис
 
Ответить
СообщениеAlex_ST, Специально не отключал. Стоит встроенный. Так же как и на других сравниваемых компьютерах. Но при переустановке офисов постоянно отключал антивирус (по понятным причинам), так что думаю были моменты когда антивирус был отключен.
Откопал на компьютере установочник Office 2010 и о чудо. В нем все работает нормально.

Автор - vereschetin
Дата добавления - 06.10.2023 в 14:46
vereschetin Дата: Понедельник, 09.10.2023, 08:26 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel LTSC MSO 16.0.14332
Немного дополню. С наиболее тормознутым макросом проблема в цикле. Все остальные макросы работают медленнее, но терпимо. Ниже сам цикл:

For intL = 1 To intK
If Range("C" & intL + 1) = "Уголь" Then
wsLithCore.Range("A" & intL + 1, "C" & intL + 1).Copy wsThickCoal.Range("A" & intN, "C" & intN)
intN = intN + 1
ElseIf Range("C" & intL + 1) = "Уголь в/з" Then
wsLithCore.Range("A" & intL + 1, "C" & intL + 1).Copy wsThickCoal.Range("A" & intN, "C" & intN)
intN = intN + 1
Else
wsLithCore.Range("A" & intL + 1, "C" & intL + 1).Copy wsThick.Range("A" & intM, "C" & intM)
intM = intM + 1
End If
Next intL

Когда выполняется цикл, он начинает резко тормозить в рандомном месте. Один цикл начинает занимать примерно 2 секунды. В таблице 117 строк, начала торможения цикла совершенно не определённое. Обычно в диапазоне 30-40 цикла. Но может и на 60, и на 100 цикле начать тормозить. Один раз даже все циклы без тормозов прошли. Но что примечательно, тормозит равное количество циклов - 16. То есть первые 30-40 циклов проходят нормально, потом ровно 16 циклов тормозит, а затем все остальные циклы выполняются опять с нормльной скоростью.


Денис

Сообщение отредактировал vereschetin - Понедельник, 09.10.2023, 08:26
 
Ответить
СообщениеНемного дополню. С наиболее тормознутым макросом проблема в цикле. Все остальные макросы работают медленнее, но терпимо. Ниже сам цикл:

For intL = 1 To intK
If Range("C" & intL + 1) = "Уголь" Then
wsLithCore.Range("A" & intL + 1, "C" & intL + 1).Copy wsThickCoal.Range("A" & intN, "C" & intN)
intN = intN + 1
ElseIf Range("C" & intL + 1) = "Уголь в/з" Then
wsLithCore.Range("A" & intL + 1, "C" & intL + 1).Copy wsThickCoal.Range("A" & intN, "C" & intN)
intN = intN + 1
Else
wsLithCore.Range("A" & intL + 1, "C" & intL + 1).Copy wsThick.Range("A" & intM, "C" & intM)
intM = intM + 1
End If
Next intL

Когда выполняется цикл, он начинает резко тормозить в рандомном месте. Один цикл начинает занимать примерно 2 секунды. В таблице 117 строк, начала торможения цикла совершенно не определённое. Обычно в диапазоне 30-40 цикла. Но может и на 60, и на 100 цикле начать тормозить. Один раз даже все циклы без тормозов прошли. Но что примечательно, тормозит равное количество циклов - 16. То есть первые 30-40 циклов проходят нормально, потом ровно 16 циклов тормозит, а затем все остальные циклы выполняются опять с нормльной скоростью.

Автор - vereschetin
Дата добавления - 09.10.2023 в 08:26
WowGun Дата: Понедельник, 09.10.2023, 11:25 | Сообщение № 8
Группа: Проверенные
Ранг: Новичок
Сообщений: 28
Репутация: 3 ±
Замечаний: 0% ±

А если "Уголь" убрать в ячейку или в константу?
 
Ответить
СообщениеА если "Уголь" убрать в ячейку или в константу?

Автор - WowGun
Дата добавления - 09.10.2023 в 11:25
vereschetin Дата: Понедельник, 09.10.2023, 12:06 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel LTSC MSO 16.0.14332
WowGun, Я уже сократил цикл до простого копирования таблицы на другой лист:

For intL = 1 To intK
wsLithCore.Range("A" & intL + 1, "C" & intL + 1).Copy wsThick.Range("A" & intM, "C" & intM)
intM = intM + 1
wsLithCore.Range("D" & intL + 1) = Format(Now, "MM:SS.0")
Next intL

Результат все тот же. У меня из идей осталось только попробовать поставить с нуля Виндовс)
К сообщению приложен файл: 5661142.png (33.7 Kb)


Денис

Сообщение отредактировал vereschetin - Понедельник, 09.10.2023, 12:07
 
Ответить
СообщениеWowGun, Я уже сократил цикл до простого копирования таблицы на другой лист:

For intL = 1 To intK
wsLithCore.Range("A" & intL + 1, "C" & intL + 1).Copy wsThick.Range("A" & intM, "C" & intM)
intM = intM + 1
wsLithCore.Range("D" & intL + 1) = Format(Now, "MM:SS.0")
Next intL

Результат все тот же. У меня из идей осталось только попробовать поставить с нуля Виндовс)

Автор - vereschetin
Дата добавления - 09.10.2023 в 12:06
Alex_ST Дата: Понедельник, 09.10.2023, 21:22 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Не вижу деклараций модуля листа Вашего файла и объявления переменных...
Может быть Вы пишете без декларации Option Explicit и переменные не объявляете? Тогда они при первом использовании принимают значение Variant и могут тормозить.
Попробуйте не используя Option Explicit прямо в начале процедуры задать размерность хотя бы переменной цикла intL
[vba]
Код
Dim intL As Integer
[/vba]
И перед циклом можно на всякий попробовать отключать все тормоза строкой кода:[vba]
Код
With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: .Calculation = xlManual: End With
[/vba]а потом включать строчкой [vba]
Код
With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: .Calculation = xlAutomatic: End With
[/vba]
(у меня самые часто применяемые конструкции VBA просто забиты в список автозамены Punto Switcher, поэтому вводить их - не проблема)



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Понедельник, 09.10.2023, 21:25
 
Ответить
СообщениеНе вижу деклараций модуля листа Вашего файла и объявления переменных...
Может быть Вы пишете без декларации Option Explicit и переменные не объявляете? Тогда они при первом использовании принимают значение Variant и могут тормозить.
Попробуйте не используя Option Explicit прямо в начале процедуры задать размерность хотя бы переменной цикла intL
[vba]
Код
Dim intL As Integer
[/vba]
И перед циклом можно на всякий попробовать отключать все тормоза строкой кода:[vba]
Код
With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: .Calculation = xlManual: End With
[/vba]а потом включать строчкой [vba]
Код
With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: .Calculation = xlAutomatic: End With
[/vba]
(у меня самые часто применяемые конструкции VBA просто забиты в список автозамены Punto Switcher, поэтому вводить их - не проблема)

Автор - Alex_ST
Дата добавления - 09.10.2023 в 21:22
vereschetin Дата: Вторник, 10.10.2023, 02:02 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel LTSC MSO 16.0.14332
Alex_ST, Все переменные объявлены. Проблема то не в коде. Этот же самый макрос работает отлично на этом же компьютере с Office 2010. Отлично работает на всех остальных компьютерах которые я пробовал. С этой же книгой, с этим же макросом. С разными офисами, с разными виндовсами. Пробовал Office 2016 поставить. Та же самая проблема. На 16 циклов подвисает. То есть проблема в конкретном ноутбуке. Я понимаю что может это уже может выходит за рамки темы этого форума, но немного уже отчаялся) В русском интернете такая проблема как-то мне не встретилась, зато в англоязычном очень даже много. Все примерно похоже. Много лет макрос работал прекрасно, потом прилетает обновление Excel 2019 или переходят с Office 2010 на 2019 и макрос резко превращается в тормознутое нечто. Но из всех советов что приводятся, мне ничего не помогло.


Денис
 
Ответить
СообщениеAlex_ST, Все переменные объявлены. Проблема то не в коде. Этот же самый макрос работает отлично на этом же компьютере с Office 2010. Отлично работает на всех остальных компьютерах которые я пробовал. С этой же книгой, с этим же макросом. С разными офисами, с разными виндовсами. Пробовал Office 2016 поставить. Та же самая проблема. На 16 циклов подвисает. То есть проблема в конкретном ноутбуке. Я понимаю что может это уже может выходит за рамки темы этого форума, но немного уже отчаялся) В русском интернете такая проблема как-то мне не встретилась, зато в англоязычном очень даже много. Все примерно похоже. Много лет макрос работал прекрасно, потом прилетает обновление Excel 2019 или переходят с Office 2010 на 2019 и макрос резко превращается в тормознутое нечто. Но из всех советов что приводятся, мне ничего не помогло.

Автор - vereschetin
Дата добавления - 10.10.2023 в 02:02
Alex_ST Дата: Вторник, 10.10.2023, 07:45 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
vereschetin, Personal и надстройки на компах точно одинаковые?
Если в Personal или какой-то из надстроек объявлен объект WithEvents App As Application для обработки событий приложения, то Ваше [vba]
Код
wsLithCore.Range("A" & intL + 1, "C" & intL + 1).Copy wsThick.Range("A" & intM, "C" & intM)
[/vba] будет вызывать события листа, которые могут перехватываться обработчиком событий и уводить приложение на исполнение других процедур.
Именно для предотвращения ухода на "левые" процедуры я всегда применяю запрет/отмену ВСЕХ возможных тормозов, включая и Application.EnableEvents



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщениеvereschetin, Personal и надстройки на компах точно одинаковые?
Если в Personal или какой-то из надстроек объявлен объект WithEvents App As Application для обработки событий приложения, то Ваше [vba]
Код
wsLithCore.Range("A" & intL + 1, "C" & intL + 1).Copy wsThick.Range("A" & intM, "C" & intM)
[/vba] будет вызывать события листа, которые могут перехватываться обработчиком событий и уводить приложение на исполнение других процедур.
Именно для предотвращения ухода на "левые" процедуры я всегда применяю запрет/отмену ВСЕХ возможных тормозов, включая и Application.EnableEvents

Автор - Alex_ST
Дата добавления - 10.10.2023 в 07:45
vereschetin Дата: Среда, 11.10.2023, 10:12 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel LTSC MSO 16.0.14332
Alex_ST, Personal и надстройки одинаковые. Сейчас там один макрос остался, исследуемый. Все сделал в соответствии с вашей рекомендацией. Результат тот же.
Еще немного локализовал проблему. Проблема не в цикле, а в операции копирования. Почему-то именно она тормозит. Причем ровно 16 циклов. Я пробовал и в таблице на 1000 строк этот макрос выполнять. Те же самые 16 циклов по 2 сек, а дальше с обычной скоростью идет цикл вплоть до конца. Заменил операцию копирования на Destination.Value=Source.Value
В таком варианте все забегало. Только не понятно почему именно в современных офисах операция копирования вызывает такие торомоза, а в 2010 все нормально.
UPD. Также отчасти решает проблему чистка буфера обмена в конце каждого цикла.


Денис

Сообщение отредактировал vereschetin - Среда, 11.10.2023, 12:34
 
Ответить
СообщениеAlex_ST, Personal и надстройки одинаковые. Сейчас там один макрос остался, исследуемый. Все сделал в соответствии с вашей рекомендацией. Результат тот же.
Еще немного локализовал проблему. Проблема не в цикле, а в операции копирования. Почему-то именно она тормозит. Причем ровно 16 циклов. Я пробовал и в таблице на 1000 строк этот макрос выполнять. Те же самые 16 циклов по 2 сек, а дальше с обычной скоростью идет цикл вплоть до конца. Заменил операцию копирования на Destination.Value=Source.Value
В таком варианте все забегало. Только не понятно почему именно в современных офисах операция копирования вызывает такие торомоза, а в 2010 все нормально.
UPD. Также отчасти решает проблему чистка буфера обмена в конце каждого цикла.

Автор - vereschetin
Дата добавления - 11.10.2023 в 10:12
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Медленная работа макросов на конкретном ноутбуке (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!