Letysite.ru

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

Vba закрыть word

Vba закрыть word

Добрый день мастера.
Подскажите как мне закрыть документ на програмном уровне, чтобы мне не вываливалась просьба о сохранении.

WordApplication1.Documents.Add(EmptyParam,EmptyParam);
WordApplication1.Selection.InsertAfter(» «+#13);
WordApplication1.Selection.InsertAfter(» «+#13);

// WordApplication1.DisplayAlerts := 1;
WordApplication1.Quit;

Пробовал с DisplayAlerts поиграться, но так ничего и не получилось, все равно вываливается просьба сохранить документ.


LORAN ( 2005-12-19 15:22 ) [1]

>>WordApplication1.DisplayAlerts := 1;
С какого перепоя


Slym © ( 2005-12-19 15:27 ) [2]


Scorpio © ( 2005-12-20 09:35 ) [3]

WordApplication1.DisplayAlerts := FALSE;

Он мне кидает ошибку:
[Error] Unit2.pas(64): Incompatible types: «TOleEnum» and «Boolean»

А что за переменная

WordApp.Quit(false);

Что ей присваивается .


Dmitrij_K ( 2005-12-20 11:18 ) [4]

Совсем не понимаю почему у меня работает такая неделфовая конструкция


scorpio © ( 2005-12-20 11:57 ) [5]

Если работать с такой конструкцией:

var
w : variant;

w.docclose(2);

Так она работает, но здесь проблема, я никак не могу найти как мне прыгать по строчкам, чтобы я мог поместить строку в нужное мне место по X*Y, и со своим шрифтом.


umbra © ( 2005-12-20 12:08 ) [6]

2 Scorpio © (20.12.05 09:35) [3]

в ворде DisplayAlerts не булевская переменная, а энумератор. может иметь одно из значений wdAlertsNone, wdAlertsMessageBox, wdAlertsAll.

Справка по Word VBA рулит!


k2 © ( 2005-12-20 12:11 ) [7]

Работа с Word — Создание, открытие, форматирование, закрытие и сохранение

Использование Word в приложениях на Visual Basic 6 открывает широчайшие возможности для создания профессионально оформленных документов (например отчетов). Это часто необходимо при работе в фирме или на предприятии для обеспечения документооборота. Основным преимуществом использования Wordа в этом случае является то, что практически на всех компьютерах, используемых в фирмах и на предприятиях установлены Windows и пакет Microsoft Office. Поэтому подготовленные документы Word не требуют каких-либо дополнительных усилий для их просмотра, печати и редактирования. Единственное что нужно помнить, это то что работа через автоматизацию OLE (связывание и внедрение объектов) на деле оказывается довольно медленной технологией, хотя и очень полезной.

Чтобы использовать объекты Word в Visual Basic , необходимо инсталлировать сам Word. После этого вы получаете в своё распоряжение библиотеку Microsoft Word Object Library, которую нужно подключить к текущему проекту через диалоговое окно «Разработать»>>»Ссылки» (References) и указать Microsoft Word 9.0 Object Library (для Word 2000).

Два самых важных объекта Word это Word.Application и Word.Document. Они обеспечивают доступ к экземпляру приложения и документам Word.

Поэтому в раздел Generals «Общее» формы введите следующий код для объявления объектных переменных приложения Word и документа Word.

Чтобы создать новый экземпляр Word, введите такой код кнопки;

Для форматирования печатной области документа используйте данный код:

(вообще-то Word использует для всех размеров своих элементов пункты, поэтому для использования других единиц измерения, необходимо использовать встроенные функции форматирования.)

  • CentimetersToPoints(Х.ХХ) — переводит сантиметры в пункты.
  • MillimetersToPoints(X.XX) — переводит миллиметры в пункты

Для того чтобы в своём приложении не писать постоянно одно и тоже имя объекта, можно использовать оператор With.

Например код находящейся выше можно переписать так:

Если вам необходимо создать документ Word с нестандартным размером листа, то используйте данный код:

Данный код меняет ориентацию страницы (практически меняет местами значения ширины и высоты листа):

  • wdOrientLandscape — альбомная ориентация ( число 1)
  • wdOrientPortrait — книжная ориентация ( число 0)

Для сохранения документа под новым именем и в определенное место используйте данный код код:

После такого сохранения вы можете про ходу работы с документом сохранять его.

Или проверить, были ли сохранены внесенные изменения свойством Saved и если изменения не были сохранены — сохранить их;

Завершив работу с документом, вы можете закрыть сам документ методом Close и сам Word методом Quit.

Если в методах Close и Quit не использовать необязательный параметр True то Word запросит согласие пользователя (если документ не был перед этим сохранён) на закрытие документа.

Если вам необходимо оставить Word открытым, просто не используйте методы Close и Quit.

Если вам необходимо поставить пароль на документ, то используйте код:

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), но в отличие от пользовательских атрибутов документа, пользователям эти свойства не видны.
Читать еще:  Почему в документе word

Теперь — о самых важных методах объекта 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() или на графическом интерфейсе). Может быть очень полезным перед программным внесением изменений в защищенный документ.
Читать еще:  Как добавить комментарии в word

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

