Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Visual Basic: Общие вопросы > Сохранить значение объекта err


Автор: BlackSun 01.03.18, 14:09
Перед вызовом процедуры Public Proc1 объект err заполнен некими значениями. В самой Proc1 стоит On Error Resume Next, после выхода из Proc1 имеем чистый err или с данными ошибки от Proc1. Как сохранить данные err, которые было до вызова Proc1?

Автор: Akina 01.03.18, 16:05
Нафига?

Автор: BlackSun 01.03.18, 17:08
Чтобы в конце основной процы Proc0 обработать ошибку! Просто интересно, как сохранить объект целиком, а не 2 свойства.

Автор: Akina 01.03.18, 17:39
Сохрани все свойства - чего там их у Err-то... ну или попробуй выпендриться типа
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Dim arrerr() As Err
вдруг да проскочит...

Автор: leo 02.03.18, 06:32
Цитата BlackSun @
Как сохранить данные err, которые было до вызова Proc1?
...
Чтобы в конце основной процы Proc0 обработать ошибку!

Какой-то странный подход. Ошибку нужно обрабатывать сразу при ее возникновении, а не откладывать на потом. А если в рез-те этой ошибки и Proc1 отработает неправильно?!

Автор: Akina 02.03.18, 08:33
BlackSun
На, развлекайся...
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Type ErrorObject
        Description As String
        HelpContext As Long
        HelpFile As String
        LastDllError As Long
        Number As Long
        Source As String
    End Type
     
    Sub testErrorObject()
    Dim store(1 To 2) As ErrorObject
    Dim i As Integer
     
    On Error GoTo ErrorHandler
     
    Debug.Print 1 / 0
    Debug.Print 1024 * 1024
    Stop
    Exit Sub
     
    ErrorHandler:
    i = i + 1
    store(i).Description = Err.Description
    store(i).HelpContext = Err.HelpContext
    store(i).HelpFile = Err.HelpFile
    store(i).LastDllError = Err.LastDllError
    store(i).Number = Err.Number
    store(i).Source = Err.Source
    Resume Next
     
    End Sub

Автор: MIF 02.03.18, 11:04
Akina,ты в блокноте код писал?

Автор: Akina 02.03.18, 11:43
MIF
Не, в чём-то... кажется, в экселе, но уже не помню... и даже запустил и по Stop посмотрел Locals.

Автор: BlackSun 05.03.18, 16:45
т.е. сохранить сам объект никак? а то я пробовал сделать:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Dim tmpErr As ErrObject
         Set tmpErr = err
но получил далее просто дубликат err, а не самостоятельный объект.

Автор: Akina 05.03.18, 16:54
Сохранить - никак. Ибо похоже, что Err - не объект, а интерфейс некоего объекта...

Автор: VisualProg 06.03.18, 07:16
Цитата Akina @
Ибо похоже, что Err - не объект, а интерфейс некоего объекта...

Интересно, а при передаче по ByVal, как оно себя должно в VB повести?

Автор: Akina 06.03.18, 09:55
VisualProg
Так попробуй, зачем спрашивать-то? Хотя вполне можно предсказать, что получится - то же, что и в сообщении #9. Да и в случае ByRef получится то же самое...

Автор: VisualProg 06.03.18, 11:00
Цитата Akina @
Так попробуй, зачем спрашивать-то?

Кончился у меня басик, дома поднимать времени нету, а на работе только VBA в каком нибудь офисе остался. Так что я с VB совсем завязал, только относительно недавно начал понимать - что же на самом деле у меня было, и какой же я дурак, раз это всё не использовал и не знал :(

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)