Excel - Mostrás errores en macros.

 
Vista:
sin imagen de perfil

Mostrás errores en macros.

Publicado por Roberto (9 intervenciones) el 21/11/2022 17:34:57
Hola a todos/as
Tengo un libro que tiene muchas macros.
Quiero que cuando falle una de ellas, me salga una ventana indicándome el error y que me lo notifique por correo.
He estado leyendo y veo que juntando ejemplos, puedo conseguirlo, pero quiero saber si el código Vba lo tengo que copiar en cada una de las macros o hay forma de que ponerlo solo una vez y que actúe si cualquiera de ellas da error?.
Alguien tiene algún código sencillo para enviar un correo a una dirección cuando una de las macros de error, que me notifique el error y la macro o solo en error?.

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Mostrás errores en macros.

Publicado por Roberto (9 intervenciones) el 21/11/2022 20:37:39
El codigo que tengo preparado para esto es este:

Sub prueba()
On Error GoTo MiManejoDeErrores
Exit Sub
MiManejoDeErrores:
Select Case Err.Number
Case Else 'Para un error no contemplado
MsgBox "Se ha producido un error: " & Err.Description & vbNewLine & "El código se detendrá."
Exit Sub
End Select
End Sub

Pero incluirlo en cada una de las macros
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Mostrás errores en macros.

Publicado por Antoni Masana (2477 intervenciones) el 22/11/2022 16:35:46
Tienes que hacer varias cosas para los errores.

- Al inicio de la macro poner lo que hay en negrita

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
Sub Macro()
    On Error Goto Etiqueta
    {codigo de la macro}
    Exit Sub
Etiqueta:
    Call Control_Error(Err)
End Sub
 
Macro es cualquier macro.
Control_Error es la macro que muestra el mensaje y envía el correo. Se le pasa por parámetros el objeto Err
 
Un Ejemplo
 
[code]Option Explicit
 
Sub Mi_Macro()
    Dim a As Integer
    On Error GoTo Errores
    a = 9 / 0
    Exit Sub
Errores:
    Call Control_Errores(Err, "Mi_Macro")
End Sub
 
Sub Control_Errores(Err As Object, Proceso As String)
    MsgBox "Error: " & Err.Number & _
            vbCrLf & _
            vbCrLf & _
           "Descripcion: " & Err.Description & _
            vbCrLf & _
            vbCrLf & _
           "Proceso: " & Proceso
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mostrás errores en macros.

Publicado por Roberto (9 intervenciones) el 23/11/2022 18:21:16
Nuevamente, muchas gracias. Da gusto ver el control que tienes sobre el tema, que envidia.

Lo he puesto como me dices y me queda así (un ejemplo en 2 macros):
Sub tt()
Dim objWord
On Error GoTo Errores
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Dim objDoc
Set objDoc = objWord.Documents.Open("N:\Anexos tt.dotx")
Dim ImpresoraDefecto As String
ImpresoraDefecto = objWord.ActivePrinter
objWord.Activate
ncopias = Range("C4").Value
objWord.PrintOut copies:=ncopias
objDoc.PrintOut
objWord.ActivePrinter = ImpresoraDefecto
objDoc.Close (0)
objWord.Quit
Exit Sub
Errores:
Call Control_Errores(Err, "tt")
End Sub

Sub ll()
Dim objWord
On Error GoTo Errores
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Dim objDoc
Set objDoc = objWord.Documents.Open("N:\Anexos ll.dotx")
Dim ImpresoraDefecto As String
ImpresoraDefecto = objWord.ActivePrinter
objWord.Activate
ncopias = Range("C4").Value
objWord.PrintOut copies:=ncopias
objDoc.PrintOut
objWord.ActivePrinter = ImpresoraDefecto
objDoc.Close (0)
objWord.Quit
Exit Sub
Errores:
Call Control_Errores(Err, "ll")
End Sub
Sub Control_Errores(Err As Object, Proceso As String)
MsgBox "Error: " & Err.Number & _
vbCrLf & _
vbCrLf & _
"Descripcion: " & Err.Description & _
vbCrLf & _
vbCrLf & _
End Sub

Pero aun asi me abre el word. Normalemnte el error es porque se ha modificado el nombre del archivo al haber cambiado la version.
Creia que saltaba directamente a (errores:) , que hago mal?.

Para que me envie el correo, tendria que meter el codigo en (Sub Control_errores), no?

Algun codigo sencillo para el envio a una direccion por ootlook?

Muchisimas gracias por la ayuda.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mostrás errores en macros.

Publicado por Roberto (9 intervenciones) el 23/11/2022 18:40:08
Una cosa solucionada,he añadido objword.quit en Errores: y o no me lo abre o me lo cierra, pero no esta abierto, jeje.
Errores:
objWord.Quit
Call Control_Errores(Err, "ll")
End Sub

Si me podeis ayudar con el envio del correo por outlook...

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Mostrás errores en macros.

Publicado por Antoni Masana (2477 intervenciones) el 24/11/2022 15:41:20
Te envío dos rutinas que utilizo para enviar correos.

El primero adjunta una área de la hoja Excel

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
' </> --------------------------------------------------------------------- </>
' </> ---&---   Envia por correo de OUTLOOK                         ---&--- </>
' </> --------------------------------------------------------------------- </>
 
Private Sub Mail_Outlook(Fila)
    Dim Destino As String
 
    ' ---&--- Seleccionamos el rango de celdas a enviar Select
 
    Sheets("Mascara").Select
    ActiveSheet.Range("A1:Q" & Fila + 8).Select
 
    ' ---&--- Es true si son visibles tanto el encabezado de _
              composición de correo electrónico y la barra de _
              herramientas de sobres
 
    ActiveWorkbook.EnvelopeVisible = True
 
    ' ---&--- Llamamos al envío...
 
    With ActiveSheet.MailEnvelope
       .Item.To =
       .Item.cc = ""                         'con copia a...
       .Item.bcc = ""                        'con copia oculta a...
 
       .Item.Subject = "Asunto"              ' Asunto
       .Introduction = "Observaciones"
       .Item.Send
    End With
End Sub

Este envía un texto simple.

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
' </> ------------------------------------------------------------------- </>
' </> ---&--- </>                                             </> ---&--- </>
' </> ---&--- </>   Envio Correo                              </> ---&--- </>
' </> ---&--- </>                                             </> ---&--- </>
' </> ------------------------------------------------------------------- </>
 
Sub Mail_Outlook()
 
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
 
    With OutMail
        .SentOnBehalfOfName = Mail_De
 
        .To = "Destino@hotmail.com"      'destinatario...
        .cc = ""                         'con copia a...
        .BCC = ""                        'con copia oculta a...
 
        .Subject = "Asunto"              ' Asunto
        .Body = "Cuerpo"
        .Send   'or use .Display
    End With
 
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mostrás errores en macros.

Publicado por Roberto (9 intervenciones) el 26/11/2022 00:50:47
Impresionante¡¡¡¡
He probado ambos cambiando algunas instrucciones para que me envíe la descripción del error y PERFECTO¡¡

Nuevamente, MUCHISIMAS GRACIAS¡¡¡
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar