Forçando uma caixa de mensagem personalizada em erro, não pode trabalhar com erros de tempo de execução?

0

Estou tentando criar uma "biblioteca" de tipos para erros que surgem, para que as pessoas que usam minhas planilhas saibam imediatamente o que deu errado. Isso funciona bem para erros padrão, mas não consigo fazer com que ele tropeça em erros de tempo de execução. Neste caso, o Runtime Error 53 está ocorrendo, acho que está tentando excluir um arquivo temporário que não foi salvo com sucesso (que é o que minha caixa de mensagem exibirá.

Observação: não estou tentando resolver esse erro. Eu deliberadamente fiz isso para que os usuários saibam o que deu errado. Eu estou tentando fazer a caixa de mensagem dada quando o Runtime Error 53 acontece.

Portanto, esta macro funciona, pois é apenas um erro padrão 1004:

 Sub ReportSaveandEmail()
   Dim IsCreated As Boolean
   Dim i As Long
   Dim PdfFile As String, Title As String
   Dim OutlApp As Object
   On Error GoTo Whoa

 '-> Sub deleted 

Whoa:
Dim OutPut As Integer   
Select Case Err.Number
    Case 1004 'Search error'
        OutPut = MsgBox("Found an error (#1004).  This error usually occurs when the macro is searching for a file or folder that doesn't exist. Please check your code.", vbCritical, "File not found")
End Select
End Sub

Mas esse erro, um tempo de execução, não tropeça. Acabei de receber uma caixa de mensagem padrão do Excel: "Micosoft Visual Basic | Erro em tempo de execução 53 | Arquivo não encontrado"

 Sub ReportSaveandEmail()
   Dim IsCreated As Boolean
   Dim i As Long
   Dim PdfFile As String, Title As String
   Dim OutlApp As Object
   On Error GoTo Whoa

 '-> Sub deleted 

 Whoa:
     Dim OutPut As Integer    
     Select Case Err.Number
         Case 53 'Can't find file to delete'
        OutPut = MsgBox("Found an error (#53).  This error usually occurs when the macro tries to delete a temporary file that was not successfully created.", vbCritical, "Temp File not found")
End Select      
End Sub

Obrigado!

    
por Lauren 18.06.2017 / 07:07

1 resposta

0

Seu código está incompleto e não demonstra como você definiu o erro.

O aumento deliberado do erro 53 parece funcionar como deveria.

Sub ReportSaveandEmail()

    On Error GoTo Whoa
    Err.Raise 1004
    Err.Raise 53
    Exit Sub

Whoa:

    Select Case Err.number
        Case 1004 'Search error'
            MsgBox "Found an error (#1004).  This error usually occurs when the macro is searching for a file or folder that doesn't exist. Please check your code.", vbCritical, "File not found"
            Resume Next

        Case 53 'Can't find file to delete'
            MsgBox "Found an error (#53).  This error usually occurs when the macro tries to delete a temporary file that was not successfully created.", vbCritical, "Temp File not found"
            Resume Next

    End Select

End Sub

Observe que, quando você aumentar 1004, você precisa limpar ou continuar para permitir que 53 fique preso.

    
por 20.07.2017 / 20:57