Guardar automáticamente copias de documentos en disquete (Microsoft Word)
Los usuarios de versiones anteriores de WordPerfect pueden estar familiarizados con un comando que le permite guardar una copia de su documento actual en la unidad A: sin modificar la condición del documento o cambiar el lugar donde normalmente se guarda. Por lo tanto, si abre C: \ My Docs \ MyFile.doc e inicia este comando, se realiza una copia del archivo en A: y la próxima vez que use el comando Guardar, el archivo aún se guarda en su lugar normal. en C :.
Word no incluye esta característica y algunas personas creen que debería hacerlo.
Parece que un lugar natural para tal comando es el submenú Enviar a disponible en el menú Archivo. Normalmente, este submenú incluye sólo algunos elementos, ya que se utiliza para comandos nativos de Word que permiten el envío directo de faxes o el uso de una conexión de correo electrónico. Afortunadamente, es como cualquier otro menú o submenú de Word y se puede personalizar. La forma de personalizar los menús se ha tratado ampliamente en otros números de WordTips.
Dado que agregar al submenú es bastante fácil, el problema es crear un comando para hacer la copia real o guardar en la unidad A :. Aquí es donde una macro personalizada viene al rescate, ya que no hay un comando nativo de Word para lograr el efecto deseado.
Un enfoque es simplemente guardar el documento actual en la unidad A :. El problema con esto es que a partir de ese momento, Word piensa que el documento pertenece a la unidad A :. La solución es almacenar la ubicación actual del archivo, guardarlo en A: y luego guardarlo nuevamente, pero esta vez en la ubicación original. La siguiente macro hace esto en unos simples pasos:
Sub FileCopyToA() Dim OrName As String OrName = ActiveDocument.FullName ActiveDocument.SaveAs "A:\" + ActiveDocument.Name ActiveDocument.SaveAs OrName End Sub
Sin embargo, existen inconvenientes en un enfoque tan simple. Primero (y potencialmente más importante), si está trabajando en un archivo grande, es posible que no quepa en la unidad A :. En ese caso, la macro morirá de una manera innoble, y deberá seguir los pasos para recuperar manualmente volviendo a guardar su archivo en su ubicación original. Otro hecho de la vida con esta macro es que sobrescribirá cualquier documento del mismo nombre existente en la unidad A :. Finalmente, si no desea que se guarde el documento, pero solo desea una instantánea de A:, esta macro no es para usted.
Una versión algo más flexible de la macro FileCopyToA es DoubleCopy, que solicita al usuario una unidad antes de realizar la copia.
Desafortunadamente, también tiene los mismos inconvenientes generales.
Sub DoubleCopy() Dim Message As String, Title As String Dim Default As String, Drive As String Dim ffname as String, fname as String On Error GoTo Quit Message = "Enter drive letter for document (A, C, D)" Title = "Send Document to File" Default = "A" ' Display message, title, and default value Drive = InputBox(Message, Title, Default) If Drive > "" Then ffname = ActiveDocument.FullName fname = Drive & ":\" & ActiveDocument.Name ActiveDocument.SaveAs fname ActiveDocument.SaveAs ffname End If Quit: End Sub
Uno de los otros inconvenientes de los enfoques presentados hasta ahora es que pueden ser lentos, muy lentos. Word es inherentemente lento para guardar un documento en una unidad de disquete. A menos que su documento sea muy pequeño, es más rápido guardarlo en un disco duro y luego usar un comando de copia para copiar un archivo al disquete. La siguiente macro, SentToDriveA, adopta este enfoque.
Sub SentToDriveA() If ActiveDocument.Saved = False Then ActiveDocument.Save System.Cursor = wdCursorWait OrigLongFileName = ActiveDocument.Name OldPath = ActiveDocument.Path & Application.PathSeparator If ActiveDocument.Path = "" Then MsgBox "Please save this document before sending to drive A:", _ vbOKOnly, "This Document Not Saved" Else Documents(ActiveWindow.Caption).Close FileCopy OldPath & OrigLongFileName, "a:\" & OrigLongFileName Documents.Open FileName:=OldPath & OrigLongFileName Application.GoBack End If System.Cursor = wdCursorNormal End Sub
La macro comprueba primero para asegurarse de que el documento actual se haya guardado en algún lugar de su disco duro. (En otras palabras, no es un documento nuevo). Luego, cierra el documento, lo copia en A: y lo vuelve a abrir. El motivo del cierre es que Word no permitirá copiar un documento abierto. Debido a que el documento está cerrado, es importante que esta macro se guarde en la plantilla Normal.Dot o en alguna otra plantilla global.
Finalmente, si quisiera crear una macro que tomara una «instantánea» del documento actual, sin realmente guardarla en su disco duro antes de hacer la copia en A :, necesitaría duplicar su documento y luego guardar el duplicado en A :. Sin embargo, copiar un documento completo requiere un poco más de esfuerzo que simplemente tomar el contenido del texto y pasarlo a un nuevo documento. Los documentos de Word se dividen en fragmentos que representan el cuerpo principal, encabezados y pies de página, notas al pie, etc. Se hace referencia a ellos en VBA usando StoryRanges y cada StoryRange tiene un StoryType. La siguiente macro copia cada uno de los StoryRanges en un nuevo documento y luego solicita guardar el nuevo documento en A:
Public Sub CopyToA() Dim docActive As Document Dim docNew As Document Dim rngActiveDocPart As Range Dim rngNewDocPart As Range Dim strDocName As String Dim strTemplateName As String ' reference the current document Set docActive = ActiveDocument ' get the name of doc and also path/name ' of the template it's based-on strDocName = docActive.Name strTemplateName = docActive.AttachedTemplate.FullName ' create a copy document based on same template Set docNew = Documents.Add(strTemplateName) ' loop to copy each part of the active doc to the new doc For Each rngActiveDocPart In docActive.StoryRanges ' reference same part Set rngNewDocPart = docNew.StoryRanges _ (rngActiveDocPart.StoryType) rngActiveDocPart.Copy rngNewDocPart.Paste Next rngActiveDocPart ' make the new document active docNew.Activate ' offer to save it on floppy drive A:\ With Dialogs(wdDialogFileSaveAs) .Name = "A:\" & strDocName .Show End With End Sub
Este enfoque final obviamente podría modificarse para que el documento de copia recién creado se cierre después de guardar. De esa manera, su documento original quedaría abierto y sin guardar en el disco cuando la macro estuviera completa.
Si todas las técnicas descritas en este consejo le parecen interesantes, pero no tiene una unidad de disquete en su sistema, no se desespere. También puede usar las mismas macros para guardar copias en su unidad flash. Siempre que sepa la letra de unidad de la unidad flash, simplemente sustituya esa letra de unidad por la A: designador de unidad en las macros.
(Funciona de maravilla.)
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios WordTips), he preparado una página especial que incluye información útil.
link: / wordribbon-WordTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
WordTips es su fuente de formación rentable en Microsoft Word.
(Microsoft Word es el software de procesamiento de texto más popular del mundo). Este consejo (1715) se aplica a Microsoft Word 97, 2000, 2002 y 2003.