|
Exit SubDate: 2015-10-07; view: 458. On Error GoTo m1
Open "a:\Файлик.txt" For Input As #1 Input #1, a Close #1 Debug.Print a
m1: MsgBox ("Ошибка при вводе файла. Возможно, в дисководе нет дискеты.") End Sub Пояснения: Полужирным шрифтом я выделил новые элементы по сравнению с предыдущей программой. Оператор On ErrorGoTo m1 переводится так: "При возникновении ошибки иди к метке m1". Оператор On Error с момента своего выполнения заставляет компьютер быть начеку, не появится ли ошибка при выполнении программы. При ее появлении сообщение Visual Basic об ошибке уже не возникает, программа не прерывается, а управление передается на метку. Поэтому мы должны ставить оператор On Error раньше, чем операторы, могущие дать ошибку (в нашем случае это Open и Input). После метки вы должны поставить операторы, объясняющие пользователю, в чем дело, и помогающие как-то исправить ситуацию. В нашем случае никаких операторов, кроме MsgBox, не нужно. Забывчивый пользователь вставляет дискету в дисковод и снова жмет кнопку Command1. Все в порядке. Обратите внимание на оператор Exit Sub. Если бы его не было, оператор MsgBox выполнялся бы всегда, даже при нормальной работе процедуры.
Написанный нами код слишком примитивен. Во-первых, мы не можем понять, какой оператор дал ошибку - Open или Input. Во-вторых, причин ошибки может быть несколько: отсутствие дискеты в дисководе, отсутствие файла на дискете и т.п. В первом случае мы вдобавок к оператору On ErrorGoTo m1 вставляем после Open, но перед Input, операторOn Error GoTo m2. В результате ошибка в строке Input будет обрабатываться операторами, начинающимися с метки m2., а ошибка в строке Open будет продолжать обрабатываться операторами, начинающимися с метки m1. Во втором случае к нашим услугам объект Err, свойство которого Numberпринимает разные значения в зависимости от характера ошибки. Мы можем, например, писать такие строки: If Err.Number = 71 Then MsgBox ("В дисководе нет дискеты.") ElseIf ………… Номера и имена констант ошибок вы найдете так: Help®Contents® MSDN Library(если она у вас установлена)®Visual Studio documentation ®Visual Basic documentation®Reference®Trappable Errors.
|