Error: ".... No tiene el permiso necesario"

11/06/2006 - 19:54 por klomkbock | Informe spam
Hola a todos.

Cuando ejecuto una macro para intentar guardar un archivo adjunto a
un correo, me aparece este error:

"Se ha producido el error '-2009661435(88370005)' en tiempo de
ejecucion. No se pueden guardar los datos adjuntos. No tiene permiso para
ello."

La maquina es mia y yo soy el usuario permitido. ¿Sabe alguien como
solucionarlo?. Supongo que tendra que ver con la seguridad en macros, pero
la tengo establecida en baja (en excel, en outlook no lo he mirado, pero
me imagino que no debe ser muy conveniente). Adjunto la macro por si es
util.

Public Sub ActualizarCambios()
Dim OutlookApp As New Outlook.Application
Dim crpEntrada As Outlook.MAPIFolder
Dim indMsj As Outlook.Items
Dim msjMensaje As Outlook.MailItem
Dim msjTitulo As String
Dim iIt As Integer
Set crpEntrada = OutlookApp.GetNamespace("MAPI") _
.GetDefaultFolder(olFolderInbox)
Set indMsj = crpEntrada.Items
msjTitulo = "Copiar BIBLIOTECA"
For iIt = 1 To crpEntrada.Items.Count
Set msjMensaje = indMsj.Item(iIt)
With msjMensaje
If .Attachments.Count > 0 Then
If Left(.Subject, 17) = msjMensaje Then _
.Attachments.Item(iIt).SaveAsFile _
"C:\Documents and Settings\Ivan\Mis documentos\" & _
"Librería de Manuel Morales\Copias libreria"
End If
End With
Next
OutlookApp.Quit
Set OutlookApp = Nothing
End Sub

Lo dicho, si alguien me puede echar una mano se lo agradezco.

un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
12/06/2006 - 02:18 | Informe spam
hola, Ivan !

