0 / 0 / 0
Регистрация: 22.12.2018
Сообщений: 17
1

Нужно найти причину торможения макроса (после срабатывания первого, второй макрос начинает сильно тормозить)

22.12.2018, 21:23. Показов 6477. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Нужна помощь. Проблема у меня такая:
Я настроил эдакую систему макросов которые работают в одном диапазоне.
И так: первый макрос (он помечает искомые фразы желтым) работает идеально. Но все меняется и он люто начинает тормозить после запуска второго макроса (он уже помеченные желтым фразы удаляет и переносит в другой столбец). После запуска этого макроса, первый макрос (помечающий) жутко тормозит. Помогите найти причину этого явления. Я уже не знаю, что не так.. не могу найти причину.
P.S. В примере он начинает тормозить не сильно. Но с объемами данных с которыми я работаю, это все утраивается. Мне нужно что бы все работало быстро и идеально, как до запуска второго макроса.
Спасибо всем!
Пример приложил:

P.S.S так в том же диапазоне есть третий макрос я его запихнул в пример, но он вроде не влияет. (приложил чисто на всякий)
Связь заметил именно между двумя макросами описанными выше.
Вложения
Тип файла: xls Primer.xls (59.0 Кб, 6 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2018, 21:23
Ответы с готовыми решениями:

Компьютер сильно начинает тормозить спустя 20 минут после включения
Видеокарта - NVIDIA GeForce GT 730, Процессор - Intel Core i-3 3.10 GHz, 6гб оперативной памяти. ...

Макрос со временем начинает тормозить
Добрый день. Нужен Ваш совет. Есть финансовая программа, которая обрабатывает данные в...

Acer Aspire One 532h-28 сильно начинает тормозить при подключении к интернету
Вечер добрый!!! Одна надежда на Вас. я перепробывал уже все что знал. В общем проблема такая:...

Сильно начинает тормозить браузер Гугл Хром при открывании новой вкладки
Добрый день. Открываю любую ссылку в хроме и тут же начинаются жесткие тормоза в браузере. Если...

10
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
23.12.2018, 01:16 2
Лучший ответ Сообщение было отмечено Fsociety_ как решение

Решение

Fsociety_, при первом запуске макроса закрашивания lLastRow =112 (номер последней занятой строки), что правильно.
После запуска макроса переноса lLastRow =60000, потому что в том макросе прописана работа с диапазонами такого размера (что неоптимально).
Измените определение номера последней строки так
Visual Basic
1
lLastRow = Cells(Rows.Count, "B").End(xlUp).Row
1
0 / 0 / 0
Регистрация: 22.12.2018
Сообщений: 17
23.12.2018, 13:11  [ТС] 3
Казанский, прописал как вы сказали, но у меня вроде так же все осталось. не могли бы скинуть пример как вы это реализовали, может я как то не так сделал?
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
23.12.2018, 14:31 4
Лучший ответ Сообщение было отмечено Fsociety_ как решение

Решение

Fsociety_,
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Sub Substr()
Dim sSubStr As String    'искомое слово или фраза
    Dim lCol As Long    'номер столбца с просматриваемыми значениями
    Dim lLastRow As Long, li As Long
    Dim avArr, lr As Long
    Dim arr, lInStr&
    Dim t!
    lCol = 2
    If lCol = 0 Then Exit Sub
    t = Timer
    lLastRow = Cells(Rows.Count, "B").End(xlUp).Row '<<< изменено
    'заносим в массив значения листа, в котором необходимо удалить строки
    arr = Cells(1, lCol).Resize(lLastRow, 2).Value
     
    'Получаем с Лист1 значения, которые надо удалить в активном листе
    With Sheets("Лист1")    'Имя листа с диапазоном значений на удаление
        avArr = .Range(.Cells(5, 3), .Cells(.Rows.Count, 3).End(xlUp))
    End With
    'удаляем
    For lr = 1 To UBound(avArr, 1)
        sSubStr = avArr(lr, 1)
        For li = 5 To lLastRow    'цикл с первой строки до конца
 
        
        'Старый вариант
 
'            lInStr = InStr(1, arr(li, 1), sSubStr, 1)
           'Чуть свежее
            'If " " & arr(li, 1) & " " Like "*" & sSubStr & "*" Then '- совсем не точное
            'If " " & arr(li, 1) & " " Like "* " & sSubStr & "*" Then '- не очень точное
            'If " " & arr(li, 1) & " " Like "* " & sSubStr & " *" Then '- точное
            'If " " & arr(li, 1) & " " Like " " & sSubStr & " " Then '- Идеальное :-)
            
            'If " " & LCase(arr(li, 1)) & " " Like "*" & LCase(sSubStr) & "*" Then '- совсем не точное
            If " " & LCase(arr(li, 1)) & " " Like "* " & LCase(sSubStr) & "*" Then '- не очень точное
            'If " " & LCase(arr(li, 1)) & " " Like "* " & LCase(sSubStr) & " *" Then '- точное
            'If " " & LCase(arr(li, 1)) & " " Like " " & LCase(sSubStr) & " " Then '- Идеальное :-)
            
                    arr(li, 2) = "x"
                End If
               
