Страницы: 1
RSS
Ошибка при повторном запуске формы
 
Господа специалисты, подскажите, в чем может быть проблема:  
 
Есть прикреплённый файл в этой статье:  
http://excelvba.ru/code/frmAbout  
 
Первый запуск формы всегда проходит удачно, а при втором - вылетает ошибка  
(причем у меня - License for this component not found, а у других пользователей - ошибка 429)  
 
Форма - стандартная, никаких лишних или нестандартных компонентов на ней нет.  
 
PS: Если перед повторным запуском из окна Immediate выполнить команду END - повторный запуск происходит успешно.  
Значит, при закрытии формы крестиком что-то остаётся висеть в памяти.  
Вопрос - что именно?  
 
Пробовал на событие нажатия крестика вешать команду END - не помогает:  
 
Private Sub UserForm_Deactivate(): End: End Sub  
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer): End: End Sub  
 
У кого какие идеи?
 
Методом исключения выявил - виновата бегущая строка. Почему - не знаю...
 
Если дождаться появление "Excel, Word, CorelDRAW" (остальное не прочесть - локаль нерусская :) ), то ошибки при повторном запуске нет.  
Может Do-Loop или While-Wend виноваты?
 
Если отключить эту строку, то ошибки почти нет (иногда бывает после редактора):  
 
Me.Label_creeping_line.Caption = Left(txt, i): If CloseForm Then End
 
Аха. Помню такую штуку. Еще когда начинал VBA изучать (около года назад) на Ваш сайт наткнулся, и эту штучку запустил. Класс)  
 
По теме:  
 
Если за комментировать эту строку:  
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer): CloseForm = True: End Sub  
 
у меня все работает. Глубже разбираться - не знаю)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Я бы заменил вышеуказанную строку на    
 
Private Sub UserForm_Terminate(): CloseForm = True: End Sub  
 
если я правильно понял код.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Мда. Действительно вопрос на засыпку. Вышеуказанный пост - результат ноль. Не берите во внимания. Как я понял ошибка здесь:  
 
If CloseForm Then End
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Sub ShowText(ByVal StopDuration As Double, ByVal Pause As Double, ByVal txt As String)  
If Not CloseForm Then  
   For i = 1 To Len(txt)  
       Me.Label_creeping_line.Caption = Left(txt, i)  
       t = Timer: While Timer < t + Pause: DoEvents: Wend  
   Next i  
   t = Timer: While Timer < t + StopDuration: DoEvents: Wend  
   Me.Label_creeping_line.Caption = ""  
   End If  
End Sub
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Ха. Привет Биллу Гейтсу.  
 
Поставьте метку в процедуре запуска формы. Думается, ошибка седела в DoEvents.  
 
После долгих размышлений (код ниже). Остальное не менять.  
 
Sub ShowForm()  
On Error GoTo L1  
   frmAbout.Show  
L1: If Err > 0 Then Resume  
End Sub  
 
p.s.: опять-таки за то что это будет работать корректно не ручаюсь : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Интересный эффект - вроде помогает, но если подождать пяток секунд и нажать - та же ошибка :(
 
Это я отвечал на 04.08.2011, 16:32    
Последнее не проверял пока...
 
---------------------------  
Microsoft Visual Basic  
---------------------------  
Run-time error '429':  
 
ActiveX component can't create object  
---------------------------  
OK   Help      
---------------------------  
 
Это по чётным запускам...
 
Последний вариант тоже не рабочий? О_о
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=Hugo}{date=04.08.2011 05:17}{thema=}{post}Интересный эффект - вроде помогает, но если подождать пяток секунд и нажать - та же ошибка :({/post}{/quote}не удивительно) Ибо я не досмотрел и по сути, цикл продолжал выполняться.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
в модуле книги
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Работает.  
Только я не понял - почему при запуске работает, а из редактора ругается?
 
{quote}{login=Hugo}{date=04.08.2011 05:58}{thema=}{post}Работает.  
Только я не понял - почему при запуске работает, а из редактора ругается?{/post}{/quote}Можно поподробней?) Прям поэтапно, как сделать так, чтобы "ругалась при запуске из редактора"?
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Вроде вделал вариант, который не вылетает.  
(но особо не тестировал)  
 
Исправил кое-что - добавил несколько DoEvents, заменил END на EXIT SUB, да и проверок на запущенность формы добавил.  
Теперь вроде не появляется ошибка - но причина её появления мне так и не стала ясна.  
 
(залил исправленный файл вместо старого)
 
{quote}{login=nerv}{date=04.08.2011 06:54}{thema=}{post}{quote}{login=Hugo}{date=04.08.2011 05:58}{thema=}{post}Работает.  
Только я не понял - почему при запуске работает, а из редактора ругается?{/post}{/quote}Можно поподробней?) Прям поэтапно, как сделать так, чтобы "ругалась при запуске из редактора"?{/post}{/quote}  
Да вот пытался на работе под 2003 с нерусской локалью запустить из редактора по Play и по F8 - не шло. Типа ошибка компиляции или что-то вроде того.  
Сейчас дома файл скачал -  всё отлично работает, как угодно.
 
"но причина её появления мне так и не стала ясна"  
 
EducatedFool, могу ошибаться, но это беконечный цикл в процедуре StartAd:  
 
 
Sub StartAd()  
   Do  
ShowText аргументы процедуры  
   Loop  
End Sub  
 
Sub ShowText(Тра-ля-ля)  
выход из процедуры, сгенерированный пользователем. Т.е. по идее StartAd должна продолжать работать.  
End Sub
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
к моемы выше изложенному посту еще можно добавить End ( как причину возникновения ошибки)  
 
Что бы понять причину возникновения ошибки, сделайте следующее:  
 
1. Скачайте файл : )  
2. После открытия книги у вас процедура автоматически запускает форму. Закройте форму. Откройте редактор VBE. Установите точку останов в этой строке:  
 
Private Sub UserForm_Terminate(): CloseForm = True: Unload Me: End Sub  
 
3. Перейдите на лист. Нажмите кнопку. Закройте форму. Далее пошагово F8.  
 
И вы увидите, как у вас КОРРЕКТНО завершается процедура одна, затем другая.  
 
Чтобы понять причину возникновения ошибки, замените:  
If CloseForm Then Exit Sub  
на  
If CloseForm Then End  
и проделайте все вышеизложенное.  
 
 
p.s.: я не собираюсь выставлять из себя умника и не мне Вас учить (скорее наоборот : ) ), но это (причина ошибки) мое мнение.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
p.p.s: если не ошибаюсь, можно даже так (без Unload Me)  
 
Private Sub UserForm_Terminate(): CloseForm = True: End Sub
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
А Вы ведь так и не посмотрели) Тогда зачем спрашивать...
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
Страницы: 1
Наверх