[tal parece que]... solo te hace falta 'complear' la instruccion 'SaveAsFile'... -> con el nombre del archivo -?-
de otra manera... la instruccion para hacer el 'guardar como'... -> se esta quedando 'corta' :))
prueba con algo +/- como lo siguiente [solo aumente una linea para que no se te olvide el separador de rutas '\'] ;)...
With msjMensaje
If .Attachments.Count > 0 Then
If Left(.Subject, 17) = msjMensaje Then _
.Attachments.Item(iIt).SaveAsFile _
"C:\Documents and Settings\Ivan\Mis documentos\" & _
"Librería de Manuel Morales\Copias libreria" & _
"\" & .Attachments.Item(iIt).FileName
End If
End With

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ consulta original __
Cuando ejecuto una macro para intentar guardar un archivo adjunto a un correo, me aparece este error:
"Se ha producido el error '-2009661435(88370005)' en tiempo de ejecucion.
No se pueden guardar los datos adjuntos. No tiene permiso para ello." [...]
Public Sub ActualizarCambios()
Dim OutlookApp As New Outlook.Application
Dim crpEntrada As Outlook.MAPIFolder
Dim indMsj As Outlook.Items
Dim msjMensaje As Outlook.MailItem
Dim msjTitulo As String
Dim iIt As Integer
Set crpEntrada = OutlookApp.GetNamespace("MAPI") _
.GetDefaultFolder(olFolderInbox)
Set indMsj = crpEntrada.Items
msjTitulo = "Copiar BIBLIOTECA"
For iIt = 1 To crpEntrada.Items.Count
Set msjMensaje = indMsj.Item(iIt)
With msjMensaje
If .Attachments.Count > 0 Then
If Left(.Subject, 17) = msjMensaje Then _
.Attachments.Item(iIt).SaveAsFile _
"C:\Documents and Settings\Ivan\Mis documentos\" & _
"Librería de Manuel Morales\Copias libreria"
End If
End With
Next
OutlookApp.Quit
Set OutlookApp = Nothing
End Sub
Respuesta Responder a este mensaje
#2 klomkbock
12/06/2006 - 03:00 | Informe spam
Hola Hector Miguel, muchas gracias por tu ayuda.

Como siempre has vuelto a dar en el clavo.

Con el cambio funciona perfectamente, pero me ocurre algo muy curioso:

Los libros que intento recuperar se llaman todos Libro1, asi que para
que no se sobreescriban al copiarse a la carpeta CopiasLibro ("CopiasAct"
ahora) lo que intento hacer es asignarle el asunto como nombre, que
comienza siempre por "Cambios BILIOTECA " seguido de Now (con dia, hora y
minutos formateado para que no de error en el titulo) lo que hace que
siempre tengan diferente titulo. Tambien parece funcionar, pero resulta
que en mis pruebas solo me copia tres de los mas de 10 archivos adjuntos a
mensajes con ese asunto (1 adjunto por mensaje). Me da la impresion de que
meto la pata en algo relacionado con el contador del bucle for next pero
no acabo de verlo. Te adjunto como esta ahora el procedimiento a ver si
ves donde esta el fallo. Ha cambiado bastante despues de cienmil pruebas
(hasta el directorio a Documentos compartidos por si estaba ahi el fallo)
pero el fondo es el mismo.

Public Sub ActualizarCambios()
Dim OutlookApp As New Outlook.Application
Dim crpEntrada As Outlook.MAPIFolder
Dim indMsj As Outlook.Items
Dim msjMensaje As Outlook.MailItem
Dim adjMensaje As Outlook.Attachment
Dim msjTitulo As String
Dim iIt As Integer
Set crpEntrada = OutlookApp.GetNamespace("MAPI") _
.GetDefaultFolder(olFolderInbox)
Set indMsj = crpEntrada.Items
msjTitulo = "Cambios BIBLIOTECA"
For iIt = 1 To crpEntrada.Items.Count
Set msjMensaje = indMsj.Item(iIt)
With msjMensaje
If .Subject = "" Or .Attachments.Count = 0 Then
If iIt < crpEntrada.Items.Count Then
iIt = iIt + 1
Else
Exit For
End If
Else
If Len(.Subject) > 18 And Left(.Subject, 18) = msjTitulo Then
Set adjMensaje = .Attachments.Item(1)
adjMensaje.SaveAsFile _
"C:\Documents and Settings\All
Users\Documentos\BibliotecaM\CopiasACT" & _
"\" & .Subject 'adjMensaje.FileName
If iIt < crpEntrada.Items.Count Then
iIt = iIt + 1
Else
Exit For
End If
End If
End If
End With
Next
OutlookApp.Quit
Set adjMensaje = Nothing
Set msjMensaje = Nothing
Set indMsj = Nothing
Set crpEntrada = Nothing
Set OutlookApp = Nothing
End Sub

En algun sitio he visto que se eliminaban todas las variables de objeto
creadas y por eso lo he puesto, pero supongo que noes necesario, ¿basta
con OutlookApp?

Muchas gracias de antemano
Un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#3 Héctor Miguel
12/06/2006 - 05:00 | Informe spam
hola, Ivan !

Los libros... se llaman todos Libro1, asi que para que no se sobreescriban
... intento... asignarle el asunto como nombre, que comienza siempre por "Cambios BILIOTECA "
seguido de Now (con dia, hora y minutos formateado para que no de error en el titulo)
... parece funcionar, pero... solo me copia tres de los mas de 10 archivos adjuntos... (1 adjunto por mensaje).
Me da la impresion de que meto la pata en algo relacionado con el contador del bucle for next pero no acabo de verlo [...]
En algun sitio he visto que se eliminaban todas las variables de objeto creadas y por eso lo he puesto
pero supongo que noes necesario, basta con OutlookApp?



1) iniciando con lo relacionado a los 'contadores' en bucles -> For Contador = Minimo To Maximo <...instrucciones...> Next
a) el bucle se encarga de que [el contador] 'avance' automaticamente de 1 en 1 [a menos que le agregues un 'Step']
b) por lo anterior [generalmente] NO es 'necesario' andar 'manipulando' algun avance o retroceso del 'contador' dentro del bucle
c) solo es necesario [en este caso] verificar si 'se cumple/n' algunas condiciones para que se ejecuten 'otras instrucciones'
d) si revisas, el codigo que usas tiene 2 'salidas' [Exit For] y 2 'avances' [iIt = iIt + 1] que -> NO son 'necesarios'
e) segun 'como y cuando' se cumpla alguna 'salida' y/o algun 'avance'... pudiera darse el caso de que...
o... el bucle For...Next sea 'abruptamente terminado'
o... el 'siguiente' contador... -> brinque/salte/omita/... al elemento que REALMENTE le correspondia 'el siguiente' [contador]

2) para evitar algun 'duplicado' con el nombre de los archivos 'rescatados', solo agrega un -> Format(Now, " dd-mmm-yy h-m-s")
[y probablemente algun 'contador adicional'... por si el tiempo entre un archivo y otro no alcanzara a 'cambiar' lo suficiente] :))

