IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд

Vba word saveas

Vba word saveas

If the document or template hasn’t been saved before, this method will display the Save As dialog box and prompt the user to save the file.

If the user presses the Cancel button on the SaveAs dialog box then an error will be generated.
To prevent this error you must catch the error and ignore it by using an On Error �. Command.


This property indicates if there are any unsaved changes in the document
It can also be set as a way of getting a document to close without a «do you want to save changes» prompt
Changing the property to True will flag the document as clean and disable the save button


Display the SaveAs dialog box allowing you to save a copy of that document or template.

FileName — The name for the document. The default is the current folder and file name. If the document has never been saved, the default name is used (for example, Doc1.doc). If a document with the specified file name already exists, the document is overwritten without the user being prompted first.
FileFormat -The format in which the document is saved. Can be any WdSaveFormat value. To save a document in another format, specify the appropriate value for the SaveFormat property.
LockComments — true to lock the document for comments. The default is false.
Password — A password string for opening the document. (See Remarks below.)
AddToRecentFiles — true to add the document to the list of recently used files on the File menu. The default is true.
WritePassword — A password string for saving changes to the document. (See Remarks below.)
ReadOnlyRecommended — true to have Microsoft Office Word suggest read-only status whenever the document is opened. The default is false.
EmbedTrueTypeFonts — true to save TrueType fonts with the document. If omitted, the EmbedTrueTypeFonts argument assumes the value of the EmbedTrueTypeFonts property.
SaveNativePictureFormat — If graphics were imported from another platform (for example, Macintosh), true to save only the Windows version of the imported graphics.
SaveFormsData — true to save the data entered by a user in a form as a data record.
SaveAsAOCELetter — If the document has an attached mailer, true to save the document as an AOCE letter (the mailer is saved).
Encoding — MsoEncoding. The code page, or character set, to use for documents saved as encoded text files. The default is the system code page.
InsertLineBreaks — If the document is saved as a text file, true to insert line breaks at the end of each line of text.
AllowSubstitutions — If the document is saved as a text file, true allows Word to replace some symbols with text that looks similar. For example, displaying the copyright symbol as (c). The default is false.
LineEnding — The way Word marks the line and paragraph breaks in documents saved as text files. Can be any WdLineEndingType value.
AddBiDiMarks — true adds control characters to the output file to preserve bi-directional layout of the text in the original document.


Has the Document Changed

The objDocument.Saved property equals True if the document has not changed since it was last saved
This example saves the active document if it’s changed since it was last saved.

Saving for the first time

If you do not specify the folder path then the document is saved in the current folder.

You should always specify the full folder path.

Saving all Open Documents

You can quickly close all the open documents without prompting to save the changes

Checking Properties

You can check to see which properties where set for an activedocument

Word VBA Saves Pages as Separate PDFs

The VBA Tutorials Blog

Introduction — Save Pages as Separate PDFs

Save each page in your MS Word document as a separate PDF with this VBA macro. The flexible VBA script let’s you save each page or a subset range of pages as PDFs in a user-specified directory. Complete with robust error-checking.

Example — Save Pages as Separate PDFs

Save As Separate PDFs

Make powerful macros with our free VBA Developer Kit

Tutorials like this can be complicated. That’s why we created our free VBA Developer Kit to supplement this tutorial. Grab it below and you’ll be writing macros so much faster than you are right now.

Tutorial — Save Pages as Separate PDFs

This example is pretty plug-and-play. You won’t have to do much, if any, tweaking. However, there are a few places you may want to customize.

To get started, all you have to do is paste SaveAsSeparatePDFs into “ThisDocument” under the “Normal” Microsoft Word Objects Project of your VBA Editor. Alt+F11 opens the Editor.

Paste VBA Code Example Here

Pasting the VBA code example here allows you to save your MS Word document with its native *.doc or *.docx file extension, i.e., you won’t have to save it as a macro-enabled document. A second perk is that it makes the macro accessible across all Word documents.

Like most programs, the bulk of SaveAsSeparatePDFs is error-checking. The meat and potatoes can be accomplished with a handful of lines. I included the rest to make your implementation painless. For example, the program confirms your designated directory is an actual directory and your page numbers are actually numeric. I’m not a big fan of the word “actually” so I’m actually going to stop using it for the remainder of this post. Ehh, too much?

