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

Вход

Регистрация

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

 

= Мир MS Excel/оптимизация макросов excel - Мир MS Excel

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

Excel 2013
Добрый день!
Подскажите пожалуйста можно ли как-то оптимизировать мой фаил ( очень долго обрабатывает информацию, и подвисает)
Зарание благодарен за любую помощь.
в файле нужны все действия которые прописаны в макросах и формулах

[vba]
Код
Sub НАКЛАДНАЯ_1()
ActiveSheet.Protect Password:="123", AllowFiltering:=True, UserInterfaceOnly:=True
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=1
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=2
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=3
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=4
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=5
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=6
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=7
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=8
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=9
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=10
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=11
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=12
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=13
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=14
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=15
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=16
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=17
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=18
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=19
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=20
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=21
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=22
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=23
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=24
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=25
Columns("D:X").Hidden = True
Columns("E:E").Hidden = False
Columns("G:G").Hidden = False
Range("B2").Select
ActiveCell.FormulaR1C1 = _
"=""Товарная накладная № 001 от ""&TEXT(TODAY(),""[$-F800]"")"
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=7
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=7, Criteria1:="<>"
Calculate
ActiveSect Password:="123", AllowFiltering:=True, UserInterfaceOnly:=True
End Sub
[/vba]


Сообщение отредактировал rEturned - Пятница, 24.04.2015, 14:59
 
Ответить
СообщениеДобрый день!
Подскажите пожалуйста можно ли как-то оптимизировать мой фаил ( очень долго обрабатывает информацию, и подвисает)
Зарание благодарен за любую помощь.
в файле нужны все действия которые прописаны в макросах и формулах

[vba]
Код
Sub НАКЛАДНАЯ_1()
ActiveSheet.Protect Password:="123", AllowFiltering:=True, UserInterfaceOnly:=True
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=1
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=2
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=3
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=4
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=5
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=6
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=7
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=8
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=9
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=10
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=11
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=12
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=13
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=14
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=15
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=16
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=17
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=18
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=19
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=20
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=21
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=22
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=23
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=24
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=25
Columns("D:X").Hidden = True
Columns("E:E").Hidden = False
Columns("G:G").Hidden = False
Range("B2").Select
ActiveCell.FormulaR1C1 = _
"=""Товарная накладная № 001 от ""&TEXT(TODAY(),""[$-F800]"")"
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=7
ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=7, Criteria1:="<>"
Calculate
ActiveSect Password:="123", AllowFiltering:=True, UserInterfaceOnly:=True
End Sub
[/vba]

Автор - rEturned
Дата добавления - 24.04.2015 в 11:45
Skif-F Дата: Пятница, 24.04.2015, 12:33 | Сообщение № 2
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
Нет файла, не могу попробовать. Но "в лоб" - так:
[vba]
Код
Sub НАКЛАДНАЯ_1()
     Application.ScreenUpdating = False
     With ActiveSheet
         .Protect Password:="123", AllowFiltering:=True, UserInterfaceOnly:=True
         .Range("$A$10:$Y$5009").AutoFilter
         .Columns("D:X").Hidden = True
         .Columns("E:E").Hidden = False
         .Columns("G:G").Hidden = False
         .Cells("B2").FormulaR1C1 = _
             "=""Товарная накладная № 001 от ""&TEXT(TODAY(),""[$-F800]"")"
         .Range("$A$10:$Y$5009").AutoFilter Field:=7, Criteria1:="<>"
         .Calculate
         .Protect Password:="123", AllowFiltering:=True, UserInterfaceOnly:=True
     End With
     Application.ScreenUpdating = True
End Sub
[/vba]
 
Ответить
СообщениеНет файла, не могу попробовать. Но "в лоб" - так:
[vba]
Код
Sub НАКЛАДНАЯ_1()
     Application.ScreenUpdating = False
     With ActiveSheet
         .Protect Password:="123", AllowFiltering:=True, UserInterfaceOnly:=True
         .Range("$A$10:$Y$5009").AutoFilter
         .Columns("D:X").Hidden = True
         .Columns("E:E").Hidden = False
         .Columns("G:G").Hidden = False
         .Cells("B2").FormulaR1C1 = _
             "=""Товарная накладная № 001 от ""&TEXT(TODAY(),""[$-F800]"")"
         .Range("$A$10:$Y$5009").AutoFilter Field:=7, Criteria1:="<>"
         .Calculate
         .Protect Password:="123", AllowFiltering:=True, UserInterfaceOnly:=True
     End With
     Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Skif-F
Дата добавления - 24.04.2015 в 12:33
rEturned Дата: Пятница, 24.04.2015, 14:30 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 35
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Приложил фаил, строки удолил лишние чтоб была возможность прикрепить тут фаил
Все формулы должны быть рассчитаны на 5009 строк

