Salvataggio automatico delle copie dei documenti su floppy (Microsoft Word)
Gli utenti di versioni precedenti di WordPerfect potrebbero avere familiarità con un comando che consente di salvare una copia del documento corrente nell’unità A: senza modificare le condizioni del documento o cambiare la posizione in cui viene normalmente salvato. Pertanto, se apri C: \ My Docs \ MyFile.doc e avvii questo comando, viene creata una copia del file in A: e la prossima volta che usi il comando Salva, il file viene comunque salvato nella sua posizione normale su C :.
Word non include tale caratteristica e alcune persone pensano che dovrebbe.
Sembra che un luogo naturale per un tale comando sia il sottomenu Invia a disponibile dal menu File. Normalmente, questo sottomenu include solo alcuni elementi, poiché viene utilizzato per i comandi nativi di Word che consentono l’invio di fax diretto o l’utilizzo di una connessione di posta elettronica. Fortunatamente, è come qualsiasi altro menu o sottomenu in Word e può essere personalizzato. Come personalizzare i menu è stato ampiamente trattato in altri numeri di WordTips.
Poiché l’aggiunta al sottomenu è piuttosto semplice, il problema è trovare un comando per eseguire la copia effettiva o salvare nell’unità A :. È qui che una macro personalizzata viene in soccorso, poiché non esiste un comando Word nativo per ottenere l’effetto desiderato.
Un approccio consiste nel salvare semplicemente il documento corrente nell’unità A :. Il problema con questo è che da quel punto in avanti, Word pensa che il documento appartenga all’unità A :. La soluzione è memorizzare la posizione corrente del file, salvarlo in A: e quindi salvarlo di nuovo, ma questa volta nella posizione originale. La seguente macro lo fa in pochi semplici passaggi:
Sub FileCopyToA() Dim OrName As String OrName = ActiveDocument.FullName ActiveDocument.SaveAs "A:\" + ActiveDocument.Name ActiveDocument.SaveAs OrName End Sub
Tuttavia, ci sono degli svantaggi in un approccio così semplice. Innanzitutto (e potenzialmente più importante), se stai lavorando su un file di grandi dimensioni, potrebbe non adattarsi all’unità A :. In tal caso, la macro morirà di una morte ignobile e dovrai eseguire i passaggi per ripristinarla manualmente salvando nuovamente il file nella posizione originale. Un altro dato di fatto con questa macro è che sovrascriverà qualsiasi documento esistente con lo stesso nome sull’unità A :. Infine, se non vuoi che il documento venga salvato, ma desideri solo un’istantanea su A :, questa macro non fa per te.
Una versione leggermente più flessibile della macro FileCopyToA è DoubleCopy, che richiede all’utente un’unità prima di eseguire effettivamente la copia.
Purtroppo ha anche gli stessi inconvenienti generali.
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 degli altri inconvenienti degli approcci presentati finora è che possono essere lenti, molto lenti. Word è intrinsecamente lento nel salvare un documento su un’unità floppy. A meno che il documento non sia molto piccolo, è più veloce salvarlo su un disco rigido e quindi utilizzare un comando di copia per copiare un file sul floppy. La seguente macro, SentToDriveA, utilizza questo approccio.
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 verifica innanzitutto che il documento corrente sia stato salvato da qualche parte sul disco rigido. (In altre parole, non è un documento nuovo di zecca.) Quindi chiude il documento, lo copia in A: e riapre il documento. Il motivo della chiusura è che Word non consentirà la copia di un documento aperto. Poiché il documento è chiuso, è importante che questa macro venga salvata nel modello Normal.Dot o in un altro modello globale.
Infine, se volessi creare una macro che ha preso una “istantanea” del documento corrente, senza salvarla effettivamente sul tuo disco rigido prima di fare la copia su A :, dovresti duplicare il tuo documento e quindi salvare il duplicato su A :. Tuttavia, la copia di un intero documento richiede un piccolo sforzo in più rispetto all’acquisizione del contenuto del testo e al passaggio a un nuovo documento. I documenti di Word sono suddivisi in blocchi che rappresentano il corpo principale, intestazioni e piè di pagina, note a piè di pagina, ecc. Questi sono referenziati in VBA usando StoryRange con ogni StoryRange con uno StoryType. La seguente macro copia ciascuno degli StoryRanges in un nuovo documento e quindi richiede di salvare il nuovo documento su 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
Questo approccio finale potrebbe ovviamente essere modificato in modo che il documento di copia appena creato fosse chiuso dopo il salvataggio. In questo modo, il documento originale verrebbe lasciato aperto e non salvato su disco al termine della macro.
Se tutte le tecniche descritte in questo suggerimento ti sembrano interessanti, ma non hai un’unità floppy sul tuo sistema, non disperare. Puoi usare altrettanto facilmente le stesse macro per salvare copie sulla tua unità flash. Finché conosci la lettera di unità per l’unità flash, sostituisci quella lettera di unità con il designatore di unità A: nelle macro.
(Funziona come un incantesimo.)
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti WordTips), ho preparato una pagina speciale che include informazioni utili.
WordTips è la tua fonte di formazione economica su Microsoft Word.
(Microsoft Word è il software di elaborazione testi più popolare al mondo.) Questo suggerimento (1715) si applica a Microsoft Word 97, 2000, 2002 e 2003.