Okay, here’s what you need to know. The VBA code issues 3 prompts:

1. Enter the directory where you want to save your PDFs.

2. Enter the page number in your Word document where you want to begin saving individual pages as PDFs.

3. Enter the page number in your Word document where you want to stop saving individual pages as PDFs.

Submitting a blank string at any of the prompts will abort the script. Hey, it’s easier than reaching for your mouse and pressing Cancel.

SaveAsSeparatePDFs will save each page in your page range with file names following the naming convention Page_x.pdf , where is x is the page number in your Word document.

For you non-believers, I submit evidence showing the PDFs in the destination folder:

If you don’t like the default naming convention, search for «Page_» in the VBA code example and change it to something more fitting. If you decide to change it, it’s important that you keep the at the beginning of your string.

Remember the error checks we discussed earlier? On the warning prompt for an invalid page number, I included a handy feature:

Total page count of your Word document

See it? The total page count of your current Microsoft Word document is presented in the parentheses. This helps you in case you want to save every page in your file. Some of you may wish to put this on your actual Page prompts. To do that, paste ActiveDocument.BuiltInDocumentProperties(wdPropertyPages) into your desired InputBox code.

Application Ideas — Save Pages as Separate PDFs

My coworkers and I produce a lot of design calculations in our nuclear engineering jobs. The body of the design calculations are prepared in MS Word but the attachments are assembled from many different files in many different file formats. The body and all the attachments must be compiled into a single PDF. This script lets us make cover pages for each attachment and save them as separate PDFs for final compilation of the master design calculation.

Читать еще:  Маска по ip адресу

I’m spitballing here, but other potential uses include:

  1. Extracting individual PDF forms from a Master Word Document.
  2. Emailing separate PDFs to different recipients based on the content of page.
  3. Pulling monthly reports from a yearly summary Word document.

That’s all for this tutorial. When you’re ready to take your VBA to the next level, subscribe using the form below.

Oh, and if you have a question, post it in our VBA Q&A community.

The best free VBA training on the web
I see people struggling with Excel every day and I want to help. That’s why I’m giving away my 90-days to Master VBA eCourse and my entire personal macro library for free.

Over 2 million people use our VBA tutorials each year to help automate their work. Are you ready to reclaim your time, too? Grab our VBA Cheat Sheets and you’ll be writing macros like a professional. With over 180 tips and 135 macro examples, they include everything you need to know to become a great VBA programmer.

10.4.3 Работа с объектом Document , его свойства и методы

Объект Word.Document, программная работа со свойствами и методами документа в VBA

После того, как мы при помощи объекта Application запустили Word, при помощи коллекции Documents создали (или открыли, или нашли среди уже открытых) — в общем, получили ссылку на нужный нам документ, можно выполнять с этим документом различные действия, реализованные при помощи свойств, методов и событий объекта Document. У этого объекта десятки свойств и методов, и здесь мы рассмотрим только наиболее важные и часто используемые из них. Для самостоятельного рассмотрения будут оставлены очевидные и редкоиспользуемые свойства.

Обратите внимание, что к объекту Document можно обращаться и не создавая специальную объектную переменную. Существует еще по крайней мере три способа получения доступа к объекту Document:

  • работать с документом как с элементов коллекции Documents. Формате обращения может выглядеть, например, так: Documents.Item(1);
  • использовать специальное ключевое слово ThisDocument. При помощи него можно получить ссылку на объект документа, которому принадлежит исполняемый программный модуль, например:
  • использовать свойство объекта Application ActiveDocument. Это свойство возвращает нам объект активного документа:

