On Error GoTo

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
vladimirr
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 01.01.2004 (Чт) 22:57
Откуда: Ставрополь

On Error GoTo

Сообщение vladimirr » 20.01.2004 (Вт) 11:37

Почему в этом участке кода
Private Sub Command1_Click()
On Error GoTo ErrorHandler
sNameFile = Dir1.Path + "\" + Text1.Text + ".txt"
Set file = a.CreateTextFile(sNameFile)
file.Close
ErrorHandler:
MsgBox "Опиерация создания файла успешно провалилась!", vbCritical, "Мой проект"
File1.Refresh
Dir1.Refresh
End Sub
Всегда выдаётся сообщение об ошибке, хотя файл прекрасно создаётся.

А вот здесь
Private Sub Command2_Click()
On Error GoTo qwer
Set File2 = a.GetFile(Dir1.Path + "\" + File1.FileName)
File2.Delete
File1.Refresh
qwer:
MsgBox "Опирация удаления файла успешно провалилась!", vbCritical, "Мой проект"
End Sub
При возникновении ошибки выдаётся обычное приглашение на отладку.
Почему?

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

ErrHandler

Сообщение hCORe » 20.01.2004 (Вт) 11:44

Номер 1 - здесь в любом случае идет переход на метку ErrorHandler. В случае ошибки - немедленный, в случае нормальной работы - последовательный. Просто используй этот код:

Код: Выделить всё
Private Sub Command1_Click()
On Error GoTo ErrorHandler
Dim DPath as String
DPath = Dir1.Path
'если это буква диска, то обрезать
If Len(DPath) = 3 Then DPath = Mid(DPath,1,2)
If Len(Text1.Text)=0 Then
MsgBox "Пустые файлы не создаем!"
Exit Sub
End If
sNameFile = DPath & "\" & Text1.Text & ".txt"
Set file = a.CreateTextFile(sNameFile)
file.Close
GoTo NormalEnd
ErrorHandler:
MsgBox "Операция создания файла успешно провалилась!", vbCritical, "Мой проект"
NormalEnd:
File1.Refresh
Dir1.Refresh
End Sub


Номер 2 - это типичный глюк VB. Если уж так хочется, используй инструкцию On Error Resume Next, а после необходимых процедур проверяй, есть ли ошибка:
Код: Выделить всё
If Err<>0 Then
MsgBox "Ошибочка, сэр!"
'очистка
Err.Clear
End If
Моду создают модоки, а распространяют модозвоны.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 20.01.2004 (Вт) 12:07

2 hCORe

Зачем городить две метки, если можно просто снести ErrorHandler в самый конец субы, а перед ним вставить Exit Sub? :lol:

vladimirr
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 01.01.2004 (Чт) 22:57
Откуда: Ставрополь

Сообщение vladimirr » 20.01.2004 (Вт) 12:17

Хорошо, спасибо. Но вот при создании файла с тем же именем (по сути, единственная ошибка, которая тут может возникнуть) сообщение не появляется! Причём ни в первом случае (с 2 метками), ни во втором!

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

FileExists

Сообщение hCORe » 20.01.2004 (Вт) 12:21

Так он же перезаписывается... Либо используй функцию FileSystemObject FileExists:
Код: Выделить всё
Dim fso As FileSystemObject
If fso.FileExists("<путь к файлу>") Then _
fso.DeleteFile "<путь к файлу>", True


или стандартную VBшную функцию Dir:
Код: Выделить всё
If Len(Dir("<путь к файлу>"))<>0 Then _
Kill "<путь к файлу>"
Последний раз редактировалось hCORe 20.01.2004 (Вт) 12:32, всего редактировалось 1 раз.
Моду создают модоки, а распространяют модозвоны.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 20.01.2004 (Вт) 12:25

И еще одно замечание - код
Код: Выделить всё
If Len(Dir("<путь к файлу>"))=0 Then _
Kill "<путь к файлу>"
Бессмысленен и ошибочен - убить файл, которого нет, нельзя.
надо тогда уж
Код: Выделить всё
If Len(Dir("<путь к файлу>"))<>0 Then _
Kill "<путь к файлу>"

vladimirr
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 01.01.2004 (Чт) 22:57
Откуда: Ставрополь

Сообщение vladimirr » 20.01.2004 (Вт) 12:30

Тут курьёз в том, что при удалении всё идёт прекрасно. Проблема – при создании файла. Под словами «во втором» – я имел ввиду второй ответ, после модератора, но тем не менее огромное спасибо.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

fixed

Сообщение hCORe » 20.01.2004 (Вт) 12:33

Ошибка в примере уже исправлена :wink: :wink: :wink:
Моду создают модоки, а распространяют модозвоны.

vladimirr
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 01.01.2004 (Чт) 22:57
Откуда: Ставрополь

Сообщение vladimirr » 20.01.2004 (Вт) 12:47

Всё, дошло, ещё раз благодарю, вы мне очень помогли.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 1

    TopList