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.