Слияние документа Word с источником данных Microsoft SQL Server с помощью VBA Access 2003

Сейчас мы с Вами рассмотрим пример реализации того, как можно выполнить слияние данных Word с данными Microsoft SQL Server, при этом данный процесс будет автоматизирован средствами VBA Access 2003.

Многие, наверное, уже умеют осуществлять слияние документов Word, например, с источником данных Excel или с тем же SQL сервером, но не все знают, как можно автоматизировать данный процесс или внедрить его в какую-нибудь программу.

Однажды у меня встала задача автоматизировать слияние некого шаблона Word с данными расположенными на SQL сервере, при этом все это необходимо было внедрить в программу, разработанную в Access 2003 (ADP проект). И сегодня я покажу пример решения данной задачи.

Исходные данные

И для начала давайте разберем исходные данные, т.е. что мы имеем.

Итак, в качестве клиента, как я уже сказал, у нас будет выступать ADP проект Access 2003. В качестве источника данных для примера будет выступать SQL Server 2012 Express. На компьютере установлен Microsoft Office 2013 (и Access 2003).

Создадим на сервере тестовую таблицу и заполним ее данными (допустим в базе данных Test). Для этого Вы можете запустить следующую SQL инструкцию.

Начинающим программистам SQL рекомендую почитать мою книгу «Путь программиста T-SQL», в ней я подробно рассказываю про многие полезные конструкции и функции языка T-SQL.

Заметка! Если Вы не знаете, что делает вышеуказанная инструкция, рекомендую пройти онлайн-курс «T-SQL. Путь программиста от новичка к профессионалу. Уровень 1 – Новичок», который предназначен для начинающих и на нем подробно рассмотрены все базовые конструкции языка SQL, включая все вышеперечисленные.

Создаем файл подключения к источнику данных MS SQL Server

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

Для создания файла подключения к SQL серверу давайте откроем Word и стандартным способом создадим данный файл, т.е. с помощью функционала «Рассылки». (Кстати пример создания подключения к SQL серверу из Excel мы с Вами уже рассматривали в материале – Excel — Подключение и получение данных с SQL сервера).

Переходим на вкладку рассылки и в меню «Выбрать получателей» выбираем «Использовать существующий список».

Затем в окне выбора источника данных нажимаем кнопку «Создать».

Далее выбираем тип источника данных, т.е. Microsoft SQL Server. Жмем «Далее».

Потом вводим адрес сервера и нажимаем «Далее».

Затем выбираем базу данных и таблицу для подключения, еще раз напомню, это всего лишь шаблон, все эти параметры мы будем переопределять, жмем «Далее».

И в заключение вводим понятное название файла подключения, а также мы можем сразу его сохранить в нужный нам каталог путем кнопки «Обзор», по умолчанию он сохраняется в «C:UsersИмя_ПользователяDocumentsМои источники данных». Нажимаем «Готово».

Все, файл создан, Word можем закрыть без сохранения.

Создаем шаблон Word для слияния

Теперь давайте подготовим шаблон Word, т.е. это тот документ, в который мы будем подставлять данные из базы данных SQL сервера.

Читать еще:  Set password here

Вся подготовка сводится к тому, что нам необходимо вставить поля слияния там, где это нам нужно. Это делается следующим образом. Вкладка «Вставка -> Экспресс-блоки -> Поле».

Ищем поле MERGEFIELD и вводим название поля, которое будет соответствовать полю в источнике данных (в моем случае это ProductName и Price). Жмем «ОК».