'            If lInStr > 0 Then
'                If lInStr = 1 Then
'                    If Mid$(arr(li, 1), lInStr + Len(sSubStr), 1) = " " Then arr(li, 2) = "x"
'                ElseIf lInStr - 1 + Len(sSubStr) = Len(arr(li, 1)) Then
'                    If Mid$(arr(li, 1), lInStr - 1, 1) = " " Then arr(li, 2) = "x"
'                Else
'                    If Mid$(arr(li, 1), lInStr - 1, 1) = " " And Mid$(arr(li, 1), lInStr + Len(sSubStr), 1) = " " Then arr(li, 2) = "x"
'                End If
'            End If
        Next li
    Next lr
    Application.ScreenUpdating = 0
    For li = 5 To lLastRow    'цикл с первой строки до конца
        'If Len(arr(li, 2)) Then Cells(li, 3).Interior.Color = 65535 '-было
        If arr(li, 2) = "x" Then Cells(li, 2).Interior.Color = 65535
    Next
    Application.ScreenUpdating = 1
    Debug.Print Format(Timer - t, "0.0000")
End Sub
1
0 / 0 / 0
Регистрация: 22.12.2018
Сообщений: 17
23.12.2018, 14:51  [ТС] 5
Казанский, блин, я подумал вы имели ввиду про макрос который удаляет, и не мог понять что не так)) Все работает, спасибо большое за помощь!! Жирный плюс)
0
5 / 4 / 1
Регистрация: 24.09.2016
Сообщений: 398
30.06.2021, 04:48 6
Казанский . . .можете ответить на такой вопрос ?. . . макрос заканчивается через 4 минуты после запуска, о чем однозначно свидетельствует слышымый Beep . . . однако, после его завершения когда я пытаюсь открыть какой-то файл Excel то он не открывается сразу - а ждет примерно пол минуты, пока производительность ЦП упадет с 20% до нуля . . . вопрос - можно как-то это ускорить ? . . . забыл написать - в процессе работы макроса - памяти используется всего 8%
0
5605 / 1591 / 412
Регистрация: 23.12.2010
Сообщений: 2,382
Записей в блоге: 1
02.07.2021, 15:56 7
Instr работает намного быстрее Like
Visual Basic
1
2
3
    If InStr(1, " " & arr(li, 1), " " & sSubStr, vbTextCompare) > 0 Then
          arr(li, 2) = "x"
 End If
Для ускорения перед вторым циклом
Visual Basic
1
Application.Calculation = xlCalculationManual
после него
Visual Basic
1
Application.Calculation = xlCalculationAutomatic
В настройках Windows лучше отключать анимацию и прозрачность - это иногда устраняет торможение.
1
help
4250 / 3843 / 781
Регистрация: 13.04.2015
Сообщений: 8,521
02.07.2021, 16:12 8
Цитата Сообщение от KoGG Посмотреть сообщение
Instr работает намного быстрее Like
Да это вообще левый товарищ, поднял чужую двухгодичную тему.
А из его сообщения ясно только, что у него в коде есть Биип
0
5605 / 1591 / 412
Регистрация: 23.12.2010
Сообщений: 2,382
Записей в блоге: 1
02.07.2021, 16:48 9
DLD задел за живое
У меня в последнее время тоже было сильное торможение Excel после работы макросов в файлах, выгруженных из 1С.
Лечится отключением анимации и прозрачности в настройках Windows.
2
5 / 4 / 1
Регистрация: 24.09.2016
Сообщений: 398
07.07.2021, 03:42 10
KoGG спасибо что откликнулись. . . извиняюсь что долго не отвечал . . .по вашей рекомендации сделал следующее . . . Свойства системы->Быстродействие(параметры)->Визуальные эффекты снял галочку напротив "Анимация окон при свертывании и развертывании"
И еще . . . Параметры->Персонализация->Цвета отключил "Эффекты прозрачности" . . . Теперь буду проверять . . . результат сообщу . . Кстати, макрос который тормозит я ни откуда не выгружал - а написал в VBA на "чистом листе" . .. и еще . .. проверил его на процессоре 4,7Ггц . . . после выполнения макроса файл Excel не открывается 30 сек а на процессоре 2,7 Ггц - не открывается 3 минуты
0
5 / 4 / 1
Регистрация: 24.09.2016
Сообщений: 398
08.07.2021, 03:35 11
KoGG, я проверил вашу рекомендацию . . . скорость выполнения макроса выросла в 2 раза . . . а время открытия файла Excel после завершения выполнения макроса тоже уменьшилось примерно на 30% и составляет 2 минуты
0
08.07.2021, 03:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.07.2021, 03:35
Помогаю со студенческими работами здесь

При подключении к серверу через любую программу удаленного доступа начинает очень сильно тормозить
Всем привет! Такая проблема: при подключении к серверу через программу любую удаленного доступа...

Начинает тормозить после длительной работы
Здравствуйте. У меня стоит ОС Windows Se7eN Максимальная, компьютеру 2 года. Раньше подобного (На...

FIFA 10 начинает тормозить после часа игры
Привет всем! Прошу помочь. Когда я начинаю играть, например в Fifa 10, то сначала все хорошо и...

Компьютер начинает тормозить после 10-15 минут в игре.
компютер вроде работает нормально , ничего не вилетает, в журналах ошибок нету, но такая вот...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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