Forums Últimos mensajes - Powered by IBM
 
Tags Palabras claves

Depurar macro

15/06/2008 - 22:48 por Ramon | Informe spam
Saludos,

Me gustaría pediros sugerencias para depurar el código de una macro
que tengo y que me está creando algun "problema", que no soy capaz de
localizar.

Antes de nada, os cuento que la macro está asociada a un botón de la
hoja y su función es salvar el archivo con un nombre determinado (que
en parte toma de alguna de las celdas) y enviar este archivo por
correo electrónico a unas direcciones que incluye la propia macro.

La versiónde excel que utilizo es excel 2002. Y por si fuera
relevante, os cuento que el programa gestor de correo que utilizo es
Lotus Notes.

El "problema" del que os hablaba no es con la propia misión de la
macro, que se realiza correctamente, sinó después de lanzarla y
finalizar (?) que, a menudo (no siempre), excel queda parpadeando y
aparece un mensaje de error diciendo que se ha producido un error en
la aplicación y que debe reiniciarse. Tras darle a aceptar, excel se
cierra y abre con la hoja con todos los datos salvados y sin mayor
problema. Más que nada es la molestia y la "mala imagen" que produce
ese error.

El error no es de la macro sino de la aplicación, pero no me ocurre
con ningún otro documento ni macro, salvo este. Y siempre ocurre
después de completar la tarea de salvar y crear el mensaje de correo.

Como digo, es algo raro porque aparentemente la macro ya ha
finalizado, pero el problema siempre aparece después de lanzar esta
macro.

Y aquí os paso la macro...:

Private Sub Guardar_y_enviar()

Dim titulo As String, producto As String, ref As String

If (Range("C9").Value = "-") Or (Range("C9").Value = "") Then
MsgBox "Por favor, escoge un producto"

Else
If (Range("C11").Value = "") And (Range("C12").Value = "") And
(Range("D12").Value = "") Then
MsgBox "Por favor, indica una cantidad"

Else
If (Range("L8").Value = "") Then
MsgBox "Por favor, escoge la sección de origen"

Else
If (Range("L9").Value = "") Then
MsgBox "Por favor, escoge la sección de destino"

Else
If (Range("K27").Value = "") Then
MsgBox "Por favor, introduzca la firma del solicitante"


Else
On Error GoTo fallo

Range("X12345").Value = "1"
Range("I5").Value = Format(Now)
Range("M6").Value = Range("L6").Value
ref = Range("M6").Value
producto = normalitzarNom(Range("C9"))
titulo = "Traspaso de " & producto & " - " & ref & ".xls"
ChDir "C:\Traspasos"
ActiveWorkbook.SaveAs Filename:= _
"C:\Traspasos\" & titulo, _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
Application.ActiveWorkbook.SendMail Recipients:=" correo1@yahoo.com,
correo2@yahoo.com"
End If: End If: End If: End If: End If

On Error GoTo 0
Exit Sub


fallo:
MsgBox ("Error no previsto. Llame al responsable facilitando la
información que sigue: " _
& Chr(13) & Chr(13) & "Número de Error : " & _
Err.Number & Chr(13) & "Descripción : " & Err.Description)

End Sub



Os agradecería cualquier sugerencia o aporte que podais hacerme,
puesto que yo ando haciendo pruebas pero no soy capaz de localizar el
problema.
 

Leer las respuestas

#1 Ramon
23/06/2008 - 19:22 | Informe spam
Hola Leandro,

Disculpa que no te haya respondido hasta ahora. Lo cierto es que di el
tema por cerrado y no volví a entrar (te pido disculpas).

Bueno, creo entender que tienes la macro como te hace lo que necesitas
(aumenta el número de albarán e imprime 3 copias) y lo único que te
falta es salvar con un nombre que identifique el archivo.

En mi caso lo resolví salvando el archivo con el nombre "traspaso de
(nombre que tomo de una determinada celda) .xls"

Si tu tienes una celda con el número de albarán, podrías dejar algo
así:


ActiveWorkbook.SaveAs
Filename:="C:\DATOS\2008\ALBARANES\Albaran " & range ("a1") & ".xls", _
        FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
End Sub



Siendo A1 la celda que contiene el número de albarán en tu hoja.

No se si era esto lo que necesitabas?. En cualquier caso, si puedo
colaborar contigo en algo que esté a mi alcance, cuenta con ello.

Saludos,
Ramon

Preguntas similares