较旧版本的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。