В таблице макрос вызывается CTRL+Y (на английском регистре). Он создает новый лист , в котором из колонки М в предидущем листе значения переходят в колонку В следующего, а значения в колонке F (если они введены) очищаются в следующем листе. В 2007 можем создавать поочереди 3 листа, потом сильно замедляется процесс создания следующего листа. На 6-ой лист требуется несколько минут. Хотя сам файл получается не очень большой. В 2003 замедления не было ни какого и легко создавались много листов - на что хватало памяти компа. Это проблемма в 2007 или в чем-то еще ? Просветите пожалуйста буду благодарен. Михаил
В таблице макрос вызывается CTRL+Y (на английском регистре). Он создает новый лист , в котором из колонки М в предидущем листе значения переходят в колонку В следующего, а значения в колонке F (если они введены) очищаются в следующем листе. В 2007 можем создавать поочереди 3 листа, потом сильно замедляется процесс создания следующего листа. На 6-ой лист требуется несколько минут. Хотя сам файл получается не очень большой. В 2003 замедления не было ни какого и легко создавались много листов - на что хватало памяти компа. Это проблемма в 2007 или в чем-то еще ? Просветите пожалуйста буду благодарен. МихаилMihail72856
Хотя попробовал поменять на UsedRange - особо быстрее не стало работать, чем дальше, тем медленнее...
Удалил лишние строки/столбцы, чуть оптимизировал код, отключил пересчёт во время работы макроса - до 10 листов отрабатывает довольно быстро (проверьте, всё ли верно делает), но дальше всё равно тормоза... Вероятно, есть ещё что-то, что в 2007 работает иначе, чем в 2003. Может быть 2010 версия лучше справится?
Code
Cells.Select Selection.Copy
- знаете, сколько этих cells в 2007?
Хотя попробовал поменять на UsedRange - особо быстрее не стало работать, чем дальше, тем медленнее...
Удалил лишние строки/столбцы, чуть оптимизировал код, отключил пересчёт во время работы макроса - до 10 листов отрабатывает довольно быстро (проверьте, всё ли верно делает), но дальше всё равно тормоза... Вероятно, есть ещё что-то, что в 2007 работает иначе, чем в 2003. Может быть 2010 версия лучше справится?Hugo
Извините RUN я не такой продвинутый. Что это за 8447498.xlsm - это архив в котором несколько папок и файлов. Как этим пользоваться ? И как вставить формула или Код VBA: в нашу таблицу ? Всё, спасибо, разобрался.
Извините RUN я не такой продвинутый. Что это за 8447498.xlsm - это архив в котором несколько папок и файлов. Как этим пользоваться ? И как вставить формула или Код VBA: в нашу таблицу ? Всё, спасибо, разобрался.Mihail72856
Сообщение отредактировал Mihail72856 - Вторник, 29.11.2011, 15:14
Этот архив - такой же архив, как и Ваш файл Просто при сохранении браузером измените расширение на xlsm/x (смотря что скачиваете), или позже замените. Эти файлы по сути архивы и есть. А по коду - так конечно быстрее, но кажется, что исходный функционал сохранён не весь - нужно доработать. Закрепления областей например нет. Но что именно нужно получить - не разобрался... не разбирался.
P.S. Зачем повторили листинг кода? Может быть удалите - зачем плодить?
Этот архив - такой же архив, как и Ваш файл Просто при сохранении браузером измените расширение на xlsm/x (смотря что скачиваете), или позже замените. Эти файлы по сути архивы и есть. А по коду - так конечно быстрее, но кажется, что исходный функционал сохранён не весь - нужно доработать. Закрепления областей например нет. Но что именно нужно получить - не разобрался... не разбирался.
P.S. Зачем повторили листинг кода? Может быть удалите - зачем плодить?Hugo
Обнаружили причину , но решения нет. В колонке М (остаток) в нашем файле было применено условное форматирование. При значении в ячейке меньше 0 она выделялась. В файле от RAN условное форматирование не применялось. Если применить - проблема остается. Если в нашем файле http://depositfiles.com/files/q81fmng61 или http://files.mail.ru/FDFEAF убрать условное форматирование - то то-же работает все без проблем. В 2003 это не имело особого значение. А в 2007 тормозит при выполнении макроса. Вообще это тут условное форматирование применялось для того, что-бы оператор вводя данные обращал внимание на выделение красным- если продано товара больше чем было. Как быть тут ?
Обнаружили причину , но решения нет. В колонке М (остаток) в нашем файле было применено условное форматирование. При значении в ячейке меньше 0 она выделялась. В файле от RAN условное форматирование не применялось. Если применить - проблема остается. Если в нашем файле http://depositfiles.com/files/q81fmng61 или http://files.mail.ru/FDFEAF убрать условное форматирование - то то-же работает все без проблем. В 2003 это не имело особого значение. А в 2007 тормозит при выполнении макроса. Вообще это тут условное форматирование применялось для того, что-бы оператор вводя данные обращал внимание на выделение красным- если продано товара больше чем было. Как быть тут ?Mihail72856
Прикладываю файл – сильно урезанный. Составляет примерно 3-5% от исходного большого. Тут включено условное форматирование. Здесь листов 10 делаются, потом тормозит. На большом файле тормозит с 4-5 листа.
Прикладываю файл – сильно урезанный. Составляет примерно 3-5% от исходного большого. Тут включено условное форматирование. Здесь листов 10 делаются, потом тормозит. На большом файле тормозит с 4-5 листа.Mihail72856
Мой макрос на вашем файле. И где тормоза? Что 1й лист, что последний. На 30 листе 0,05 секунды? 0,2344 - лист 113 И ваш макрос на вашем файле 36,1914 - лист 13
Добавил строк до 2500
Мой макрос на вашем файле. И где тормоза? Что 1й лист, что последний. На 30 листе 0,05 секунды? 0,2344 - лист 113 И ваш макрос на вашем файле 36,1914 - лист 13
_Boroda_ , а Вы включите условное форматирование по колонке М (что-бы выделялись ячейки при отрицательных числах). Тогда даже на таком маленьком файле мы получим долгое ожидание уже на 10-м листе. А если это большой файл, то проблеммы начинаются с 4-5 листа. А при срабатывании макроса получаем по центру табличку:
Microsoft Excel 0,40625 - или другие цифры - это счетчик за сколько срабатывает ?
_Boroda_ , а Вы включите условное форматирование по колонке М (что-бы выделялись ячейки при отрицательных числах). Тогда даже на таком маленьком файле мы получим долгое ожидание уже на 10-м листе. А если это большой файл, то проблеммы начинаются с 4-5 листа. А при срабатывании макроса получаем по центру табличку:
Microsoft Excel 0,40625 - или другие цифры - это счетчик за сколько срабатывает ? Mihail72856
_Boroda_, погонял код - в начале быстро, а на 11-м листе уже 8 сек., на 12-ом - 13 сек., на 13-ом - 40 секунд!!! Эксель 2007 русский.
Мда... У меня на работе машина 4 ядра 8Г оперативки 64-разряда 7 Win 10 офис дома - ЗНАЧИТЕЛЬНО хуже. Так вот, дома на 20000 строк первый же лист думал 9 сек. Поставил в начале и в конце макроса Application.Calculation = xlCalculationManual и Application.Calculation = xlCalculationAutomatic. С ними 20-й лист думал 5,05 (все предыдущие примерно также).
Потом переписал макрос. 20-й лист думает 3,19сек.
Code
Sub tt() Dim SC_, R_, t_ t_ = Timer Application.Calculation = xlCalculationManual Application.ScreenUpdating = 0 SC_ = Sheets.Count R_ = Range("A" & Rows.Count).End(xlUp).Row Rows(R_ + 1 & ":" & Rows.Count).Clear ActiveSheet.Copy After:=Sheets(SC_) With Sheets(SC_) .Range("B4:B" & R_) = .Range("M4:M" & R_).Value .Range("F4:F" & R_).ClearContents End With Application.ScreenUpdating = 1 Application.Calculation = xlCalculationAutomatic t_ = Timer - t_ MsgBox t_ End Sub
Интересно, сколько будет думать на работе?
Quote
0,40625 - или другие цифры - это счетчик за сколько срабатывает ?
Да
Quote
_Boroda_ , а Вы включите условное форматирование по колонке М (что-бы выделялись ячейки при отрицательных числах)
Оно "включено".
Quote (Hugo)
_Boroda_, погонял код - в начале быстро, а на 11-м листе уже 8 сек., на 12-ом - 13 сек., на 13-ом - 40 секунд!!! Эксель 2007 русский.
Мда... У меня на работе машина 4 ядра 8Г оперативки 64-разряда 7 Win 10 офис дома - ЗНАЧИТЕЛЬНО хуже. Так вот, дома на 20000 строк первый же лист думал 9 сек. Поставил в начале и в конце макроса Application.Calculation = xlCalculationManual и Application.Calculation = xlCalculationAutomatic. С ними 20-й лист думал 5,05 (все предыдущие примерно также).
Потом переписал макрос. 20-й лист думает 3,19сек.
Code
Sub tt() Dim SC_, R_, t_ t_ = Timer Application.Calculation = xlCalculationManual Application.ScreenUpdating = 0 SC_ = Sheets.Count R_ = Range("A" & Rows.Count).End(xlUp).Row Rows(R_ + 1 & ":" & Rows.Count).Clear ActiveSheet.Copy After:=Sheets(SC_) With Sheets(SC_) .Range("B4:B" & R_) = .Range("M4:M" & R_).Value .Range("F4:F" & R_).ClearContents End With Application.ScreenUpdating = 1 Application.Calculation = xlCalculationAutomatic t_ = Timer - t_ MsgBox t_ End Sub
Интересно, сколько будет думать на работе?
Quote
0,40625 - или другие цифры - это счетчик за сколько срабатывает ?
Да
Quote
_Boroda_ , а Вы включите условное форматирование по колонке М (что-бы выделялись ячейки при отрицательных числах)
_Boroda_ при срабатывании макроса в генерируем следующем листе не очищается колонка F А в колонке М формула =B5-F5 (это я сам поправлю). На большом файле не смотрел еще.
_Boroda_ при срабатывании макроса в генерируем следующем листе не очищается колонка F А в колонке М формула =B5-F5 (это я сам поправлю). На большом файле не смотрел еще.Mihail72856
_Boroda_ проверил работает быстро но не все делается так как было изначально. У Вас при вводе данных в колонку F при срабатывании макроса слева от исходной страницы генерируется новый лист с данными. И исходный лист переименовывается в ...(2), а сгенерированный файл получает имя исходного. Так-же в исходном файле пропадают значения (а там они должны оставаться). Прикладываю пример как должно быть. Новый лист должен быть справа от исходного и пусть носил например имя лист1 В нем очищается колонка F , а данные из исходного листа из колонки М (остаток) перемещаются в колонку В (кол-во) следующего листа. При этом с исходным листом ничего не происходит.
_Boroda_ проверил работает быстро но не все делается так как было изначально. У Вас при вводе данных в колонку F при срабатывании макроса слева от исходной страницы генерируется новый лист с данными. И исходный лист переименовывается в ...(2), а сгенерированный файл получает имя исходного. Так-же в исходном файле пропадают значения (а там они должны оставаться). Прикладываю пример как должно быть. Новый лист должен быть справа от исходного и пусть носил например имя лист1 В нем очищается колонка F , а данные из исходного листа из колонки М (остаток) перемещаются в колонку В (кол-во) следующего листа. При этом с исходным листом ничего не происходит. Mihail72856