3) en relacion con la 'destruccion' de las variables de objeto creadas... [hasta donde se]...
a) -efectivamente- NO es necesario 'destruirlar' al terminarse la ejecucion del codigo que las crea [aunque]...
b) es una 'sana practica'... [auto-]'destruirlas' al final del codigo [por si fuera un codigo repetitivo/recurrente/demasiado rapido/...] -?-
o... correrias el riesgo de 'saturar' la memoria, lo que podria ocasionarte -eventualmente- algunos errores... 'inesperados' :-(

prueba con las siguientes modificaciones [solo al bucle for...next aunque existen mas 'areas de mejora y adelgazamiento posibles'] :D
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

For iIt = 1 To crpEntrada.Items.Count
Set msjMensaje = indMsj.Item(iIt)
With msjMensaje
If Left(.Subject, 18) = msjTitulo Then
Set adjMensaje = .Attachments.Item(1)
adjMensaje.SaveAsFile _
"C:\Documents and Settings\All Users\Documentos\BibliotecaM\CopiasACT" & _
"\" & msjTitulo & Format(Now, " dd-mmm-yy h-m-s") & ".xls"
End If
End With
Next

__ el codigo expuesto __
Public Sub ActualizarCambios()
Dim OutlookApp As New Outlook.Application
Dim crpEntrada As Outlook.MAPIFolder
Dim indMsj As Outlook.Items
Dim msjMensaje As Outlook.MailItem
Dim adjMensaje As Outlook.Attachment
Dim msjTitulo As String
Dim iIt As Integer
Set crpEntrada = OutlookApp.GetNamespace("MAPI") _
.GetDefaultFolder(olFolderInbox)
Set indMsj = crpEntrada.Items
msjTitulo = "Cambios BIBLIOTECA"
For iIt = 1 To crpEntrada.Items.Count
Set msjMensaje = indMsj.Item(iIt)
With msjMensaje
If .Subject = "" Or .Attachments.Count = 0 Then
If iIt < crpEntrada.Items.Count Then
iIt = iIt + 1
Else
Exit For
End If
Else
If Len(.Subject) > 18 And Left(.Subject, 18) = msjTitulo Then
Set adjMensaje = .Attachments.Item(1)
adjMensaje.SaveAsFile _
"C:\Documents and Settings\All Users\Documentos\BibliotecaM\CopiasACT" & _
"\" & .Subject 'adjMensaje.FileName
If iIt < crpEntrada.Items.Count Then
iIt = iIt + 1
Else
Exit For
End If
End If
End If
End With
Next
OutlookApp.Quit
Set adjMensaje = Nothing
Set msjMensaje = Nothing
Set indMsj = Nothing
Set crpEntrada = Nothing
Set OutlookApp = Nothing
End Sub
Respuesta Responder a este mensaje
#4 Héctor Miguel
12/06/2006 - 05:17 | Informe spam
hola [de nuevo], Ivan !

un comentario adicional... el codigo 'tal-cual' esta 'planteado'... asume [o requiere]...
-> que los correos de los que YA hubieran sido 'rescatados' sus archivos...
-> se muevan/eliminen/... de la bandeja de entrada del outlook
o... la siguiente vez que se ejecute el codigo... -???- ;)

saludos,
hector.
Respuesta Responder a este mensaje
#5 klomkbock
12/06/2006 - 17:57 | Informe spam
Hola de nuevo, Hector Miguel. Muchas gracias por la ayuda, y aun mas por
la explicacion.

Te comento un poco sobre la marcha:

a) el bucle se encarga de que [el contador] 'avance' automaticamente de 1 en
1 [a menos que le agregues un 'Step']





Esto es lo que me decia la logica(y los manuales) inicialmente, pero
cuando los errores se repiten hasta la extenuacion, parece que la logica
se retuerce y surgen cosas como esta:

d) si revisas, el codigo que usas tiene 2 'salidas' [Exit For] y 2 'avances'
[iIt = iIt + 1] que -> NO son 'necesarios'





La verdad es que en mi cabeza lo tenia mas o menos claro, pero viendo que
al fin habia obtenido algun resultado no me he atrevido a quitarlos. Estas
dudas sobre cosas que son "elementales" parecen ridiculas, y sin embargo
creo (al menos en mi caso) que si no te las aclara alguien (como tu en
este caso, GRACIAS de nuevo) con una cierta rotundidad, acaban siendo
recurrentes y pueden llegar a bloquearte, a pesar de parecer tan obvias.