Самые важные свойства объекта Document представлены ниже:

  • ActiveWritingStyle — текущий активный стиль (заголовок определенного уровня, обычный текст, гиперссылка и т.п.). Рекомендуется проверить перед вводом текста.
  • AttachedTemplate — возможность подключить шаблон (со всеми макросами, стилями, записями автотекста и т.п.) или проверить, какой шаблон подключен (вручную это можно сделать через меню Сервис ->Шаблоны и надстройки).
  • Background — возвращает объект Shape, представляющий фоновый рисунок (фоновые рисунки видны только в режиме Web-документ);
  • BuiltInDocumentProperties — возможность получить ссылку на коллекцию DocumentProperties с одноименными объектами, представляющими встроенные свойства документа (название, автор, категория, комментарии и т.п.);
  • Characters — возвращает коллекцию объектов Range, каждый из которых представляет один символ. Это свойство есть не только у объектов Document, но и у объектов Selection и Range. Может использоваться, например, для выполнения операция поиска и замены или статистических подсчетов (например, для если переводчику платят за количество символов);
  • Content — свойство, возвращающее объект Range, представляющий главную цепочку документа (main document story). Если говорить проще — просто текст документа, без колонтитулов, сносок, комментариев и т.п.
  • CustomDocumentsProperty — свойство, возвращающее коллекцию объектов DocumentProperties, представляющих пользовательские свойства документа. Можно использовать для сохранения вместе с документом любых значений переменных. Очень удобно, например, для подсчета количества открытий документов, флажков печатался/не печатался, сколько раз вызывалась та или иная функция, на каких компьютерах и каким пользователем открывался и т.п.
  • DefaultTabStop — определить отступ по умолчанию при использовании символа табуляции. По умолчанию — 35 пунктов, что примерно равно 1,25 см;
  • DisableFeatures — отключить возможности, которые понимают только последние версии Word (для совместимости с пользователями, у которых на компьютерах стоят старые версии). Обычно само свойство DisableFeatures просто включает этот режим, а конкретный уровень совместимости задается при помощи свойства DisableFeaturesIntroducedAfter.
  • DoNotEmbedSystemFonts — не вставлять в документ системные шрифты (по умолчанию для русского, японского и т.п. вставляются). Позволяет сократить размер документа — но тогда пользователи в системе, где не стоит русский язык, не смогут прочесть этот документ.
  • EmbedTrueTypeFonts — очень полезное свойство, если вы работаете с документом в месте, где используются экзотические шрифты (например, в издательстве). Вставка true-type шрифтов гарантирует, что получатели документа будут видеть его точно таким же, как и создатель.
  • Envelope — позволяет получить ссылку на специальный объект Envelope, который используется для создания почтовых конвертов.
  • Fields — возможность получить ссылку на коллекцию Fields одноименных объектов. Очень полезна при работе с полями.
  • Footnotes — возможность получить коллекцию сносок.
  • свойства Formatting… — что показывать в списке стилей в панели инструментов Форматирование.
  • FormFields — аналогично Fields, но в этом случае мы получаем ссылку на поля в формах.
  • FulName — полное имя объекта (вместе с путем к нему в файловой системе или Web). Доступно, конечно, только для чтения.
  • GrammarChecked — пометить весь документ, как проверенный с точки зрения грамматики (фактически отключить проверку грамматики для данного документа). Такое же свойство существует и у объекта Range. Коллекцию ошибок, выловленных при проверке грамматики, можно получить при помощи свойства GrammaticalErrors, а выделить ошибки зеленым волнистым подчеркиванием (если они еще не выделены) — при помощи свойства ShowGrammaticalErrors. Для орфографических ошибок существует аналогичные свойства SpellingChecked, SpellingErrors и ShowSpellingErrors.
  • HasPassword — проверить, назначен ли пароль для указанного документа. Password — назначить пароль. По причине крайней слабости парольной защиты пароли в Word, Excel и Access использовать не рекомендуется.
  • Indexes — возвращает коллекцию индексов (то есть предметных указателей) для документа.
  • Name — возвращает имя документа (без пути к нему).
  • OpenEncoding — возвращает кодовую страницу, которая использовалась для открытия документа. Для русского языка по умолчанию, конечно, 1251.
  • PageSetup — позволяет получить ссылку на одноименный объект. Используется, конечно, в основном при реализации печати.
  • Paragraphs — возвращает ссылку на коллекцию абзацев в данном документе.
  • Path — возвращает путь к документу в файловой системе (без имени). Может пригодиться, чтобы создать еще один файл по тому же пути.
  • Permission — возможность получить доступ к объекту Permission, который позволяет управлять системой внутренних разрешений документа Word (не разрешений файловой системы).
  • PrintRevisions — печатать или нет пометки редактора (исправления) вместе с документом. По умолчанию — печатать.
  • ProtectionType — проверить защиту данного документа (разрешено все, или только комментарии, чтение, изменения в полях форм и т.п.). Сама защита устанавливается при помощи метода Protec()t.
  • ReadOnly — здесь объяснений не требуется. Это свойство доступно только на чтение (поскольку соответствующий атрибут устанавливается в файловой системе).
  • RemoveDateAndTime и RemovePersonalInformation — удалить информацию о дате и времени произведенных изменений и всю информацию о пользователе из документа (включая свойства документа). Может быть полезным при создании файла-образца.
  • Saved — очень важное свойство. Позволяет определить, изменялся ли документ со времени последнего изменения.
  • SaveEncoding — позволяет явно указать (или получить) кодировку, которая будет использоваться при сохранении документа.
  • SaveFormat — позволяет получить информацию о формате документа (DOC, RTF, TXT, HTML и т.п.). Доступно только для чтения.
  • Sections — возвращает коллекцию разделов документа. Sentences — то же самое для предложений. Аналогично работают свойства Shapes , Styles, Subdocuments, Tables, Windowsи Words .
  • Type — возвращает тип документа (обычный, шаблон или Web-страница с фреймами).
  • Variables — еще одно очень удобное свойство. Можно использовать для сохранения своих служебных данных вместе с документом, как и пользовательские атрибуты ( custom attributes), но в отличие от пользовательских атрибутов документа, пользователям эти свойства не видны.
