Как сделать msgbox переменной и вызвать ее в обработчике ошибок? - PullRequest
0 голосов
/ 12 марта 2020

Я работал над любимым проектом, и мне было интересно, как создать более гибкий способ изменить сообщение, отображаемое в моем обработчике ошибок, и сэкономить меня на случай, если я решу изменить его позже, но проходя мимо, чтобы изменить все сообщения в моем коде.

Возможно ли это?

1 Ответ

0 голосов
/ 12 марта 2020

Я понял способ, и я хотел бы поделиться этим здесь с вами, ребята. Я уверен, что другие идеи и входные данные также будут полезны и приветствуются!

Чтобы сделать сообщение более гибким, я определил несколько Publi c Const, содержащих:

Public Const strGlobalErrorMsg_Title = "ERROR"

Public Const strGlobalErrorMsg_Line1 = "Sorry"
Public Const strGlobalErrorMsg_Line2 = "Make sure you entered the correct info and try again."
Public Const strGlobalErrorMsg_Line3 = "Error Number: "
Public Const strGlobalErrorMsg_Line4 = "Description: "
Public Const strGlobalErrorMsg_Line5 = "Form: "
Public Const strGlobalErrorMsg_Line6 = "Line number: "
Public Const strGlobalErrorMsg_Line7 = "me@me.com"

Public strNomeFormulario As String 

strNomeFormulario - это строка, которая будет содержать имя формы из строковой переменной, которая будет назначена при инициализации пользовательской формы, следовательно, это необязательно.

Private Sub UserForm_Initialize()
    strNomeFormulario = Me.Caption
End Sub

Затем я создал sub только для отображения окна сообщения:

Sub MsgBoxError()
MsgBox strGlobalErrorMsg_Line1 & vbCrLf & vbCrLf & _
            strGlobalErrorMsg_Line2 & vbCrLf & vbCrLf & _
            strGlobalErrorMsg_Line3 & Err.Number & vbCrLf & _
            strGlobalErrorMsg_Line4 & Err.Description & vbCrLf & _
            strGlobalErrorMsg_Line5 & strNomeFormulario & vbCrLf & _
            strGlobalErrorMsg_Line6 & Erl & vbCrLf & vbCrLf & _
            strGlobalErrorMsg_Line7, vbExclamation, strGlobalErrorMsg_Title
End Sub

И оно будет вызываться из sub при обнаружении ошибки:

ErrHandler:
    Call MsgBoxError

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

Private Sub CommandButton1_Click()

On Error GoTo Err_Handler:

Dim X As Integer: X = 5

Dim Y As Integer: Y = 0

Dim intResult As Integer: intResult = X / Y ' It will generate an error because no number can be divided by zero.

Err_Handler:
    Call MsgBoxError

End Sub

Исходя из этой идеи, вы можете разработать свой собственный обработчик ошибок и, если решите изменить его позже, все вам нужно изменить Sub вместо каждого куска кода.

Также я заметил, что могу установить константы publi c для заголовков msgboxes и использовать их в сообщениях, когда транзакции в порядке или

Надеюсь, это кому-нибудь поможет!

...