Так как у меня это тестовый шаблон в нем текста практически не будет, и выводить я буду всего два поля, у Вас скорей всего будет много текста и много полей слияния.

Код VBA Access 2003 для слияния документа Word с источником данных MS SQL Server

Осталось написать код VBA, который будет осуществлять слияние. Для примера давайте добавим на форму кнопку StartMerge и поле Price для фильтрации данных. Затем в редакторе Visual Basic напишем процедуру для слияния, допустим с названием MergeWord, и в обработчик события кнопки StartMerge (нажатие кнопки) вставляем код вызова этой процедуры. Весь код будет выглядеть следующим образом (я его прокомментировал). Сразу поясню, что шаблон Word и файл ODC у меня лежат в каталоге D:Test.

Сохраняем и проверяем работу.

После нажатия на кнопку (StartMerge) запустится Word, в котором уже все данные заполнены и документов будет столько, сколько строк в источнике.

Как видим, все работает. На этом у меня все, надеюсь, материал был полезен. Пока!

Opening/Activating Word Documents in a VBA macro

I’m hoping a VB/VBA expert can help me out. Consider the following: The user opens a document in Word 2003, and within the Normal.dot AutoOpen macro, we look at current document, and if it has been opened by clicking on a link on a webpage, and meets certain other application specific criteria, close the streamed ‘copy’ and open the source document (found on a shared drive we can assume the user has access to):

My thought was that I needed to call Activate to ensure that the original document was the ActiveDocument , but I’m getting a 4160 ‘Bad file name’ error on the .Activate call. If I comment out the call to .Activate , it appears that ActiveDocument is set to the origDoc document, even if there were other documents already opened (I’m not really sure how the Documents Collection is managed, and how Word determines what next ActiveDocument would be if you programatically close the current ActiveDocument)

So, does calling .Open on a document explicitly set the Document to be the ActiveDocument ? Also, does calling .Activate on the already active document cause an error?

I haven’t really been able to find much documentation about this, so thanks in advance for any suggestions and insight!

Presumably you’ve been handling the streamed copy of the document as the ActiveDocument in your code. It would be much better to assign that document object to a variable at the begining of your code and use your variable through the rest of the code. As other’s have pointed out, you are likely closing the wrong version of the document in the second line of code. Also it would be wise to assign the «original» document object to a variable when you open it. – robartsd 08 авг. 14 2014-08-08 15:38:03

4 ответа

You have an error here:

Should be Documents.

Yes, you can activate the active document. Nothing happens then.

Yes, opened document becomes active. If you are not sure, use Documents.Open(origDoc).Activate .

Создан 01 апр. 09 2009-04-01 18:36:00 GSerg

Thanks for spotting the typo, unfortunately it was only in my post, not the actual code. If you are allowed to activate the open document, then how come I am getting a 4160 error on the .Activate call? – echoesofspring 01 апр. 09 2009-04-01 20:11:10

What exactly does origDoc contain? – GSerg 01 апр. 09 2009-04-01 21:25:24

You shouldn’t be using the ActiveDocument object in the first place unless absolutely necessary because it’s very unreliable. The preferred approach would be this:

I am obviously missing something here. You say to not use ‘ActiveDocument’, but you go ahead and use it in your code sample? – Sabuncu 23 июл. 13 2013-07-23 22:45:33

Beware that there are a variety of problems that can be encountered:

if you want to re-open the document after closing it once. Word/Windows DOES NOT ‘release’ the filename and you get a ‘file busy‘ message, or message about ‘creating a temporary copy‘. to deal with this problem, I’ve had to develop an elaborate system of creating/saving and tidying up multiple versions of any other documents I open/manipulate in my Word applications because of this design flaw in Office Open / Close / Save methods.

Use the ReadOnlyRecommended property set to False with the .Open method

referring to the document object (named doc, above) can cause serious errors if you do not assure that the doc object still exists before you try and manipulate it. Remember always, that Word is an ‘open’ application platform. and the user can be doing things you didn’t count on. in the last millisecond or so. This advice holds for any other object or property you may wish to manipulate in Word.

if you manipulate the Documents collection (or any other) without assuring that the document or other object is still there and valid before deleting or moving it within the collection you may
get ‘stack overflow‘ errors. Particularly if you try and close/delete objects in a collection starting at .item(1) . You must delete items in a collection from the last one, and remember that the collection idicies and pointers change whenever you .add/.remove/.close items from them.

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