Пользователи более старых версий WordPerfect могут быть знакомы с командой, которая позволяет сохранять копию текущего документа на диск A: без изменения состояния документа или изменения места его обычного сохранения. Таким образом, если вы откроете C: \ My Docs \ MyFile.doc и запустите эту команду, копия файла будет сделана в A :, и в следующий раз, когда вы воспользуетесь командой «Сохранить», файл все равно будет сохранен в своем обычном месте. на 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 :, этот макрос не для вас.

Несколько более гибкой версией макроса FileCopyToA является DoubleCopy, который запрашивает у пользователя диск перед фактическим созданием копии.

К сожалению, у него есть те же общие недостатки.

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 по своей сути медленно сохраняет документ на дискету. Если ваш документ не очень маленький, его быстрее сохранить на жесткий диск, а затем использовать команду копирования для копирования файла на дискету. Следующий макрос, 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), я подготовил специальную страницу, содержащую полезную информацию.

link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

WordTips — ваш источник экономичного обучения работе с Microsoft Word.

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (1715) применим к Microsoft Word 97, 2000, 2002 и 2003.