Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2009, 17:55   #1
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию Чудесный макрос

Я готов убить себя об стену. У меня есть два практически полностью аналогичных макроса для двух книг. Один выполняется за несколько секунд, а другой минут 10. Скажите,люди умные, почему???
Быстрый:
Код:
    ThisWorkbook.Worksheets(1).Unprotect
    Application.ScreenUpdating = False
    Filename = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "2sz.xlsx")
    With Workbooks.Open(Filename, , True)
        ThisWorkbook.Worksheets(1).Unprotect
        .Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(1).[a1]
        .Close False
    End With
Медленный:
Код:
    ThisWorkbook.Worksheets(1).Unprotect
    Application.ScreenUpdating = False
    Filename = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "3sz.xlsx")
    With Workbooks.Open(Filename, , True)
        'Worksheets(1).Unprotect
        Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(2).[a1]
        .Close False
    End With
    'ThisWorkbook.Worksheets(2).Visible = False
Я не вижу между ними никакой разницы. В быстром случае работает идет с файлами в 500 Кб,а в медленном файлы размером 40 Кб.
Как с этим справиться??? Почему так могло получиться???
Пожалуйста, высказывайте любые мысли.
mephist вне форума Ответить с цитированием
Старый 13.07.2009, 18:05   #2
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию

А может быть кто-нибудь знает, как можно переместить лист из одной книги в другую с переименованием листа? Может быть так удастся ускорить мой макрос??
mephist вне форума Ответить с цитированием
Старый 13.07.2009, 18:34   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Может, в Ваших файлах присутствуют формулы?
Код:
Sub test()
    Application.Calculation = xlCalculationManual: On Error Resume Next
    ThisWorkbook.Worksheets(1).Unprotect
    Application.ScreenUpdating = False
    Filename = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "3sz.xlsx")
    With Workbooks.Open(Filename, , True)
        .Worksheets(1).Unprotect
        .Worksheets(1).Copy ThisWorkbook.Worksheets(1) ' копируем лист целиком
        .Close False
    End With
    Application.Calculation = xlCalculationAutomatic
End Sub

Ну или попробуйте заменить
Код:
Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(2).[a1]
на
Код:
.Worksheets(1).UsedRange.Copy ThisWorkbook.Worksheets(2).[a1]
PS: Вообще, такой макрос должен выполняться менее чем за секунду...
EducatedFool вне форума Ответить с цитированием
Старый 16.07.2009, 18:48   #4
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию

Спасибо большое! Действительно все дело было в формулах!
mephist вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос постоянно обрабатывает события. При открытии другой книги макрос обрывается. Ples Microsoft Office Excel 8 17.12.2016 18:15
Макрос Markizka Microsoft Office Excel 1 31.05.2009 20:53
Макрос терпкая_весна Microsoft Office Excel 2 18.05.2009 12:53
макрос Demonmov Microsoft Office Excel 19 29.01.2009 16:19
Макрос kot_842003 Microsoft Office Excel 2 26.12.2008 05:24