Зависает макрос наглухо - VBA

Узнай цену своей работы

Формулировка задачи:

Добрый день. с утра написал - работал быстро, буквально пару секунд. сейчас же висит на полминуты и проц на 100% гасит. Как вычленить проблему?
Листинг программы
  1. Public Sub Report()
  2. ' Очищаем диапазон от предыдущих сотрудников
  3. ActiveWorkbook.Worksheets("Досье").Range("C6:N14").ClearContents
  4. ' Получаем имя ФИО сотрудника
  5. Dim User As String
  6. User = ActiveWorkbook.Worksheets("Досье").Range("C3").Value
  7. ' Обходим листы
  8. For i = 1 To 12
  9. ' Последняя строка
  10. lLastRow = Worksheets(CStr(i)).UsedRange.Row + Worksheets(CStr(i)).UsedRange.Rows.Count - 1
  11. ' Обходим строки листа
  12. For k = 1 To lLastRow
  13. 'arrRep(i, k) = ActiveWorkbook.Worksheets("Досье").Cell("C3").Value
  14. Dim U_name
  15. U_name = ActiveWorkbook.Worksheets(CStr(i)).Cells(k, 1).Value
  16. ' Если ФИО совпало
  17. If U_name = User Then
  18. Dim ii
  19. ii = i - 1
  20. For f = 0 To 9
  21. Dim ff
  22. ff = f + 2
  23. ' Пишем сразу на лист
  24. Dim i2, f2
  25. i2 = i + 2
  26. f20 = f + 6
  27. ActiveWorkbook.Worksheets("Досье").Cells(f20, i2) = ActiveWorkbook.Worksheets(CStr(i)).Cells(k, ff).Value
  28. Next
  29. End If
  30. Next
  31. Next
  32. End Sub

Решение задачи: «Зависает макрос наглухо»

textual
Листинг программы
  1. 'Ускоряем Excel путём отключения всего "тормозящего"
  2. Public Sub AccelerateExcel()
  3.  
  4.   'Больше не обновляем страницы после каждого действия
  5.  Application.ScreenUpdating = False
  6.  
  7.   'Расчёты переводим в ручной режим
  8.  Application.Calculation = xlCalculationManual
  9.  
  10.   'Отключаем события
  11.  Application.EnableEvents = False
  12.  
  13.   'Не отображаем границы ячеек
  14.  If Workbooks.Count Then
  15.       ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False
  16.   End If
  17.  
  18.   'Отключаем статусную строку
  19.  Application.DisplayStatusBar = False
  20.  
  21.   'Отключаем сообщения Excel
  22.  Application.DisplayAlerts = False
  23.  
  24.  End Sub
  25. 'Включаем всё то что выключили процедурой AccelerateExcel
  26. Public Sub disAccelerateExcel()
  27.  
  28.   'Включаем обновление экрана после каждого события
  29.  Application.ScreenUpdating = True
  30.  
  31.   'Расчёты формул - снова в автоматическом режиме
  32.  Application.Calculation = xlCalculationAutomatic
  33.  
  34.   'Включаем события
  35.  Application.EnableEvents = True
  36.  
  37.   'Показываем границы ячеек
  38. '  If Workbooks.Count Then
  39. '      ActiveWorkbook.ActiveSheet.DisplayPageBreaks = True
  40. '  End If
  41.  
  42.   'Возвращаем статусную строку
  43.  Application.DisplayStatusBar = True
  44.  
  45.   'Разрешаем сообшения Excel
  46.  Application.DisplayAlerts = True
  47.  
  48. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут