Страницы: 1 2 След.
RSS
На глухо виснет Excel при выполнении макроса.
 
Посоветуйте как найти причину зависания Excel при выполнении макроса.  
Что имеем: макрос, который бежит по листам книги и создает копии этих листов в новой книге.  
Все просто и всегда работало, по ка не обновился парк ПК.  
Данный макрос без проблем работал на XP c Excel 2003, 2007 и продолжает работать на аналогичной системе под VirtualBox, а вот с новыми ПК на которых установлен Windows 7 и Excel 2010 возникает проблема на 2х из 5 одинаковых ПК висит с непонятной закономерностью, то может обработать 3 листа, то 5 , то 7, а затем зависает.  
Конфигурация на всех ПК одна и та же, все ставилось с одного образа.  
Память потестил, проблем нет.  
СП1 повторно установить не удается, говорит нет продуктов для обновления.  
Что еще покрутить? Как найти корень зла?
 
Оптимизировать то нечего, алгоритм прост:  
Открыта оригинальная книга, создаем новую, идем на первую на первый лист, копируем его, вставляем в новую книгу, опять возвращаемся в оригинальную книгу, копируем второй лист, вставляем в созданную книгу и так до конца...  
НУ и перед копированием нового листа очищаем буфер
 
roka, чтобы найти корень зла, нужно хотя бы то, с чего начинать "зрить в корень".  
Общий ответ уже получен.
 
Сюдя по описанию процесса - проще текущей книге сделать saveas :)  
Ну и может быть до/потом удалить лишние листы.  
 
А если на каждый лист нужна новая книга - то тут вставлять ничего не нужно, просто копируем-сохраняем.
 
я так понимаю, уважаемый roka, что гуру ненавязчиво Вам намекают насчёт того, что неплохо бы приложить пример Вашего макроса. Если Вы, конечно, хотите получить конкретный совет, а не поговорить о гипотетических причинах.
 
и свои пять копеек, чтоб еще пообиднее : наглухо - вместе пишется
Живи и дай жить..
 
слэн, все правильно - у некоторых на гвоздик... :)
 
выкладываю макрос
 
{quote}{login=roka}{date=25.10.2011 01:52}{thema=}{post}выкладываю макрос{/post}{/quote}
 
Я рад, что вас удалось повеселить.  
Макрос принципиально не выкладывал, ибо он меня удовлетворял и всегда и везде работал.  
Проблемы начались именно с Excel 2010 и не везде.
 
на проблемной машине поставьте в цикл оператор  
doevents  
 
и, когда "зависнет" - остановите ctrl+break-ом чтобы посмотреть где что циклится..  
 
так просто не разобраться..
Живи и дай жить..
 
{quote}{login=The_Prist}{date=25.10.2011 02:21}{thema=}{post}Ничего себе просто копирует...  
На странное поведение может повлиять принтер. Если точнее - драйвера к принтеру на конкретной машине. Попробуйте удалить код установок страницы (With Sheets(sname).PageSetup ... End With) и запустить на проблемных машинах без него.  
{/post}{/quote}  
Параметры печати отключены чекбоксом, не участвуют в данный момент в процессе.  
Зависон происходит во время Копирования\Вставки
 
{quote}{login=The_Prist}{date=25.10.2011 02:26}{thema=Re: Re: }{post}{quote}{login=roka}{date=25.10.2011 02:24}{thema=Re: }{post}Параметры печати отключены чекбоксом, не участвуют в данный момент в процессе.  
Зависон происходит во время Копирования\Вставки{/post}{/quote}У меня вообще интерес пропал. Сначала "просто код копирования" не хотели показывать, а теперь еще и нюансы всплывают...Уже известно, где зависон....{/post}{/quote}  
Так в самом начале было написано:  
.... висит с непонятной закономерностью, то может обработать 3 листа, то 5 , то 7, а затем зависает
 