Как мне кажется висит он из за этого кода.
[vba]
Код
Option Explicit

Public Function SumVisible(myRng As Range)
Dim myCell As Range, mySum As Double
Application.Volatile

For Each myCell In myRng
If myCell.ColumnWidth <> 0 Then mySum = mySum + myCell.Value
Next myCell
SumVisible = mySum
[/vba]
К сообщению приложен файл: 1234-.xlsm (80.2 Kb)


Сообщение отредактировал rEturned - Пятница, 24.04.2015, 14:59
 
Ответить
СообщениеПриложил фаил, строки удолил лишние чтоб была возможность прикрепить тут фаил
Все формулы должны быть рассчитаны на 5009 строк

Как мне кажется висит он из за этого кода.
[vba]
Код
Option Explicit

Public Function SumVisible(myRng As Range)
Dim myCell As Range, mySum As Double
Application.Volatile

For Each myCell In myRng
If myCell.ColumnWidth <> 0 Then mySum = mySum + myCell.Value
Next myCell
SumVisible = mySum
[/vba]

Автор - rEturned
Дата добавления - 24.04.2015 в 14:30
Manyasha Дата: Пятница, 24.04.2015, 14:49 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
rEturned, вместо кучи строк[vba]
Код
    ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=1
      ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=2
      ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=3
      ...
[/vba]
можно писать[vba]
Код
ActiveSheet.ShowAllData
[/vba]
Еще можно отключить обновление экрана
[vba]
Код
ActiveSheet.Protect Password:'...
Application.ScreenUpdating = False
'Ваш код     
Application.ScreenUpdating = True
ActiveSheet.Protect Password:='...
[/vba]
[p.s.]В файле переделала макрос Наклодная_1[/p.s.]
К сообщению приложен файл: 1234-1.xlsm (80.2 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеrEturned, вместо кучи строк[vba]
Код
    ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=1
      ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=2
      ActiveSheet.Range("$A$10:$Y$5009").AutoFilter Field:=3
      ...
[/vba]
можно писать[vba]
Код
ActiveSheet.ShowAllData
[/vba]
Еще можно отключить обновление экрана
[vba]
Код
ActiveSheet.Protect Password:'...
Application.ScreenUpdating = False
'Ваш код     
Application.ScreenUpdating = True
ActiveSheet.Protect Password:='...
[/vba]
[p.s.]В файле переделала макрос Наклодная_1[/p.s.]

Автор - Manyasha
Дата добавления - 24.04.2015 в 14:49
rEturned Дата: Пятница, 24.04.2015, 15:47 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 35
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Большое спасибо с сокращением макроса на фильтр, все сделал работает в 3 раза быстрее.

Что еще можно поправить чтоб ускорить работу? так как при вводе данных на 1 листе, все равно подвисает =(
 
Ответить
СообщениеБольшое спасибо с сокращением макроса на фильтр, все сделал работает в 3 раза быстрее.

Что еще можно поправить чтоб ускорить работу? так как при вводе данных на 1 листе, все равно подвисает =(

Автор - rEturned
Дата добавления - 24.04.2015 в 15:47
RAN Дата: Пятница, 24.04.2015, 16:05 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Лишнияя [vba]
Код
SumVisible
[/vba] в файле не помеха?
При каждом чихе 5000 раз пересчитывать?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЛишнияя [vba]
Код
SumVisible
[/vba] в файле не помеха?
При каждом чихе 5000 раз пересчитывать?

Автор - RAN
Дата добавления - 24.04.2015 в 16:05
rEturned Дата: Пятница, 24.04.2015, 16:33 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 35
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Лишнияя
SumVisible
в файле не помеха?
При каждом чихе 5000 раз пересчитывать?


SumVisible нужна для подсчета столбцов
работает по принципу формулы "промежуточные итоги" с применением фильтра
как я понял excel не может формулами не учитывать скрытые столбцы.

если есть вариант как то заменить был бы рад выслушать.

Вопрос можно ли SumVisible применить только к 1 листу ?


Сообщение отредактировал rEturned - Пятница, 24.04.2015, 17:30
 
Ответить
Сообщение
Лишнияя
SumVisible
в файле не помеха?
При каждом чихе 5000 раз пересчитывать?


SumVisible нужна для подсчета столбцов
работает по принципу формулы "промежуточные итоги" с применением фильтра
как я понял excel не может формулами не учитывать скрытые столбцы.

если есть вариант как то заменить был бы рад выслушать.

Вопрос можно ли SumVisible применить только к 1 листу ?

Автор - rEturned
Дата добавления - 24.04.2015 в 16:33
Мир MS Excel » Вопросы и решения » Вопросы по VBA » оптимизация макросов excel (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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