Читать еще:  Как удалить адресную книгу

Теперь — о самых важных методах объекта Document:

  • Activate() — этот метод позволяет сделать указанный вами документ активным (например, для ввода текста).
  • AddToFavorities() — добавить ссылку на документ в каталог «Избранное». Может быть полезным, если пользователь будет работать с ним постоянно.
  • CheckSpelling() и CheckGrammar() — запустить проверку орфографии и грамматики соответственно.
  • Close() — закрыть документ. Можно закрыть с сохранением (по умолчанию), а можно — без (если указать соответствующий параметр).
  • Compare() — сравнить документ с другим и сгенерировать редакторские пометки в местах, где обнаружены различия.
  • DataForm() — возможность редактирования форм данных — то есть данных, которые в документе разделены разделителями полей и строк. Вообще говоря, формы данных в Word рекомендуется использовать только в случае крайней необходимости — гораздо больше дл работы с упорядоченными данными приспособлены Excel и Access.
  • DetectLanguage() — определить язык текста. Проверка производится по предложениям, на основе сверки слов в них со встроенными словарями. Такая проверка производится автоматически во время ввода текста или открытия нового документа. Чтобы заново провести проверку языков, свойство LanguageDetected нужно перевести в False.
  • FitToPages() — очень интересный метод. Размер шрифта автоматически меняется таким образом, чтобы текст стал занимать на одну страницу меньше. Можно использовать для устранения «висячих страниц» и других проблем верстки.
  • FollowHyperlink() — открыть указанный вами документ в соответствующем приложений (если HTML, то в Internet Explorer).
  • GoTo() — очень мощный метод, существует для объектов Document, Range и Selection. В первых двух случаях он возвращает объект Range, в третьем — просто перемещает указатель ввода текста на нужное место. Умеет переходить на начало страницы, строки, закладки, комментария, таблицы, секции, поля, ссылки, формулы и т.п. Может на определенный номер этого объекта, первый, последний, следующий и т.п. Очень удобно использовать для установки указателя в нужное место для автоматического ввода текста.
  • Merge() — возможность произвести слияние двух документов. Метод очень сложный и мощный, основывается на применении редакторских пометок.
  • PresentIt() — открывает данный документ Word в PowerPoint.
  • PrintOut() — очень сложный метод, который позволяет вывести на печать весь документ или его часть. Принимает два десятка параметров (все — необязательные). Может использоваться для объектов Application, Document и Window.
  • PrintPreview() — перевести документ в режим предпросмотра.
  • Protect() — возможность ограничить внесения изменений в документ при помощи пароля или IRM.
  • Range() — очень важный метод. Возвращает объект Range (он будет рассмотрен ниже), принимает в качестве параметров номер начального символа диапазона и номер конечного символа.
  • Redo() — повторить последнее действие. В качестве параметра принимает количество последних действий, возвращает True, если повтор был произведен успешно.
  • Repaginate() — переразбить документ на страницы. Обычно используется, если автоматическая разбивка была ранее отключена.
  • Save() — смысл этого метода очевиден. Если документ еще не сохранялся, открывается диалоговое окно Save As.
  • SaveAs() — очень мощный и сложный метод. Можно определить путь для сохраняемого документа, его формат, кодировку, пароли на открытие и изменение документа, вставку шрифтов и многое другое. Очень полезный метод, например, для автоматической конвертации документов.
  • Select() — позволяет просто выделить весь документ. Этот метод существует для очень большого количества объектов, в том числе Selection и Range.
  • TransformDocument() — исключительно мощный метод, но только для программистов, которые хорошо разбираются в XML и XSLT. Позволяет применить к документу таблицу преобразований стилей (Extensible Stylesheet Language Transformation, XSLT), при помощи которой можно поменять все, что угодно.
  • Undo() — отменить определенное количество последних действий. По синтаксису и принципам работы — полный аналог Redo().
  • UndoClear() — очистить буфер отмены изменений, чтобы пользователь не смог откатить произведенные действия.
  • UnProtect() — снять защиту с документа (определенную методом Protect() или на графическом интерфейсе). Может быть очень полезным перед программным внесением изменений в защищенный документ.