"Cambios BILIOTECA " seguido de Now (con dia, hora y minutos formateado para
que no de error en el titulo)





En realidad el Now lo pone automaticamente la aplicacion en el origen
cuando se realizan cambios y ya viene en el asunto del mensaje(que se me
envia -tambien automaticamente - a mi como "central" cuando cierran el
libro si han realizado algun cambio), con lo que realmente solo hay que
poner el Subjet. Lo que si es cierto es que convendria añadir (ya lo he
intentado,tambien en origen; aunque lo he aplazado: de nuevo los errores)
un nuevo dato al titulo (en este caso el usuario, pej:"Ruki") para evitar
(improbables) duplicados. El formateo de now es (de memoria) ddmmma hHmm
para dar la menor longitud posible al nombre del libro, pero, y aunque
esta es otra historia, con esto tambien me deje unas cuantas neuronas.

.. & Format(Now, " dd-mmm-yy h-m-s") & ".xls"





Aqui otra vez has vuelto a hacer diana sin siquiera esperar a la consulta
que ya tenia preparado incluir en esta respuesta. Los archivos me los
copiaba sin la extension, o sea no como libros de excel, sino como
"archivo" incluso en el icono, aunque si se podian abrir con excel. Ese "&
".xls"" ha resuelto el problema de antemano.

a) -efectivamente- NO es necesario 'destruirlar' al terminarse la
ejecucion del codigo que las crea [aunque]...
b) es una 'sana practica'... [





Aqui te digo como antes: muchas GRACIAS de nuevo. Es la tipica informacion
que se da por explicada sin que nadie la explique, o por lo menos sin que
sea facil encontrarla.

-> que los correos de los que YA hubieran sido 'rescatados' sus archivos...
-> se muevan/eliminen/... de la bandeja de entrada del outlook





Y para terminar (quien lo diria), si es que el aburrimiento no te ha hecho
salir corriendo hace ya un rato, y referido a tu segundo mensaje, mi
intencion es mover cada mensaje, una vez copiado el adjunto, a una carpeta
del propio outlook (Pej:"CopiasLibreriaM"). Pero, como no podia ser menos,
ya he perdido la cuenta de los tipos de error que me aparecen (de los
errores no digamos). Con lo que si has sido capaz de llegar hasta aqui,
supongo que ya no te costara mucho echarle un vistazo al codigo tal y como
lo tengo ahora mismo (lo referido a mover el mensaje esta como
comentario):

Public Sub ActualizarCambios()
Dim OutlookApp As New Outlook.Application
Dim crpEntrada As Outlook.MAPIFolder
Dim indMsj As Outlook.Items
Dim msjMensaje As Outlook.MailItem
Dim adjMensaje As Outlook.Attachment
Dim msjTitulo As String
Dim iIt As Integer
' Dim crpCopiaLib As Outlook.MAPIFolder
Set crpEntrada = OutlookApp.GetNamespace("MAPI") _
.GetDefaultFolder(olFolderInbox)
Set indMsj = crpEntrada.Items
msjTitulo = "Cambios BIBLIOTECA"
For iIt = 1 To crpEntrada.Items.Count
Set msjMensaje = indMsj.Item(iIt)
With msjMensaje
If Left(.Subject, 18) = msjTitulo Then
Set adjMensaje = .Attachments.Item(1)
adjMensaje.SaveAsFile _
"C:\Documents and
Settings\AllUsers\Documentos\BibliotecaM\CopiasACT" & _
"\" & .Subject & ".xls"
' On Error GoTo linea
' Set crpCopiaLib = OutlookApp.GetNamespace("MAPI") _
' .GetDefaultFolder(olFolderInbox).Folders.Add("CopiasLibreriaM")
' On Error GoTo 0
' .Move crpCopiaLib
'linea:
' Set crpCopiaLib = crpEntrada.Folders("CopiasLibreriaM")
' Resume
End If
End With
Next
OutlookApp.Quit
Set adjMensaje = Nothing
Set msjMensaje = Nothing
Set indMsj = Nothing
Set crpEntrada = Nothing
Set OutlookApp = Nothing
End Sub

De nuevo muchas gracias por todo

Un saludo y hasta pronto
Ivan

PD: en cuanto a lo "mejorable", que estoy convencido que es mucho,
¿acierto si supongo que una de las cosas es el exceso de variables de
objeto?. Si es asi, y por decir algo en "mi descarga", la culpa juro que
la tiene la dichosa automatizacion, que, de momento para mi, de automatica
no tiene nada.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida