ник: akkorn
Нашел интересную ошибку, которая приводит тихому закрытию как вашего приложения, ТАК И СРЕДЫ РАЗРАБОТКИ!!!
Последовательность:
-создаем новый проект
-создаем форму Frm1, в ней ListBox Lst1
-создаем модуль (имя не важно). В модуле пишем:
Option Explicit
Sub main()
Call uTst(lTst)
End Sub
Sub aa1()
Dim m1 As String: m1 = "ads"
End Sub
|
-далее закрываем проект, сохраняем. По идее, здесь страшного нет ничего. При попытке запустить проект без компиляции- редактор, по идее, должен остановить по ошибке на "Call uTst(lTst)". И все тут. Каково же будет ваше удивление, когда после нажатия на кнопку сообщения окно программы закроется, а в месте с ним тихим сапом закроется и сам редактор. Попробуем?
Ни чего не выходит? Стоит как мертвый и все как должно быть?
Согласитесь, что бы мы ни прописали в процедуре aa1, ОНО ни коим образом не должно отыграть на реакции проекта при его запуске. Верно?? Эта процедура просто вообще не задействуется. Более того, данную процедуру можно преспокойно забросить в кучу других в другие модули! И не найдете вы ее, т.к. она не вызывается в нашем проекте. Да и форма тут ни коим образом не проходит.
Это по идее.
А в реалии не так.
Сохраняем проект, выходим из редактора.
Далее снова открываем проект, и первым делом пишем в процедуре aa1 после определения переменной m1 ЧЕТЫРЕ НОВЫЕ СТРОЧКИ, которые и будут той критической ошибкой:
dim r() as long
redim r(0) as long
r(0)=0
frm1.lst1=r
и на выполнение БЕЗ ЛИШНИХ ДЕЙСТВИЙ!
Обращаю внимание, надо именно вручную набить эти строчки! Раскомментирование не прокатит. Не прокатит и просто запуск с этими строчками, как и копирование их из буфера. Сработает только в том случае, если этих строк в редакторе не было, и только при первом запуске проекта. В любых других случаях все происходит в соответствии с моими ожиданиями.
Обратите внимание: эта ошибка плавающая! Может не сработать первый раз. В таком случае закрываем редактор без сохранения (в том виде, как приведено выше), и снова на запуск и вручную нибиваем код. Причин же этого самого плавания я так и не обнаружил. Но у меня стабильно эту ошибку можно поймать. Не знаю как у вас будет.
Вот инфа, кот. я нарыл в инете:
Правила кодирования
Размещение операторов
В каждой строке кода размещается, как правило, один оператор, причем целиком. Однако иногда для улучшения читабельности одна логическая строка кода может быть разбита на несколько физических строк (с помощью символа продолжения строки – символа подчеркивания) или несколько логических строк могут быть объединены в одну физическую (с помощью символа объединения строк – символа двоеточия), например:
1. Text1.Text = ”Эта строка ” & _
”могла бы быть ” & _
”очень длинной.”
2. Text1.BackColor = vbYellow: Text1.ForeColor = vbRed |
или вот еще от самих:
http://msdn.microsoft.com/ru-ru/library/xxda45fy.aspx |
Кто что думает??
В 2008 (у мня его нет) такой же эффект???
На отлов этого косяка у меня ушло полдня приблизительно. А началось все с определения безобидного массива. А казалось бы...
Ответ: проблема в двоеточии. Уберете- и все буит нормуль.
Так-то
Вообще я не знаю ни единой ошибки, которая ведет себя подобным образом... Вернее не знал...