Часто используемых событий у объекта Document всего три — New() (можно определить только для шаблона, срабатывает, когда на основе этого шаблона создается новый документ), Open() и Close(). Все эти свойства очевидны и изначально доступны в окне редактора кода Visual Basic.

vba — документ — word saveas параметры

Сообщение Word VBA.SaveAs2(в некоторых ситуациях) (2)

» cannot be found. Check your spelling, or try a different path.

is currently in use. Try again later.

  • Word cannot complete the save to due to a file permissions error.
  • Вы можете увидеть вышеупомянутые ошибки, если Word 2007 конфликтует с антивирусным программным обеспечением. Большинство этих конфликтов были решены производителями антивирусных программ, но для решения проблемы необходимо загрузить и установить обновления или исправления для антивирусного программного обеспечения (а не только новых описаний вирусов). См. Веб-сайт производителя программного обеспечения для получения возможных обновлений и статей базы знаний, касающихся проблем с конфигурацией.

    В большинстве обсуждений на форуме я обнаружил, что на самом деле антивирусное сканирование на стороне сервера — что-то о взаимодействии между механизмом сохранения Office 2010, не играющим приятным с живым, сканированием файлов на основе доступа.

    Даже если это не решит вашу проблему, надеюсь, что это поможет!

    • SharePoint 2010
    • Word 2010
    • Windows 7 Enterprise

    У меня есть файл .docm, который находится в библиотеке документов SharePoint. Когда он открывается, макрос запускается и запрашивает у пользователя новое имя файла и папку, а затем использует .SaveAs2 для сохранения копии файла в указанном месте в виде .docx без макроса.

    Я не могу использовать типы содержимого SP с правильным .dotm в качестве шаблона, так как в библиотеке имеется более 30 различных шаблонов файлов. Я должен использовать .docm в библиотеке SharePoint, а затем убедитесь, что пользователь сохраняет копию файла на свой личный диск.

    Поэтому я использую код в открытом событии. Я разрешаю пользователю указать папку и имя файла. Затем .SaveAs2 принимает эти параметры и сохраняет текущий файл в новом пути с новым именем как обычный .docx-файл без макросов. Я strFolder вам подробности о том, как strFolder и strDoc . Будьте уверены, что они существуют. У меня есть debug.print с полным именем файла, и это правильно.

    Проблема в том, что этот код вызывает сообщение о том, что файл не найден.

    Ну, да, я пытаюсь сохранить файл в этом месте. Конечно, этого не существует. В этом-то и дело. (Обратите внимание, что папка существует.)

    После закрытия окна сообщения Word с радостью сохраняет файл в указанном месте.

    Кроме того, сообщение появляется только в том случае, если исходный файл открывается в режиме чтения из SharePoint И если новый путь к файлу находится на сетевом диске.

    Сообщение НЕ появляется, если

    • файл открывается в режиме редактирования (щелкните файл SharePoint, выберите «Редактировать» в следующем диалоговом окне), или если
    • файл сохраняется на локальном диске (C 🙂 или если
    • файл открывается из диалога File> Recent backstage.

    В производственной системе пользователи не будут иметь выбор только для редактирования или чтения. Они будут по умолчанию только для чтения. Кроме того, пользователи не смогут сохранять на локальном диске C: , так как бизнес-система ставит свой профиль и «Мои документы» на сетевой диск (H :).

    • сохранение файла с другим подходом: использование msoFileDialogSaveAs — то же сообщение
    • подавляя сообщение с Application.DisplayAlert = False (я знаю, но я был в отчаянии) или wdAlertsNone . — Не работает. Сообщение по-прежнему отображается
    • подавление сообщения с помощью Application.ScreenUpdating = False. Не работает. Сообщение по-прежнему отображается.
    • подавление сообщения с обработкой On Error Resume Next или On Error Goto MyHandler но сообщение появляется без обработчиков ошибок. Сообщение имеет синий значок «i», поэтому, возможно, он не интерпретируется как ошибка, а как часть информации.
    Читать еще:  Адресная строка в телефоне

    Как заставить сообщение уйти?

    Кроме того, хотя это не является существенным, было бы неплохо узнать:

    • Почему режим чтения или редактирования имеет значение, когда файл сохраняется в новом месте?
    • Почему имеет место новое местоположение файла (сетевой путь или локальный путь) при его сохранении?
    • И почему сообщение появляется, когда файл сохраняет правильно?

    После нескольких тщетных попыток изменить способ использования документа SharePoint в режиме только для чтения, я использовал следующий подход для создания нового документа Word, сохранил его в временной папке пользователя, скопировал документ из папки temp в папку, указанную ранее Пользователь. Теперь документ существует и использование SaveAs не вызывает сообщение об ошибке.

    Перед выполнением кода ниже пользователь определяет имя файла (strDoc) и папку для документа, который будет сохранен.

    VBA: cоздание первой программы

    В первой части статьи мы приступили к работе по исследованию языка Visual Basic for Applications, записали первую макрокоманду и начали изучение ее текста, а здесь оно будет продолжено.

    Для выравнивания абзацев по ширине при записи макроса была вызвана функция замены Word. Ее вызов и был записан на языке VBA. Строка Selection.Find.ClearFormatting, видимо, предназначена для снятия параметров форматирования в окне замены — эквивалент нажатию кнопки «Снять форматирование», а строки Selection.Find. ParagraphFormat.Alignment = wdAlignParagraphLeft и Selection. Find.Replacement.ParagraphFormat. Alignment = wdAlignParagraphJustify определены для установки параметров того, что надо искать (выравнивание Left, т. е. «По левому краю»), и того, на что следует заменить (выравнивание Justify, т. е. «По ширине»). Команды впрямую соответствуют переводу слов с английского языка на русский: Selection — выделение, Find.Replacement — найти и заменить, ParagraphFormat — формат абзаца, Alignment — выравнивание, AlignParagraphJustify — равнять абзац по ширине. С оператором With мы уже знакомы, поэтому в следующем фрагменте речь пойдет об окне «Найти и заменить».

    Легко догадаться, что параметры объекта Selection.Find (т. е. поиск по всему тексту или по его выделенной части) соответствуют параметрам окна «Найти и заменить»: .MatchWholeWord — искать целое слово; .MatchCase — учитывать регистр; .Text — заменяемый текст, а .Replacement.Text — сообщить, на что заменить. В рассматриваемом примере заменяется не текст, а форматирование, поэтому строки с этими параметрами заполнять не нужно.

    Заметив в первых четырех строках повторение слов Selection.Find, можно счесть, что и их содержимое допускается включить в блок оператора With. Проверим, так ли это. Ниже последнего записанного макроса введем строку Sub experience1() — имя после Sub может быть любым, важно лишь, чтобы оно не совпадало с какой-либо командой VBA. Нажмем «Ввод» — через две строки редактор VBA поставит End Sub. С помощью команд «Копировать» и «Вставить» скопируем из нашей программы в текст нового макроса блок With Selection.Find, а затем переместим все строки, отражающие в макросе «работу» окна «Найти и заменить», в блок With Selection.Find, убрав при этом слова Selection.Find.

    Теперь испытаем программу: откроем из общего набора еще один документ и, нажав клавишу , запустим новый макрос (курсор должен стоять внутри текста запускаемого макроса). Замена произошла так, как требуется, значит, можно сокращать текст программы описанным выше способом.

    Раскроем значение еще нескольких интересных строк, смысл которых может вызвать вопросы: .Forward = True, .Wrap = wdFindContinue, .Execute Replace:=wdReplaceAll. В первой строке указывается направление поиска — вперед или назад (в последнем случае стояло бы значение False). Но что же скрывает вторая? Чтобы выяснить это, напишем еще один макрос с такой же заменой выравнивания, но с разными параметрами направления поиска (табл. 1).

    Вполне очевидно, что наличие или отсутствие согласия на продолжение поиска не влияет на записываемый текст. Тогда как же отказаться от запроса на продолжение? Откроем текст макроса и поставим еще один знак «=» после команды .Wrap.

    Теперь все ясно: чтобы отказаться от замены в конце документа, нужно обозначить параметр .Wrap как wdFindStop (табл. 2).

    Осталось разобраться со строкой .Execute Replace:=wdReplace All. Поскольку слово Execute переводится как «исполнить», оно должно означать команду запуска поиска. Обратимся к справочной системе.

    Из четырех предложенных ссылок — Dialog, Find, KeyBinding, MailMerge — нас интересует Find, поскольку мы работаем именно с этим объектом.

    Так и есть, Execute запускает команду поиска и замены на выполнение: Runs the specified find operation. Returns True if the find operation is successful. Из текста справки выясняется, что все параметры поиска и замены можно задать также в скобках, а кроме того, записать в переменную результат выполнения команды — успешно ли прошел поиск (т. е. были ли найдены в данном сеансе работы команды «Найти и заменить» искомые элементы). В данном случае этого не требуется, однако запомнить ее все же стоит.

    Продолжим изучение записанной макрокоманды.

    Вопросов не вызывает — это команда сохранения активного документа.

    А вот здесь уже потребуется редактирование. Это команда «Сохранить как. » — поскольку соответствующая опция Word задается в диалоговом окне, то в текст макроса помещаются все возможные параметры, как соответствующие установленным по умолчанию, так и нет: AddToRecentFiles — добавлять ли ярлык в папку Recent, EmbedTrueTypeFonts — внедрять ли шрифты TrueType. Наиболее интересны элементы FileName:=?Доклад1.rtf? и FileFormat:=wdFormatRTF — имя сохраняемого активного документа и его формат соответственно. Последний, Rtf, нас устраивает. А вот как быть с именем? Ведь у каждого файла оно должно быть свое, уникальное. Сначала попробуем из текста данной команды просто исключить строку с указанием имени. Создадим еще один модуль, скопируем туда полную команду ActiveDocument.SaveAs со всеми параметрами и удалим строку FileName:=?Доклад1.rtf?. После запуска программы ничего не произошло, однако она все же что-то делала, ведь и жесткий диск работал, и в течение нескольких секунд система была недоступна, да и сообщений об ошибках не появилось. Проверим, что делалось. Откроем в Блокноте или другом текстовом редакторе файл, который сохранялся, — в данном случае это файл «Доклад2.doc», — предварительно выгрузив его из Word.

    Так вот в чем дело — файл был сохранен в формате Rtf, но под прежним именем и с расширением .doc. Но нас это не устраивает, поэтому имя пусть останется то же, а вот расширение должно быть .rtf.

    А что произойдет, если запустить программу при активном и ни разу не сохранявшемся документе? Проделаем это. Активный документ получит имя Doc1.doc (или Doc2.doc, Doc3.doc — у кого как) и окажется либо в папке, где имело место последнее сохранение вручную какого-либо файла, либо в папке «Мои документы», предназначенной по умолчанию для файлов Word, либо в любой другой заданной вами (путь «по умолчанию» можно посмотреть, выбрав пункты «Сервис?Параметры?Расположение».

    Таким образом, если программно сохранять ранее не сохранявшийся документ, не задавая ему имя и место расположения (впрочем, последнее можно указать, включив в пункт FileName полный путь к нему), то активный файл сохранится в папке и с именем по умолчанию (либо там, где был последний раз сохранен вручную какой-нибудь документ).

    Но как же быть с нашей программой? Ведь требуется, чтобы все обрабатываемые файлы сохранялись со своими именами и с расширением .rtf. Попробуем получить имя активного документа программно. Создадим еще один макрос, введем в него параметр ActiveDocument, поставим точку и увидим, что среди возможных продолжений команды есть свойство Name.

    Проверим работу. Модифицируем экспериментальную процедуру следующим образом.

    Ссылка на основную публикацию