vba - wdformatpdf - wdformatdocument
Word VBA.SaveAs2 aparece el mensaje(en algunas situaciones) (2)
Aquí hay una foto a oscuras basada en algo de Google y experiencia similar: http://blogs.technet.com/b/wordonenotesupport/archive/2009/02/07/word-2007-file-save-errors-an-error- is-displayed-when-attempting-to-save-a-word-document.aspx
Los bits relevantes:
"<path and file name>" cannot be found. Check your spelling, or try a different path.
<path and file name> is currently in use. Try again later.
Word cannot complete the save to due to a file permissions error.
Es posible que vea los errores antes mencionados si Word 2007 tiene un conflicto con el software antivirus. La mayoría de estos conflictos han sido abordados por los fabricantes de software antivirus, pero debe descargar e instalar actualizaciones o parches para el software antivirus (no solo nuevas definiciones de virus) para resolver el problema. Consulte el sitio web del fabricante del software para obtener posibles actualizaciones y artículos de la base de conocimientos sobre problemas de configuración.
... y luego desde McAfee describiendo un problema relacionado: https://kc.mcafee.com/corporate/index?page=content&id=KB75449
La mayoría de las discusiones en el foro descubrí que implican el escaneo antivirus en tiempo real del lado del servidor, algo sobre la interacción del comportamiento entre el mecanismo de ahorro de Office 2010 que no funciona bien con el escaneo de archivos en vivo y basado en acceso.
Incluso si esto no resuelve tu problema, ¡espero que ayude!
- SharePoint 2010
- Palabra 2010
- Windows 7 Enterprise
Tengo un archivo .docm que vive en una biblioteca de documentos de SharePoint. Cuando se abre, una macro dispara y solicita al usuario un nuevo nombre de archivo y carpeta, y luego usa .SaveAs2 para guardar una copia del archivo en la ubicación especificada como .docx sin la macro.
No puedo usar tipos de contenido SP con un .dotm apropiado como plantilla, ya que hay más de 30 plantillas de archivos diferentes en la biblioteca. Tengo que usar .docm en una biblioteca de SharePoint y luego me aseguro de que el usuario guarda una copia del archivo en su disco personal.
Entonces uso algún código en el evento abierto. Dejo que el usuario especifique una carpeta y un nombre de archivo. Entonces .SaveAs2
toma estos parámetros y guarda el archivo actual en la nueva ruta con el nuevo nombre como un archivo .docx normal sin macros. Te ahorraré los detalles sobre cómo strFolder
y strDoc
están reunidos. Tenga la seguridad de que existen. Tengo un debug.print con el nombre completo del archivo y es correcto.
With o
.SaveAs2 strFolder & strDoc & ".docx", wdFormatDocumentDefault
End With
El problema es que este código muestra un mensaje que dice que no se puede encontrar el archivo.
Bueno, duh, estoy tratando de guardar el archivo en esta ubicación. Por supuesto que no existe. Ese es el punto. (Tenga en cuenta que la carpeta existe).
Después de que se cierra el cuadro de mensaje, Word felizmente guarda el archivo en la ubicación especificada.
Además, el mensaje solo aparece si el archivo original se abre en modo de lectura desde SharePoint Y si la nueva ruta de archivo está en una unidad de red.
El mensaje NO aparece si
- el archivo se abre en modo Edición (haga clic en el archivo de SharePoint, seleccione Editar en el siguiente cuadro de diálogo) o si
- el archivo se guarda en una unidad local (C :) o si
- el archivo se abre desde el diálogo Archivo> Recientes entre bastidores.
En el sistema de producción, los usuarios no tendrán la opción de Editar o Solo lectura. Se establecerán por defecto en solo lectura. Además, los usuarios no podrán guardar en una unidad C: / local, ya que el sistema comercial coloca su perfil y "Mis documentos" en una unidad de red (H :).
Yo he tratado
- guardando el archivo con un enfoque diferente: usando
msoFileDialogSaveAs
- mismo mensaje - suprimir el mensaje con
Application.DisplayAlert = False
(lo sé pero estaba desesperado) owdAlertsNone
. - No funciona. El mensaje todavía muestra - suprimir el mensaje con Application.ScreenUpdating = False. No funciona. El mensaje aún se muestra.
- suprimir el mensaje con manejo de errores
On Error Resume Next
oOn Error Goto MyHandler
pero el mensaje aparece sin que seOn Error Goto MyHandler
los manejadores de errores. El mensaje tiene el ícono "i" azul, por lo que tal vez no se interprete como un error, sino como una información.
¿Cómo hago para que el mensaje desaparezca?
Además, aunque esto no es esencial, sería bueno saber:
- ¿Por qué el modo de lectura o edición importa cuando el archivo se guarda en una nueva ubicación?
- ¿Por qué la nueva ubicación del archivo (ruta de red o ruta local) importa cuando se guarda?
- ¿Y por qué aparece el mensaje cuando luego el archivo se guarda correctamente?
Después de varios intentos fútiles de cambiar la forma en que SharePoint sirve el documento en modo de solo lectura, utilicé el siguiente enfoque para crear un nuevo documento de Word, guardarlo en la carpeta temporal del usuario, copiar el documento de la carpeta temporal a la carpeta previamente especificada por el usuario. Ahora el documento existe y el uso de SaveAs no desencadena el mensaje de error.
Antes de que se ejecute el siguiente código, el usuario ha definido un nombre de archivo (strDoc) y una carpeta para guardar el documento.
'' since we get an annoying message when trying to save to a network drive while
'' in read only mode, we first create a new, empty file in the user''s temp folder,
'' then copy that empty file to the specified folder
'' set the temp folder and full path
tempFolder = Environ("Temp")
tempPath = tempFolder & "/" & strDoc & ".docx"
'' create a new document
Documents.Add DocumentType:=wdNewBlankDocument
ChangeFileOpenDirectory tempFolder
'' save to temp folder and close
With ActiveDocument
.SaveAs2 tempPath, wdFormatDocumentDefault
.Close
End With
'' copy from temp folder to previously defined destination
FileCopy tempPath, fullPath
'' delete the temp file
KillFile = tempPath
'' finally, save the contract over the empty file
With o
.SaveAs2 fullPath, wdFormatDocumentDefault
End With