Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не срабатывает on error / 19 сообщений из 19, страница 1 из 1
12.01.2013, 11:01
    #38107396
bac
bac
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
   excelVersion = "0"
   On Error GoTo noExcel
   Dim objExcel As Object
   Set objExcel = CreateObject("Excel.Application")
   excelVersion = objExcel.Version
   objExcel.Quit
noExcel:
    On Error GoTo 0



Если на компьютере не установлен excel, то программа выдаёт сообщение, что не может открытить ActiveX и завершается.
Мне хотелось бы просто отключить фукции формирования документов в excel и продолжить работу.
Уважаемые коллеги нет ли у кого соображений по этому поводу?

Win XP/7/2008 R2
VB6
...
Рейтинг: 0 / 0
12.01.2013, 11:13
    #38107399
Gwa
Gwa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
bac,
Вы же сами завершаете программу, вызывая GoTo 0 !
Вместо этого отключайте Ваши "функции формирования"..
...
Рейтинг: 0 / 0
12.01.2013, 13:41
    #38107476
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
GwaВы же сами завершаете программу, вызывая GoTo 0 !On Error Goto 0 означает отключение ранее назначенного On Error, а не выход из программы.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
noExcel:
On error Goto -1
On error Goto errh
...
exit sub
errh:
debug.print err.number

Goto -1 это недокументированная фишка, которая отключает у метки noExcel признак обработчика ошибок. После это можно заново установить On Error.
...
Рейтинг: 0 / 0
12.01.2013, 20:23
    #38107792
bac
bac
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
Antonariy,

Возможно я не правильно объяснил. Мне не надо ничего отключать. Теоретически должно сработать On Error GoTo noExcel. А вместо этого выводится сообщение и программа завершается. Как будто нет перехвата ошибки.
...
Рейтинг: 0 / 0
12.01.2013, 20:57
    #38107826
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
bacдолжно сработать On Error GoTo noExcel.Оно срабатывает. Но в этом коде его увидеть невозможно, если не произойдёт второй ошибки (которой просто неоткуда взяться).

bacвместо этого выводится сообщениеВ приведённом коде нет вывода сообщения. Не морочьте нам голову.
...
Рейтинг: 0 / 0
12.01.2013, 22:42
    #38107919
bac
bac
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
...
Рейтинг: 0 / 0
12.01.2013, 22:45
    #38107921
bac
bac
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
Если посмотреть по отладчику то
Код: vbnet
1.
Set objExcel = CreateObject("Excel.Application")


Именно на этой строке валится
...
Рейтинг: 0 / 0
12.01.2013, 22:51
    #38107924
bac
bac
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
Утверджаю, что в моей программе нет вывода такого сообщения
...
Рейтинг: 0 / 0
12.01.2013, 22:51
    #38107925
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
Покажите код процедуры целиком.
...
Рейтинг: 0 / 0
12.01.2013, 22:58
    #38107932
bac
bac
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
Antonariy,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
'======================================
' Главная процедура
Sub Main()

    InitCommonControlsVB
    idUser = 0
    NPP = 0
    lShowData = False
    lSchFio = True       ' Поиск по фамилии
    lSchDoc = False      ' Поиск по документу, удостверяющему личность
    lSchPol = False      ' Поиск по страховому свидетельству
    On Error GoTo Err_handler_ODBC
    sqlServer = GetRegString(HKEY_LOCAL_MACHINE, "SOFTWARE\ODBC\ODBC.INI\bp", "SERVER")
    If (sqlServer = "") Then
        sqlServer = GetRegString(HKEY_CURRENT_USER, "SOFTWARE\ODBC\ODBC.INI\bp", "SERVER")
    End If
    On Error GoTo 0

    Set dbCn = New rdoConnection           ' Открыть базу данных
    dbCn.Connect = "DSN=bp;"

    Dim rsVers As rdoResultset
    Set rsVers = dbCn.OpenResultset("SHOW VARIABLES like 'version'")
    MySQLVersion = rsVers!Value
    If Mid(rsVers!Value, 1, 4) <= "4.0." Then   ' Если не версия 4.0.
       MsgBox "Не поддерживается работа с MySQL версии ниже 4.1!", vbCritical
       End
    End If

    If Mid(rsVers!Value, 1, 4) = "4.1." Then   ' Если версия 4.1.
        execSQL "SET DATEFORMAT ymd"
    End If
    dbCn.Execute "SET NAMES 'cp1251'"
    dbCn.Execute "USE bp"

    rsVers.Close

    wordVersion = "0"
    On Error GoTo noWord
    Dim objWord As Object
    Set objWord = CreateObject("Word.Application")
    wordVersion = objWord.Version
    objWord.Quit
noWord:
    On Error GoTo 0

    excelVersion = "0"
    On Error GoTo noExcel
    Dim objExcel As Object
    Set objExcel = CreateObject("Excel.Application")
    excelVersion = objExcel.Version
    objExcel.Quit
noExcel:
    On Error GoTo 0
    If wordVersion = "0" Then
        MsgBox "Внимание не установлен Microsoft Word!" & vbCr & "Выписка рецептов не возможна!", vbExclamation
    End If

    logRec "Start"

    SetLayout kbrdRussian

    Dim fLogin As New frmLogin   ' Вызвать форму регистрации пользователя в системе
    fLogin.Show vbModal
    If Not fLogin.OK Then        ' Если регистрация пользователя отменена
       End
    End If
    Unload fLogin

    frmSplash.Show               ' Показывать форму вспышки пока инициализирется главная форма
    frmSplash.Refresh

    loadOptions                  ' Загрузить из базы Опции

    If Not Integrity() Then
       MsgBox "Нарушена целостность программы или не обновлена версия!", vbCritical
       End
    End If

    Set b64 = New base64
    
    Set fMainForm = New frmMain
    Load fMainForm
    Unload frmSplash

    fMainForm.Show               ' Переход в главную форму программы
    Exit Sub

Err_handler:
    MsgBox "Ошибка установки соединения с базой данных! (" & Err.Number & ")" & Chr(13) & Err.Description, vbCritical
    End
Err_handler_ODBC:
    MsgBox "Не описан источник данных bp! (" & Err.Number & ")" & Chr(13) & Err.Description, vbCritical
    End
End Sub
...
Рейтинг: 0 / 0
12.01.2013, 23:25
    #38107963
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
bac,

Statement Description ......On Error GoTo 0 Disables any enabled error handler in the current procedure.
?
...
Рейтинг: 0 / 0
12.01.2013, 23:29
    #38107968
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
1
13759131
2
вынеси определение версий для Ворда/Экселя в отдельные функции
3
вообще, имхо , очень "не слабо" подымать Ворд/Эксель Апп, что бы выяснить версию ...
через рееестр - не достаточно было бы ?
...
Рейтинг: 0 / 0
12.01.2013, 23:34
    #38107971
bac
bac
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
qwerty112bac,

Statement Description ......On Error GoTo 0 Disables any enabled error handler in the current procedure.
?

Это я в курсе. И в соотвествии с программой с начала устанавливается перехват ошибки, а когда в нем нет нуж ды отменяется.
...
Рейтинг: 0 / 0
12.01.2013, 23:36
    #38107973
bac
bac
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
А кого колышит, что я делаю для определения версии?
До этого ведь не доходит! А?
...
Рейтинг: 0 / 0
12.01.2013, 23:37
    #38107976
bac
bac
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
qwerty1121
2
вынеси определение версий для Ворда/Экселя в отдельные функции


Что это дает? Конечно сейчас проверю!
...
Рейтинг: 0 / 0
12.01.2013, 23:38
    #38107980
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
Код: vbnet
1.
2.
3.
4.
    On Error GoTo 0

    Set dbCn = New rdoConnection           ' Открыть базу данных
    dbCn.Connect = "DSN=bp;"

А если нет соединения, можно невозбранно вылетать с ошибкой?
bacТеоретически должно сработать On Error GoTo noExcel.Если сработало On Error GoTo noWord, GoTo noExcel не сработает.
Невозможно использовать "on error goto метка" в обработчике ошибок, не отключив признак обработки ошибки.
Еще раз перечитайте мой первый пост.

Завершение программы с помощью end довольно часто происходит с ошибкой. Лучше избавляйтесь от этой дурной привычки.
...
Рейтинг: 0 / 0
12.01.2013, 23:47
    #38107994
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
bacqwerty112bac,

Statement Description ......On Error GoTo 0 Disables any enabled error handler in the current procedure.
?

Это я в курсе. И в соотвествии с программой с начала устанавливается перехват ошибки, а когда в нем нет нуж ды отменяется.
это ты, как раз, "не в курсе"
1
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub test()
On Error GoTo Err1
    Dim i
    i = 1 / 0
Err1:
On Error GoTo 0
On Error GoTo Err2
    i = 1 / 0

Err2:
    MsgBox "!"
End Sub


2
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub test()
On Error GoTo Err1
    Dim i
    i = 1 / 0
Err1:
On Error GoTo -1
On Error GoTo Err2
    i = 1 / 0

Err2:
    MsgBox "!"
End Sub

...
Рейтинг: 0 / 0
13.01.2013, 00:05
    #38108005
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
А вот пример на goto 0

Код: vbnet
1.
2.
3.
4.
5.
6.
Sub test()
    On Error Resume Next
    Debug.Print 1 / 0
    On Error GoTo 0
    Debug.Print 1 / 0
End Sub
...
Рейтинг: 0 / 0
13.01.2013, 00:09
    #38108008
bac
bac
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает on error
Antonariy,

Спасибо! С -1 Все работает как надо!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не срабатывает on error / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]