{quote}{login=roka}{date=25.10.2011 02:36}{thema=Re: Re: Re: }{post}{quote}{login=The_Prist}{date=25.10.2011 02:26}{thema=Re: Re: }{post}{quote}{login=roka}{date=25.10.2011 02:24}{thema=Re: }{post}Параметры печати отключены чекбоксом, не участвуют в данный момент в процессе.  
Зависон происходит во время Копирования\Вставки{/post}{/quote}У меня вообще интерес пропал. Сначала "просто код копирования" не хотели показывать, а теперь еще и нюансы всплывают...Уже известно, где зависон....{/post}{/quote}  
Так в самом начале было написано:  
.... висит с непонятной закономерностью, то может обработать 3 листа, то 5 , то 7, а затем зависает{/post}{/quote}  
Логически делаю заключение, что на копировании\вставке проблема, т.к. до сохранения дело не доходит.
 
{quote}{login=The_Prist}{date=25.10.2011 02:44}{thema=Re: Re: Re: Re: Re: }{post}{quote}{login=roka}{date=25.10.2011 02:39}{thema=Re: Re: Re: Re: }{post}Логически делаю заключение, что на копировании\вставке проблема, т.к. до сохранения дело не доходит.{/post}{/quote}Не доходит или не сохраняет? Может доходит, но на сохранении падает?{/post}{/quote}  
Не доходит. Процесс перебирания листов видно. 4-7 листов обрабатывает на проблемном компе и зависает, на следующие не переходит. Ладно бы если на одном и том же листе это было, а то на разных. Всего в книге листов 40. Такое чувство, что память переполняется. в Диспетчере задач смотрю вроде ок все, правда в это время Эксель дает 30% нагрузку на процессор.
 
Не доходит. Процесс перебирания листов видно. 4-7 листов обрабатывает на проблемном компе и зависает, на следующие не переходит. Ладно бы если на одном и том же листе это было, а то на разных. Всего в книге листов 40. Такое чувство, что память переполняется. в Диспетчере задач смотрю вроде ок все, правда в это время Эксель дает 30% нагрузку на процессор.
 
