Автоматическое сохранение копий документов на дискете (Microsoft Word)
Пользователи более старых версий 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.