Страницы: 1
RSS
Макрос заканчивает работу не дойдя до конца, ошибка не выдается
 
Я написал макрос, который открывает по списку файлы, ищет на определенных листах данные и копирует в отчет. Потом файлы закрываются.  
При этом возникает проблема. Если во время работы макроса я переключаюсь в Файрфокс и пытаюсь написать в окне ввода (в строке поиска или окне ответа на форуме, например), то макрос прекращает свою работу. Ошибка при этом не выдается. Такое впечатление, что просто происходит переход на строку с "End Sub". Какие-то файлы остаются открытыми, файл отчета сформирован наполовину.  
Тут же закрываю все файлы, перезапускаю макрос и жду. Все отрабатывается нормально. Если же полезу в интернет снова, то обрывается гарантированно.  
Случается такое не иногда, а постоянно.  
 
Есть идеи? Может кто сталкивался?
 
Очень странно. Дайте посмотреть чудо макрос ) (в файле) )
 
Код прикрепил.
 
Пока ещё не до конца посмотрел ваш файл, но уже бросилось в глаза строка в начале вашего кода  
 
Application.DisplayAlerts = False  
 
и вы удивляетесь, почему никаких сообщений не показывается. Вы же сами их отключили.  
 
Попробуйте закомментировать эту строку и запустить макрос и полесть в инет. Может какое-нибудь сообщение выскочит
 
... не знаю, кроме того, что у вас отсутствует объявляение переменных, больше ничего странного не нашёл  
 
Если у вас нет объявлений (если вы их случайно не забыли нам выложить), то добавьте их в свой код  
 
Dim fStatPath$, fFileList As Range  
Dim fCompiledFileName$, fFileName$  
Dim sh As Worksheet, fTAdvStartColumn&  
Dim fRowToPasteData&, fLine As Variant  
Dim fDataRowsCount&, fSrcRange As Range  
Dim i&, fTAdvInfoLineNum&, fTASum!, j&
 
{quote}{login=Pavel55}и вы удивляетесь, почему никаких сообщений не показывается. Вы же сами их отключили.{/quote}  
Согласен, выглядит странно :)  
Поправил код и поместил блоки задающие ненужные мне вопросы (удалять ли листы из книги, записать ли книгу в самом новом формате) в следующие рамки:  
Application.DisplayAlerts = False  
...  
Application.DisplayAlerts = True  
 
Однако, в случае непредвиденного прерывания кода окно с кнопкаи "Continue", "Stop", "Debug" должно появляться и при Application.DisplayAlerts = False как я понимаю? А этого не происходит. Все выглядит так, будто макрос завершил работу, но четко видно, что работу он просто бросил посреди дороги, так сказать.  
Только что попробовал удалить один из файлов, открываемых макросом, так VB ругнулся и выдал окно дебаггера, хоть и Application.DisplayAlerts = False.  
 
По поводу переменных.  
Декларацию переменных я отслеживаю и если можно обойтись без  декларирования, то я их как правило опускаю. Попрбую добавить.  
 
В общем буду дальше наблюдать :)  
Спасибо, за оперативную реакцию на вопрос.
 
---  
1. В начале кода смущают такие строки:  
 
Workbooks.Open (fFileName)  
Set fNewWB = ActiveWorkbook  
 
Если переменная fNewWB должна указывать на открываемую книгу, то надежнее вместо этих двух строчек записать одну такую:  
Set fNewWB = Workbooks.Open(fFileName)  
 
Если же под fNewWB подразумевается исходная (мастер) книга, то сначала нужно:  
Set fNewWB = ActiveWorkbook  
а потом уже:  
Workbooks.Open (fFileName)  
 
2. Далее по коду из книги fNewWB удаляется лист "Stat", а затем почему-то делается ссылка на уже не существующий лист:  
Set fStatWS = fNewWB.Sheets("Stat")  
При таком раскладе трудно расчитывать на корректную работу кода.    
 
3. Еще ниже в цикле For Each Next тоже лучше заменить 2 строчки:  
Workbooks.Open (fFileName)  
Set fNewWB = ActiveWorkbook  
на одну:  
Set fNewWB = Workbooks.Open(fFileName)  
 
Проверьте, возможно, ключ к разгадке в этих нюансах.  
---  
ZVI
 
Однако, активно тут на форуме общаются :) Еле нашел свою тему.  
 
По поводу замечаний ZVI.  
Макрос работает уже полгода и работает успешно. Проблема, которую я описал явно указывает не на проблемы в коде, а на некорректную обработку каких-то событий операционной системой.  
Лист "Stat" как раз остается единственным, который не удаляется из книги.  
 
По теме.  
Проблема исчезла :)  
Единственное изменение, которое я внес в код, это то, что я не выключаю Application.DisplayAlerts на все время выполнения макроса. Теперь Application.DisplayAlerts переводится в False только перед командой, которая может вызвать вопрос, на который я не хочу отвечать. Сразу же после выполнения команды Application.DisplayAlerts переводится в True.  
Проблема скорее всего в неправильной обработке событий на уровне офиса и винды. Копаться в этом направлении ни возможности, ни желания нету. Тем более, что мне выдали новый компьютер на работе и соответственно сейчас я буду устанавливать себе винду с "нуля" и офис теперь поставлю 2007-й вместо 2003-го.  
 
Так что тему можно считать полностью исчерпанной. Спасибо за оперативную реакцию и внимание.
 
)) боюсь после установки Office 2007 вы будете частым гостем на этом форуме), т.к. там и интерфейс другой и макросы не все работают, которые работали в 2003 )
Страницы: 1
Читают тему
Наверх