Вот что удалось выяснить в результате анализа настроек Экселя на всех ПК.  
На тех, которых макрос работал прекрасно, было установлено: "Сохранять файлы в следующем формате: Книга Excel 97-2003", на проблемных было просто в формате "Книга Excel".  
После установки значений сохранять в формате 97-2003, на этих компах исчезла проблема с зависанием.  
Странно все это :(
 
{quote}{login=The_Prist}{date=25.10.2011 03:18}{thema=Re: }{post}{quote}{login=roka}{date=25.10.2011 03:13}{thema=}{post}Вот что удалось выяснить в результате анализа настроек Экселя на всех ПК.  
На тех, которых макрос работал прекрасно, было установлено: "Сохранять файлы в следующем формате: Книга Excel 97-2003", на проблемных было просто в формате "Книга Excel".  
После установки значений сохранять в формате 97-2003, на этих компах исчезла проблема с зависанием.  
Странно все это :({/post}{/quote}Странно то, что помощь нужна Вам, а советы Вы не слушаете. Я Вам рекомендовал строку с условием при сохранении убрать и показал на что заменить.    
Но у Вас же "до сохранения не доходит"...{/post}{/quote}  
и точно не доходит, но ради научного эксперемента сейчас попробую
 
Замените xlExcel8 на -4143, и будет вам щастье!  
Где собака порылась не известно, но методом научного тыка установлено - так работает всегда.
 
Что за гадость происходит с цитированием. :( отправляет не то что пишу.  
Поэкспериментировал с SaveAs    
Установка в Экселе Сохранять в формате Книга Excel  
И строка в коде:  
Можно просто:  
Workbooks(newbookname).SaveAs (pname & "\" & nname), FileFormat:=xlExcel8  
Будет работать во всех версиях. Единственное, если nname не содержит расширение я бы посоветовал записывать так:  
Workbooks(newbookname).SaveAs (pname & "\" & nname & ".xls"), FileFormat:=xlExcel8  
 
Результата не дало, продолжает висеть
 
расширение определено:  
nname = "КНИГА " + Workbooks(bname).Sheets("Главный").Cells(6, 6) + " " + Workbooks(bname).Sheets("Главный").Cells(5, 6) + ".xls"
 
Может проблема в том, что главная книга в формате 2003, а код  
 Workbooks.Add xlWorksheet  
 newbookname = ActiveWorkbook.Name  
создает книгу в формате 2010 и в момент копирования листов со сложным форматированием идет разность в форматах и в результате чего происходит зависание?
 
{quote}{login=The_Prist}{date=25.10.2011 03:31}{thema=Re: }{post}{quote}{login=RAN}{date=25.10.2011 03:25}{thema=}{post}Замените xlExcel8 на -4143, и будет вам щастье!  
Где собака порылась не известно, но методом научного тыка установлено - так работает всегда.{/post}{/quote}И Вы не правы! Для Excel xlExcel8 и -4143 имеют одинаковую силу. Это будет иметь значение, если Вы будете обращаться к Excel из другой программы - тогда надо указывать числовую константу. А внутри Excel это дело не изменит. {/post}{/quote}  
Я тоже так думал. Однако при использовании xlExcel8 возникала ошибка, а после замены на -4143 ошибка исчезла. (EX 2007)
 
-4143 - проблемы не решает.  
думаю использовать вначале макроса: Application.DefaultSaveFormat = xlExcel8  
а перед концом Application.DefaultSaveFormat = xlOpenXMLWorkbook
 
{quote}{login=roka}{date=25.10.2011 05:01}{thema=}{post}-4143 - проблемы не решает.  
думаю использовать вначале макроса: Application.DefaultSaveFormat = xlExcel8  
а перед концом Application.DefaultSaveFormat = xlOpenXMLWorkbook{/post}{/quote}  
Так вот это - xlExcel8 в 2003 вызовет ошибку! Вы хоть читайте, что Вам советуют.  
The_Prist писал - xlNormal. Воспринимается всеми версиями.
Я сам - дурнее всякого примера! ...
 
Еще раз повторяю, ошибка появляется далеко до сохранения, это можно по коду определить, раз все листы в книге не отрабатывает. Пробовал всякие -4143 и xlNormal на авось, авось не пришел.  
А вот Application.DefaultSaveFormat = xlExcel8 в начале макроса, решило проблему  
Видимо, т.к. главная книга в формате 2003, то и новую книгу надо сразу как-то создавать в формате офиса 2003.
 
{quote}{login=KukLP}{date=25.10.2011 05:08}{thema=Re: }{post}{quote}{login=roka}{date=25.10.2011 05:01}{thema=}{post}-4143 - проблемы не решает.  
думаю использовать вначале макроса: Application.DefaultSaveFormat = xlExcel8  
а перед концом Application.DefaultSaveFormat = xlOpenXMLWorkbook{/post}{/quote}  
Так вот это - xlExcel8 в 2003 вызовет ошибку! Вы хоть читайте, что Вам советуют.  
The_Prist писал - xlNormal. Воспринимается всеми версиями.{/post}{/quote}  
xlNormal - это только для 2003 офиса, 2007 и 2010 воспринимает как книгу в новом формате.  
Для работы макроса в разных версиях офиса у меня и стояло обработка.  
   If Application.Version = "12.0" Or Application.Version = "14.0" Then  
       Workbooks(newbookname).SaveAs (pname + "\" + nname), FileFormat:=xlExcel8  
   Else: Workbooks(newbookname).SaveAs (pname + "\" + nname)  
   End If  
Определяем версию в которой работаем, если 2007 или 2010, то xlExcel8, если нет (в данный момент только ниже) то без параметров и идет как xlNormal
 
Что Вы говорите! Я выполнил в 2007:  
Public Sub www()  
ThisWorkbook.SaveAs ThisWorkbook.Name & ("1.xls"), xlNormal  
End Sub  
И потом нормально открыл в 2003
Я сам - дурнее всякого примера! ...
 
Добавлю, в 2003 так же работает.
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=25.10.2011 05:29}{thema=}{post}Добавлю, в 2003 так же работает.{/post}{/quote}  
Да что вы к xlNormal привязались, говорю же проблема до сохранения.  
Допустим решили, что xlNormal круче, чем xlExcel8 (Записал для себя)  
Но проблема гораздо раньше проявляется, далеко до сохранения.
Страницы: 1 2 След.
Читают тему
Наверх