在软盘上自动保存文档副本(Microsoft Word)
较旧版本的WordPerfect的用户可能熟悉一个命令,该命令使您可以将当前文档的副本保存到A:驱动器,而无需修改文档的条件或更改其通常保存的位置。因此,如果打开C:\ My Docs \ MyFile.doc并启动此命令,则将文件复制到A :,并且下次使用Save命令时,该文件仍会保存到其正常位置在C:
Word不包含此功能,有些人认为应该。
此类命令很自然的地方是“文件”菜单中的“发送到”子菜单。通常,此子菜单仅包含一些项目,因为它用于允许直接传真或使用电子邮件连接的本机Word命令。幸运的是,它与Word中的任何其他菜单或子菜单一样,可以自定义。 _WordTips_的其他问题已广泛讨论了如何自定义菜单。
由于添加到子菜单非常简单,因此问题出在执行实际复制或保存到A:驱动器的命令上。这是自定义宏的使用方法,因为没有本机Word命令可实现所需的效果。
一种方法是简单地将当前文档保存到A:驱动器。问题在于,从那时起,Word认为文档属于A:驱动器。解决方案是存储文件的当前位置,将其保存到A :,然后再次保存,但是这次保存到原始位置。下面的宏通过几个简单的步骤完成此操作:
Sub FileCopyToA() Dim OrName As String OrName = ActiveDocument.FullName ActiveDocument.SaveAs "A:\" + ActiveDocument.Name ActiveDocument.SaveAs OrName End Sub
但是,这种简单的方法存在弊端。首先(也是最重要的一点),如果您正在处理大文件,则该文件可能不适合A:驱动器。在这种情况下,宏将死于无知的死亡,并且您将需要采取步骤将文件重新保存到原始位置以进行手动恢复。使用此宏的另一个事实是,它将覆盖A:驱动器上的任何现有同名文档。最后,如果您不想保存文档,而只想要A:上的快照,则此宏不适合您。
DoubleCopy是FileCopyToA宏的一种更为灵活的版本,它在实际制作副本之前提示用户输入驱动器。
不幸的是,它也具有相同的一般缺点。
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
到目前为止提出的方法的另一个缺点之一是它们可能很慢-非常慢。 Word本质上将文档保存到软盘驱动器中很慢。除非您的文档很小,否则将其保存到硬盘驱动器然后使用copy命令将文件复制到软盘会更快。下面的宏SentToDriveA采用这种方法。
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
宏首先检查以确保当前文档已保存在硬盘驱动器上的某个位置。 (换句话说,它不是一个全新的文档。)然后,它关闭该文档,将其复制到A :,然后重新打开该文档。关闭的原因是Word不允许复制打开的文档。因为文档是关闭的,所以将此宏保存在Normal.Dot模板或其他全局模板中很重要。
最后,如果您想创建一个宏来获取当前文档的“快照”,而无需在将副本复制到A:之前将其实际保存到硬盘上,则需要复制文档,然后将副本保存到A :。复制整个文档需要花费更多的精力,只是简单地获取文本内容并将其传递给新文档。 Word文档分为代表主体,页眉和页脚,脚注等的大块。在VBA中,使用StoryRanges引用了这些文件,每个StoryRange都有一个StoryType。以下宏将每个StoryRanges复制到一个新文档,然后提示将新文档保存在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
可以修改此最终方法,以便在保存后关闭新创建的副本文档。这样,宏完成后,原始文档将保持打开状态,而未保存到磁盘。
如果本文中介绍的所有技术听起来对您来说都很有趣,但是您的系统上没有软盘驱动器,请不要失望。您也可以轻松地使用相同的宏将副本保存到闪存驱动器。只要您知道闪存驱动器的驱动器号,只需在宏中将该驱动器号替换为A:驱动器代号即可。
(像吊饰一样工作。)
注意:
如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。
_WordTips_是您进行经济有效的Microsoft Word培训的来源。
(Microsoft Word是世界上最流行的文字处理软件。)本技巧(1715)适用于Microsoft Word 97、2000、2002和2003。