Общим
свойством связывания и внедрения
является то, что ре¬зультаты работы
одного приложения могут быть включены
в дру¬гое. Осуществить это можно с
помощью двух довольно различных средств
OLE.
1. связывание
и внедрение
2. использование
OLE
Связывание
При
связывании файлов образуется связь
между файлом-источником и фай¬лом-приемником.
Источником может быть, например, лист
Excel, часть которо¬го или весь лист
используется в файле-приемнике WORD Пока
будет су¬ществовать связь между этими
двумя документами, любые изменения в
диа¬грамме Excel (исходные данные) будут
отражены в документе WORD (связан¬ные
данные). Рабочая таблица на самом деле
не является частью документа WORD, это
просто окно, через которое вы можете
видеть рабочую таблицу Ex¬cel. Если обновить
данные в файле-источнике, скажем в
рабочей таблице Excel, то эти данные
автоматически обновятся во всех связанных
с этой таблицей до¬кументах. Еще одним
преимуществом связывания является
экономия размера файла-приемника, т.е.
с одним файлом-приемником может быть
связано не¬сколько объектов, которые
при вставке в файл резко увеличили бы
его объем.
Для
организации связи, как правило, требуется
гораздо меньше ресурсов, чем для вставки
объектов непосредственно в файл-приемник.
Однако при использовании связанных
файлов существует риск потери инфор¬мации.
Частой причиной потери или искажения
данных является разрыв связи. Это обычно
происходит при перемещении файла-источника
в другую папку или при его переименовании.
Можно столкнуться с неприятными
ситуациями, когда после передачи файла
по компьютерной сети обнаружится, что
связи на¬рушены.
Часто
файлы-источники хранятся на сервере, и
любое количество пользовате¬лей может
установить связь с ними. Пока
документы-приемники связаны с файлами
на сервере, все хорошо. Но если вашему
коллеге в другом конце стра¬ны нужен
файл с вашего компьютера, то при пересылке
необходимо будет пе¬редать все
файлы-источники и установить новые
связи, так как местоположе¬ние папки,
содержащей файлы-источники, будет
изменено. В этом случае луч¬шим выбором
будет второе средство ОLЕ — внедрение.
Внедрение
Внедрение
больше похоже на обычное копирование
и вставку, так как поме¬щает копию
объекта из приложения-источника в файл
приложения-приемника. Главным и
существенным преимуществом внедрения
перед обычным копиро¬ванием и вставкой
является то, что вы можете редактировать
внедренный объ¬ект, оставаясь в
приложении-приемнике. При обычном
копировании и вставке вы должны были
бы переключиться в приложение-источник,
отредактировать объект и еще раз
скопировать его в файл-приемник, а при
редактировании вне¬дренного объекта
приложение-приемник обычно передает
управление прило¬жению-источнику. После
внесения каких-либо изменений управление
переда¬ется обратно приложению-приемнику,
а от приложения-источника не остается
никаких следов, кроме обновленного
объекта. Главным преимуществом вне¬дрения
перед связыванием является удобство
при перемещении файлов. Вы не ограничены
связями, ассоциирующимися с исходными
объектами. Вы можете внедрить объект в
файл, передать его своим коллегам,
проживающим в другом конце страны, и
они смогут открыть его, как и любой
другой документ, если только у них есть
в наличии соответствующее приложение-приемник.
Кроме того, располагая соответствующим
приложением-источником, они смогут
так¬же отредактировать и изменить
внедренные объекты.
Документы,
содержащие внедренные объекты, могут
становиться довольно-таки объемными,
даже большими, чем сумма размеров всех
файлов-источников, потому что, кроме
внедренных данных, в документ включается
не¬которая дополнительная информация,
связанная с процессом внедрения. При
использовании внедренных объектов
необходимо принять во внимание и то,
что изменения в оригинальном файле-источнике
никак не отражаются на фай¬ле-приемнике,
в отличие от связанных файлов.
Для
связи и внедрения объектов можно
воспользоваться следующими способами:
1. выполнить
команду «Копировать» в буфер и
воспользоваться диалоговым окном
«Специальная вставка»
2. вставить
объект с помощью команд «Объект» и
«Рисунок» из меню «Встав¬ка»
3. переместить
объект с помощью мыши непосредственно
из приложения — ис¬точника в приложение
— приёмник (возможно, с использованием
Рабочего стола в качестве промежуточного
пункта).
Окно
«Специальная вставка» примет другой
вид в нашей задаче. Охарактеризу¬ем
его.
В
верхней части окна — Источник окно «Как»
помогает выбрать тип сведений (формата)
для специальной вставки. Если нужно
получить после вставки точ¬ную копию
объекта с возможностью его последующего
редактирования, то вы¬брать формат
«Объект Документ МS Word». Если нужна
точная копия объекта, но изменения
вносится не будут, то формат Рicturе
позволит уменьшить размер файла, что
особенно важно при передаче данных.
Формат Тех1 подходит, когда нужно вставить
только основной текст, а форматирование
будет осуществлять¬ся средствами
приложения — приёмника. Описанное выше
справедливо для внедрения. Если в
диалоговом окне установить параметр
«Связать», то сохра¬нится возможность
выбора трех форматов для вставки, но
только один позво¬лит вставить объект
корректно — это формат объект Документ
МS Word.
Диалоговое
окно Связи
Можно
получить информацию о связанном объекте,
выбрав пункт Связи из ме¬ню Правка.
В
окне списка Исходный файл приведена
информация о всех связях в докумен¬те
с указанным именем файлов, а также
методов обновления для каждого фай¬ла.
Можно также установить обновление связи
по запросу вместо принятого по умолчанию
автоматического обновления. Используя
командные кнопки в пра¬вой части
диалогового окна, можно обновить связь
по запросу, открыть в при¬ложении —
источнике, изменить источник или
разорвать связь между приложе¬нием —
источником и объектом. В случае разрыва
связи копия объекта будет восстановлена
в файл — приёмник. Разорванная связь
может быть восстановле¬на только в
случае повтора полного процесса установки
связи. В дополнение к диалоговому окну
Специальная вставка, связь или внедрение
объекта в документ МS Offiсе возможны по
командам меню Вставка, отра¬жающим
названия различных типов объектов.
Связывание файла состоит из указания
полного имени файла и установки параметра
Связать с файлом, в) Обмен данными между
приложениями. При использовании метода
drag & drор рекомендуется расположить
горизонтально два окна приложения
одно¬временно. Чтобы освободить
пространство окно можно убрать ПИ и
строку со-стояния. Иногда при использовании
метода drag& drор данные перемещаются
или копируются (Сtrl), а иногда внедряются.
Использование
фрагментов для передачи данных. Данные
в виде текста или диапазонов ячеек можно
хранить в виде фрагментов на Рабочем
столе. Фраг¬менты имеют свои атрибуты,
которые могут быть изменены с помощью
коман¬ды Свойства. Фрагменты хранятся
в папке WindowsРабочий стол.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Связывание и внедрение объектов (OLE) – это технология, разработанная Microsoft, которая позволяет приложениям Office взаимодействовать с другими приложениями. Это позволяет одному приложению для редактирования отправить часть документа в другие приложения, а затем импортировать или вернуть его вместе с другим содержимым.
Например, если Excel пытается связаться с PowerPoint, он отправляет команду объекту OLE и ожидает ответа от PowerPoint.
Однако, если требуемый ответ не получен в течение определенного периода времени, может отображаться следующая ошибка:
Microsoft Excel ожидает, пока другое приложение завершит действие OLE
Существует три распространенных причины того, что Microsoft Excel ожидает, пока другое приложение завершит сообщение OLE actio n:
- Добавление в приложение слишком большого количества надстроек, из которых один или несколько повреждены.
- Excel пытается открыть файл, созданный в каком-либо другом приложении, или извлечь данные из активного
- С помощью параметра «Отправить как вложение» в Excel можно отправить лист Excel по электронной почте.
Общее решение, которое рекомендуется, это перезагрузить компьютер и попробовать заново . Так как ошибка также может возникать из-за того, что Excel пытается взаимодействовать с другим приложением, которое не отвечает, рекомендуется закрыть Excel и все другие приложения. После этого вы можете снова открыть лист Excel и начать заново.
Однако, если проблема не устранена, вы можете попробовать любое из приведенных ниже решений.
1. Включение функции «Игнорировать другие приложения, использующие DDE».
1] Откройте лист Excel и перейдите в меню «Файл». В меню Файл выберите Параметры.
2] Откроется диалоговое окно параметров Excel. Перейдите на вкладку «Дополнительно» и прокрутите вниз до области «Общие». Там проверьте ‘Игнорируйте другие приложения, которые используют динамический обмен данными (DDE)‘.
Это должно уменьшить часть нагрузки на приложение и сделать его легче. Попробуйте перезапустить Excel после этого.
2. Отключение надстроек
1] Откройте лист Excel и перейдите в меню «Файл». В меню «Файл» выберите «Параметры».
2] Появится диалоговое окно «Параметры Excel». На вкладках слева нажмите Надстройки.
3] В нижней части этого окна находится окно управления. Выберите надстройки Excel и нажмите кнопку «Перейти» рядом с ней. Это заполняет список надстроек.
4] Снимите все флажки рядом с надстройками в поле Доступные надстройки и нажмите кнопку ОК.
Это отключает все надстройки, тем самым снижая нагрузку на приложение.
3: Использование других методов для прикрепления книги Excel
Использование встроенной в Excel опции «Отправить с помощью электронной почты» для отправки книги в виде вложения также может привести к отображению вышеуказанной ошибки OLE. Но вы можете решить эту проблему, прикрепив книгу Excel к своему сообщению через приложение электронной почты. Вы можете отправить свою книгу, прикрепив ее в виде файла к сообщению электронной почты в Outlook 2013/2010 или Hotmail. Фактически, вы можете использовать любое почтовое приложение на ваш выбор, чтобы обойти проблему.
Решения, обсуждаемые в этом посте, являются одними из самых эффективных и популярных, используемых для устранения ошибки Excel, упомянутой выше в обсуждении. Надеюсь, что-то здесь поможет вам.
OLE
При реализации обмена данными приложений данные/наборы данных могут представлять собой связанные или внедрeнные объекты. Связывание (Link) используется, если нужно, чтобы при изменении данных в исходном файле данные в другом файле также изменялись. Внедрение используется, если нужно использовать конечный файл (на другом компьютере) и нежелательно изменение данных в нeм при изменении исходных данных
Связанный объект — это объект, созданный в одном файле и вставленный в другой файл с поддержкой связи между файлами; связанный объект не является частью файла, в который он вставлен. При обновлении исходного файла связанный объект автоматически обновляется.
Внедрeнный объект является частью файла, в который он вставлен. При двойном щелчке на связанном объекте он открывается в приложении, в котором он был создан; при двойном щелчке на внедрeнном объекте появляется возможность редактирования его средствами текущего приложения.
Элемент управления OLE
Элемент управления OLE (панель элементов управления) используется для связывания /внедрения объектов в приложениях Visual Basic. Контекстное меню OLE содержит команды:
- вырезать, копировать, вставить, удалить,
- перенести
- вставить объект (имеется список объектов для выбора и возможность выбора типа вставки),
- специальная вставка — при выборе этой команды выводится диалоговое окно, где отображаются имеющиеся в наличии классы объектов. Имеется возможность сделать выбор — связь/внедрение; имеется возможность использования вместо объекта пиктограммы,
- создать связь, создать внедренный объект.
Не все команды отображаются или являются доступными; это зависит от состояния приложения и буфера обмена. Некоторые параметры элемента управления OLE даны в табл. 6.1.
Свойства | Пояснения |
---|---|
Action | Выполняемое действие. Недоступно во время разработки, возможны установочные значения в пределах 0 — 18; среди них: 0 — создаeт внедрeнный объект, 1 — создаeт связанный объект, 7 — открывает объект, 15 — отображает окно Специальная вставка, 18 — сохраняет OLE и т.д. Некоторые действия Action реализованы как методы |
AutoActivate | Определяет когда активизируется объект (после двойного щелчка, после получения фокуса и т.д.) |
AutoVerbMenu | Должно ли выводиться контекстное меню |
Class | Идентифицирует приложение, которое создаeт OLE-объект (например, Word) |
HostName | Содержит имя приложения, создавшего объект |
ObjectVerbs | Список команд, применимых к OLE-объекту |
ObjectVerbsCount | Количество таких команд (см. выше) |
OLEType | Возвращает состояние OLE-объекта в контейнере: связанный/внедрeнный |
OLETypeAllowed | Задание связывания, внедрения или обоих |
SizeMode | Возвращает и задаeт режим согласования размеров элемента управления OLE и загружаемого в него объекта |
SourceDoc | Имя файла, где находится объект (или который должен быть загружен в OLE-контейнер) |
SourceItem | Указывает на данные объекта, которые будут связаны |
Verb | Определяет вид действия, которое будет выполнено при активизации объекта с помощью свойства Action |
UpdateOptions | Когда содержимое объекта OLE может быть обновлено |
Методы | |
Close | Закрыть объект, завершить связывание с приложением, где он был создан |
Copy | Копирование из контейнера OLE в буфер обмена |
CreateEmbed | Внедрение объекта в OLE-контейнер. CreateEmbed (Action = 0) создает внедренный объект, CreateLink (Action = 1) создает cвязанный объект |
CreateLink | Создание связываемого объекта, пользуясь содержимым заданного файла |
Delete | Удалить объект |
DoVerb | Открыть объект для выполнения над ним одного из действий |
Paste | Вставить объект в OLE-контейнер из буфера обмена |
Updаte | Обновление объекта в OLE-контейнере (на основании данных приложения, посредством которого объект редактируется) |
События | |
ObjectMove | Происходит после изменений размеров или перемещения объекта, бывшего в OLE-контейнере |
Updated | Происходит после изменения данных в объекте |
Приложение OLE-сервер определяет множество операций (команд), которые могут выполняться над поставляемым им объектом. Каждый объект поддерживает собственный набор команд. Этот набор может изменяться во время работы приложения. OLE-объект получает список команд от приложения-сервера и доступ к этому списку команд осуществляет через свои свойства ( AutoVerbMenu, Verb, ObjectVerbs, ObjectVerbsCount ). Эти свойства доступны во время выполнения.
Практическая работа 41. OLE
41а. Элементарная операция OLE
Последовательность действий:
- Создать на форме элемент управления OLE для создания, например, связанного объекта,
- создать соответствующий файл, например, A:ole1.xls (см. код, данный ниже),
- ввести код, данный ниже,
- стартовать проект, сделать щелчок на форме, наблюдать результат.
Private Sub Form_Click() OLE1.Class = "Worksheet" ' приложение Excel OLE1.SourceDoc = "A:ole1.xls" ' имя файла ' использовать указанный блок данных OLE1.SourceItem = "A1A3:B1B3" OLE1.Action = 1 ' создать связанный объект End Sub
41в. OLE
Рассматривается загрузка объектов (см. процедуру Form_Load () в OLE-контейнер и реализация (по желанию пользователя) связывания/внедрения (см. процедуру Public Sub LinkEmb(FileName As String, Embed As Boolean) ). Последовательность действий:
- создать объекты: текстовый файл (приложение Word), таблицу (приложение Excel), базу данных (приложение Access), рисунок (приложение Paint),
- создать на форме элемент управления OLE (Name = ole1), два переключателя (Name = opt1 и opt2 соответственно, Caption = Link и Embed cоответственно), командную кнопку (Name = cmd1, Caption = Load Object), поле списка (Name = lst), табл. 6.1.
- ввести код данный ниже, стартовать проект,
- маркировать в поле списка lst, элемент, например, «Docum.Word», сделать щелчок на требуемом переключателе (Link или Embedding), затем сделать щелчок на командной кнопке «Load Object». В поле элемента OLE выводится соответствующий файл,
- сделать двойной щелчок в поле OLE на введeнном объекте.
В зависимости от того, какой переключатель использован (Link или Embed), вставленный объект выводится или в приложении Word для редактирования, или появляется возможность редактировать его средствами того приложения, в котором он находится. В случае Link внесeнные (пользователем) изменения остаются в исходном файле. Это можно проверить, загрузив файл в приложение Word.
' создать список объектов для загрузки в OLE-контейнер Private Sub Form_Load() With lst .AddItem ("Docum.Word") .AddItem ("Table.Excel") .AddItem ("Picture.Paint") .AddItem ("Database.Access") End With End Sub ' выбор загружаемого объекта (маркировать его в списке, см.: ' Select Case lst.ListIndex) и определение режима ' связывание/внедрение с учётом состояния переключателей Private Sub cmd1_Click() Select Case lst.ListIndex Case 0: LinkEmb "A:nin.doc", opt1.Value Case 1: LinkEmb "A:nin.xls", opt1.Value Case 2: LinkEmb "A:nin.bmp", opt1.Value Case 3: LinkEmb "A:nin.mdb", opt1.Value End Select End Sub ' в зависимости от значений переданных аргументов 'реализовать связь/внедрение Public Sub LinkEmb(FileName As String, Embed As Boolean) If Embed Then ole1.CreateEmbed FileName Else ole1.CreateLink FileName End If End Sub
На чтение 8 мин. Просмотров 490 Опубликовано 19.04.2021
Несколько пользователей Office сообщают об ошибке «Microsoft ожидает, пока другое приложение завершит действие OLE» при попытке запустить сценарий VBA или при попытке запустить Excel из BI. стартовая площадка. Сообщается, что проблема возникает во всех последних версиях Windows, включая Windows 7, Windows 8.1 и Windows 10)
Содержание
- Что такое действие OLE?
- Что вызывает ошибку “Microsoft Excel ожидает, пока другое приложение завершит действие OLE”?
- Метод 1. Удаление Adobe Acrobat PDFMaker (если применимо)
- Метод 2. Разрешение приложений, использующих DDE, в настройках Excel
- Метод 3: завершение процесса Internet Explorer (IE)
- Метод 4: Подавление Обмен сообщениями приложения Excel
- Метод 5. Отключить режим совместимости (если применимо)
Что такое действие OLE?
Действие связывания и встраивания объектов (OLE) – это, по сути, механизм, предназначенный для помощи различным приложениям Office (Word, Excel, Powerpoint, Sharepoint) для связи с другими приложениями для успешного завершения операции.
Что вызывает ошибку “Microsoft Excel ожидает, пока другое приложение завершит действие OLE”?
Мы исследовали эту конкретную проблему, просмотрев различные отчеты пользователей и официальную документацию Microsoft . Нам даже удалось воспроизвести проблему на одной из наших тестовых машин.
Если Excel выдает запрос на связь другому приложению (скажем, Word), он делает это с помощью объекта OLE, а затем ожидает ответ от заявки. Если ответ не приходит в установленное по умолчанию пороговое время, Excel выдаст конечному пользователю следующее предупреждение: «Microsoft Excel ожидает, пока другое приложение выполнит действие OLE»
Хотя сообщение об ошибке всегда одно и то же, на самом деле существует несколько довольно распространенных сценариев, которые вызывают эту конкретную ошибку в Microsoft Excel:
- Протокол DDE отключен в Excel . Эта проблема может возникать из-за того, что протокол динамического обмена данными (DDE) отключен в настройках Excel.
- Поврежденная установка Office . Некоторые затронутые пользователи сообщили, что проблема была решена после переустановки или восстановления всей установки Office.
- Надстройка Adobe Acrobat PDFMaker конфликтует с Excel . Было несколько отчетов пользователей, которым удалось решить проблему, отключив или удалив PDFMake. r.
- Процесс IE (Internet Explorer) мешает работе DDE . Обычно это происходит, когда пользователь пытается сохранить файл в Microsoft Excel. . В этом случае решение состоит в том, чтобы закрыть процесс вручную.
Если вы в настоящее время пытаетесь разрешить это конкретное сообщение об ошибке, эта статья предоставит вам выбор шагов по устранению неисправностей. Ниже представлен набор методов, которые другие пользователи в аналогичной ситуации успешно использовали для решения проблемы.
Для достижения наилучших результатов следуйте приведенным ниже методам по порядку, пока не найдете исправление, которое является эффективен в решении проблемы. Приступим
Метод 1. Удаление Adobe Acrobat PDFMaker (если применимо)
Некоторым пользователям удалось устранить сообщение об ошибке, удаление надстройки Adobe Acrobat PDF Maker. Как оказалось, этот плагин может конфликтовать с некоторыми версиями Microsoft Excel.
Вот список версий Office, совместимых с PDF Maker:
- Office 2010 (Office 14) 32-разрядная и 64-разрядная
- Office 2013 (Office 15) 32-разрядная и 64-разрядная версии
- Office 2016 (Office 16) 32-разрядная и 64-разрядная версии
Примечание. Вы можете ознакомиться с полным руководством Adobe по совместимости ( здесь ).
Если этот сценарий применим и вы не полагаетесь на PDF Maker В таком случае вы, скорее всего, сможете решить проблему, отключив или удалив надстройку Adobe Acrobat PDFMaker.
Вот краткое руководство о том, как это сделать:
Обновление: Вы также можете использовать это Fix-it (здесь) для автоматического отключения надстройки PDFMaker. Он совместим со всеми последними версиями Windows, включая Windows 10, Windows 8.1, Windows 7 и Windows Vista.
- Откройте Microsoft Excel и нажмите Файл . с помощью панели ленты.
- В меню “Файл” выберите Параметры (внизу списка меню).
- В меню параметров Excel нажмите Надстройки с помощью меню слева. Затем перейдите на правую панель, разверните раскрывающееся меню, связанное с Управление , и выберите Надстройки COM . Затем нажмите кнопку Перейти… , чтобы открыть меню Com Add-ins .
- В поле” Надстройки COM “снимите флажок, связанный с надстройкой COM для Acrobat PDFMaker Office , или выберите его и нажмите” Удалить “, чтобы удалить. его полностью.
- Перезагрузите компьютер и воссоздайте шаги, которые ранее вызывали ошибку, после завершения следующего запуска.
Если вы все еще столкнувшись с ошибкой «Microsoft Excel ожидает, пока другое приложение завершит действие OLE» , перейдите к следующему методу ниже.
Метод 2. Разрешение приложений, использующих DDE, в настройках Excel
Как сообщают многие пользователи, проблема может возникнуть, если Microsoft Excel настроен так, чтобы игнорировать любые приложения, которые пытаются взаимодействовать с Excel, использующий протокол динамического обмена данными (DDE) .
Например, скажем, вы дважды щелкаете k в книге Excel в проводнике Windows – как только команда регистрируется, динамический обмен данными (DDE) отправляется в Excel. Этот обмен даст указание Excel открыть книгу, по которой вы только что дважды щелкнули.
Если Excel настроен на игнорирование приложений, использующих динамический обмен данными протокол, обмен не произойдет, и вместо этого вы увидите сообщение об ошибке «Microsoft Excel ожидает, пока другое приложение выполнит действие OLE» .
К счастью, вы можете легко исправить эту проблему, войдя в меню Параметры в Excel и включив протокол DDE. Вот краткое руководство о том, как это сделать:
- Откройте Microsoft Excel и нажмите Файл . Не имеет значения, откроете ли вы новую книгу или новый документ.
- В Файл нажмите Параметры на левой панели.
- В меню Параметры Excel щелкните вкладку Дополнительно в левом меню. Затем перейдите на правую панель и прокрутите вниз, пока не дойдете до раздела Общие . Когда вы попадете туда, убедитесь, что флажок, связанный с Игнорировать другие приложения, использующие динамический обмен данными (DDE) , снят.
- Нажмите Ok , чтобы сохранить изменения, затем перезапустите Microsoft Excel. Затем повторите операцию, которая ранее вызывала ошибку «Microsoft ожидает, пока другое приложение завершит действие OLE» , и посмотрите, сохраняется ли проблема.
Если вы по-прежнему сталкиваетесь с тем же сообщением об ошибке, перейдите к следующему методу ниже.
Метод 3: завершение процесса Internet Explorer (IE)
Несколько пользователей, видящих «Microsoft ожидает, пока другое приложение завершит действие OLE » при попытке сохранить файл, вы можете увидеть ошибку, потому что процесс IE мешает динамическому обмену данными (DDE)
Пользователи в аналогичной ситуации сообщают, что проблема была решена после того, как они вручную завершили процесс IE. Вот краткое руководство, как это сделать:
- Нажмите Ctrl + Shift + Esc , чтобы открыть Диспетчер задач .
- В диспетчере задач перейдите на вкладку Процессы и посмотрите, есть ли у вас какой-либо процесс, принадлежащий Internet Explorer, который в настоящее время активен.
- Если вы видите одно открытое, просто щелкните его правой кнопкой мыши и выберите Завершить задачу , чтобы закрыть его.
- Вернитесь в Excel и посмотрите, появляется ли ошибка « Microsoft ожидает, пока другое приложение завершит действие OLE », когда вы повторно пытаюсь сохранить файл.
Если вы по-прежнему сталкиваетесь с той же ошибкой, перейдите к следующему методу ниже.
Метод 4: Подавление Обмен сообщениями приложения Excel
Если вы видите сообщение об ошибке при попытке запустить сценарий VBA, одним из обходных путей может быть подавление обмена сообщениями приложения с помощью крошечного фрагмента кода.
Но имейте в виду, что это не решит саму проблему – это всего лишь обходной путь, предотвращающий появление сообщения об ошибке. Однако это будет полезно, если ваша единственная цель – предотвратить появление сообщения об ошибке.
Вот краткое руководство по вставке кода VBA в Excel Workbook, который подавляет обмен сообщениями приложения Excel:
- Откройте книгу в Excel и нажмите Alt + F11 , чтобы открыть редактор Visual Basic (VBE) .
- На панели Project (слева) щелкните правой кнопкой мыши ThisWorkbook и выберите Вставить> Модуль .
- Во вновь созданном модуле вставьте следующий код (в правая часть экрана):
Private Declare Function CoRegisterMessageFilter Lib "ole32" (ByVal IFilterIn As Long, ByRef PreviousFilter) As LongPublic Sub KillMessageFilter () Dim IMsgFilter As Long CoRegisterMessageFilter 0 &, IMsgFilter SubsgFilter IMsgFilter As Long CoRegisterMessageFilter IMsgFilter, IMsgFilterE nd Sub
Обновление: Другие пользователи сообщили, что им удалось предотвратить появление сообщения об ошибке с помощью следующего кода VBA:
Sub CreateXYZ () Dim wdApp As Object Dim wd As Object On Error Возобновить Далее Установить wdApp = GetObject (, "Word.Application") Если Err.Number 0 Затем Установить wdApp = CreateObject ("Word.Application") Конец Если при ошибке GoTo 0 Установите wd = wdApp.Documents.Open (ThisWorkbook.Path & Application.PathSeparator & "XYZ template.docm") wdApp.Visible = True Range ("A1: B10"). CopyPicture xlScreen wd.Range.PasteEnd Sub
- Нажмите Ctrl + S и нажмите Нет , когда увидите « Следующие функции не могут быть сохранены в книге без макросов » предупреждение.
- Затем выберите подходящее место для измененной книги задайте собственное имя и убедитесь, что для параметра Тип файла установлено значение Книга Excel с поддержкой макросов . Когда все будет в порядке, нажмите Сохранить , чтобы создать книгу Excel с поддержкой макросов .
- Нажмите Alt + Q , чтобы закрыть редактор и вернуться к своей книге.. Вернувшись в редактор, нажмите Alt + F8 , выберите только что созданный макрос и нажмите Выполнить .
После завершения этой процедуры вы больше не должны видеть ошибку «Microsoft Excel ожидает, пока другое приложение завершит действие OLE» с этой книгой (даже если она может по-прежнему появляться в фоновом режиме).
Метод 5. Отключить режим совместимости (если применимо)
Некоторым пользователям удалось устраните проблему после обнаружения того, что исполняемый файл Excel работает в режиме совместимости . Это может произойти из-за ручного вмешательства пользователя или из-за стороннего приложения.
Если вы подозреваете, что Excel работает в режиме совместимости, отключите его и посмотрите, ожидает ли ‘Microsoft Excel для другого приложения, чтобы завершить действие OLE ‘ перестает появляться ошибка. Обычно сообщение об ошибке возникает, если исполняемый файл Excel настроен для работы в режиме совместимости с Windows Vista и более ранними версиями.
Вот краткое руководство по отключению режима совместимости:
- Щелкните правой кнопкой мыши исполняемый файл Excel (или ярлык) и выберите Свойства .
- В окне Свойства перейдите на вкладку Совместимость и снимите флажок, связанный с Запустите эту программу в режиме совместимости .
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
В одной из статей, посвященных работе с Excel в Delphi читатель с ником Kanti задал весьма не тривиальную задачку — как добраться до диаграммы Excel, внедренной в документ Word и работать с ней. За что Kanti большое человеческое спасибо — приятно, когда читатели интересуются жизнью блога и предлагают новые темы и идеи.
На первый взгляд задача довольно не простая. Однако решение для неё есть. Я пошел немного дальше в решении проблемы и сегодня расскажу вам:
- как работать с объектом Excel, внедренном в документ Word
- как работать с документом Word, внедренным в Excel.
План статьи:
- Азы работы с MS Word в Delphi
- Как работать с объектом Excel, внедренном в документ Word
- Как работать с документом Word, внедренным в Excel
Прежде, чем начать изложение основного материала, следует упомянуть некоторые моменты работы с Word, т.к. в блоге я их не касался, но эти основы пригодятся для освоения основного материала статьи.
1. Азы работы с MS Word в Delphi
Запуск MS Word в принципе ни чем не отличается от запуска MS Excel за одним небольшим исключением — меняется параметр функции CreateOLEObject:
MyWord:=CreateOleObject('Word.Application');
Но, чтобы не повторяться дважды я расскажу ещё один дополнительный момент, который Вам пригодиться для дальнейшей работы: как подключиться к уже выполняющемуся приложению MS Office, чтобы не создавать лишних копий процессов.
Для того, чтобы подключиться к уже запущенному приложению достаточно использовать функцию GetActiveOleObject, единственным параметром которой является имя класса. Например, чтобы подключиться к запущенному приложению MS Word необходмо выполнить:
MyExcel:=GetActiveOleObject('Word.Application')
Соответственно, чтобы не гадать запущена или не запущена та или иная программа пакета MS Office достаточно воспользоваться связкой двух функций:
try MyWord:=GetActiveOleObject('WordApplication'); except MyWord:=CreateOleObject('Word.Application'); end;
Для того, чтобы открыть уже имеющийся документ Word необходимо воспользоваться методом Open объекта Documents, например так:
MyWord.Documents.Open('myword.doc');
После того как документ открыт, Вы можете его редактировать, изменять текст, параметры страницы и т.д., но сегодня нам это не важно. Главное сегодня — научиться работать с объектами. И с этого момента начинается решение первой задачи.
2. Как работать с объектом Excel, внедренном в документ Word
Каждый документ Word имеет коллекцию Shapes, которая позволяет добавлять в документ объекты, созданные и отображаемые с помощью программ-серверов OLE (OLE-серверов). OLE-объекты в документах Word могут отображаться также, как они отображаются в приложениях, предназначенных для их создания и редактирования. Все наверно пользовались редактором формул Math Type? Вот вам простой OLE-сервер. Добавляете OLE-объект формулы в документ — открывается окно Math Type где вы вводите то, что хотите увидеть и потом формула отображается в документе Word.
Другое дело, когда Вы пробуете вставить в документ Word, например файл mp3. В этом случае объект будет отображен в документе в виде ярлыка, но, тем не менее будет внесен в коллекцию Shapes и до него можно будет добраться из Delphi.
Теперь попробуем посмотреть как выглядит добавление OLE-объектов. В простейшем случае Вы открываете Word, создаете документ и выбираете «Правка — Вставить — Объект» и перед Вами открывается окно с перечнем всех OLE-объектов, которые Вы можете использовать в документе. Выбираете объект, вставляете в документ — работаете. Обратите внимание на рисунок — в окне на рисунке как раз отображены всевозможные объекты нашего с Вами исследования.
Для того, чтобы вставить OLE-объект в документ Word из Delphi необходимо воспользоваться методом AddOleObject коллекции Shapes, который имеет следующий вид:
Shapes.AddOleObject(ClassType, FileName, LinkToFile, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Range)
ClassType — имя, используемое для включения указанного объекта OLE. Например, чтобы вставить в документ Word диаграмму Excel следует использовать
для добавления листа Excel, соответственно:
и так далее. В принципе ничего сложного нет — вставить можно, что угодно, хоть exe-файл
FileName — имя файла, из которого должен быть создан объект. Если этот аргумент опущен, то используется текущая папка. Вы должны указать либо ClassType либо FileName, но никак не одновременно оба параметра.
LinkToFile — True для того, чтобы связать OLE-объект с файлом, из которого он был создан. False, чтобы сделать объект OLE-объект независимым от копии файла, т.е. включить объект в документ Word. Если Вы определили значение для ClassType, аргумент LinkToFile должны быть ложными. Значение по умолчанию False.
DisplayAsIcon — True для отображения объекта OLE в виде значка. Значение по умолчанию False.
IconFileName — Файл, который содержит значок для отображения объекта OLE.
IconIndex -индекс иконки отображения из IconFileName. Значение по умолчанию — ноль.
IconLabel — подпись к иконке объекта.
Range — диапазон, где объект OLE будет размещен в тексте. Объект OLE заменяет выбранный диапазон. Если этот аргумент опущен, объект вставляется автоматически (в текущую позицию курсора в документе).
Давайте теперь продемонстрируем использование этого метода на практике и, заодно, приготовим плацдарм для дальнейшей работы. Рассмотрим как можно вставить чистый лист Excel в документ Word. Причем вставим лист в нужные нам координаты и зададим ему (листу) длину и ширину:
var MyWord: OLEVariant; begin MyWord:=CreateOleObject('Word.Application'); MyWord.Visible:=true; MyWord.Documents.Open(doc); MyWord.ActiveDocument.Shapes.AddOLEObject(ClassType:='Excel.Sheet',Left:=10, Top:=10, Width:=400, Height:=300); end;
Как видите, вместо того, чтобы указать объект Range мы просто расписали его параметры Left, Top, Width и Height. После выполнения этих операций в документе doc аккурат в верху страницы вставиться лист Excel.
Теперь, когда лист вставлен, можно приступать к дальнейшему изучению «глубин» OLE-серверов Microsoft.
Создадим новую переменную, в которой будем хранить ссылку на OLE-объект.
и сразу получим ссылку на наш лист Excel в Word’е:
MyOLE:=MyWord.ActiveDocument.Shapes.Item(1);
Так будет проще разбираться и избавит нас от лишней писанины.
Представим себе, что мы ничего абсолютно не знаем про то, что лежит в MyOLE. Знаем только то, что это элемент из коллекции Shapes и все. Как определить, что мы получили ссылку именно на объект Excel, а не на автофигуру или, ещё хуже, не на файл mp3?
Для того, чтобы получить всю необходимую информацию об OLE-объекте достаточно обратиться к объекту MS Word под названием OLEFormat.
OLEFormat имеет следующие свойства:
Свойство | Описание |
---|---|
Application | Возвращает имя приложения к которому относится объект. В нашем случае вернет «Microsoft Word» |
ClassType | Возвращает или устанавливает тип класса для указанного объекта OLE, фотографии или поля. |
Creator | Возвращает 32-битное целое число, которое указывает на приложение в котором был создан объект. |
DisplayAsIcon | True, если указанный объект отображается в виде значка. Свойство для чтения/записи |
IconIndex | Возвращает или устанавливает индекс иконки, используемой если DisplayAsIcon True. |
IconLabel | Возвращает или устанавливает подпись к иконке OLE-объекта. |
IconName | Возвращает или устанавливает файл программы, в которой хранится икона для объекта OLE. |
IconPath | Возвращает путь к файлу, в котором хранится иконка для объекта OLE |
Label | Возвращает строку, которая используется, чтобы определить часть исходного файла для связывания объектов |
Object | Возвращает объект, который представляет собой объект верхнего уровня интерфейса указанного объекта OLE |
Parent | Возвращает объект, который представляет собой родительский объект указанного объекта OLEFormat |
ProgID | Возвращает программный идентификатор (ProgID) для указанного объекта OLE. |
Теперь, используя эти свойства, попробуем получить всю необходимую нам информацию об OLE-объекте.
Вызовем последовательно свойства ClassType и ProgID:
ShowMessage(MyOle.OLEFormat.ClassType); ShowMessage(MyOle.OLEFormat.ProgID);
В моем случае, результатом выполнения операций были две одинаковых строки «Excel.Sheet.12» Так как у меня установлен Office 2007 то версия 12, что и отразилось в сообщениях. У Вас это могут быть 10, 11 или как у меня 12 версии. С помощью номера версии можно будет определять — возможно ли в принципе изменять такие объекты на машине пользователя или нет.
Идем дальше. Итак, мы определили, что объект представляет собой лист Excel. Как получить доступ к Excel? И причем сделать это так, чтобы можно было наш OLE-объект изменить?
Обратимся к свойству Object. Согласно описанию, свойство должно вернуть нам ссылку на объект верхнего уровня. Следовательно, применительно к нашей ситуации — это будет ссылка на объект Excel. Чтобы убедиться в сказанном, сделаем так:
ShowMessage(MyOle.OLEFormat.Object.Application.Name);
то есть получим имя приложения в котором был создан объект. В результате получим сообщение в виде строки «Microsoft Excel«.
Ну, а теперь развязка вопроса — используя ссылку на Excel попробуем написать что-нибудь на листе, например, избитую фразу «Hello World!»:
MyOle.OLEFormat.Object.Application.ActiveSheet.Range['A1'].Value:='Hello World!';
Можете проверить — в ячейку А1 запишется строка. Здесь следует обратить внимание на то, что при записи в Excel мы не использовали свойства ActiveWorkBook, которое обычно предшествует свойству ActiveSheet. Все дело в том, что среди объектов OLE Office нет такого OLE-объекта — вставляется только лист либо диаграмма. По сути диаграмма — это два листа Sheet где на одном находится сам график, а на втором — данные к нему.
Вот таким простым и достаточно понятным способом можно добавлять, изменять и удалять OLE-объекты. Кстати, на досуге можете потренироваться вставлять, активировать, редактировать сразу несколько различных OLE-объектов — принцип работы тот же. Получаете Object и используете его функции.
3. Как работать с документом Word, внедренным в Excel.
Надо сказать, что разработчики в Microsoft весьма неплохо потрудились, чтобы запутать бедных разработчиков :). В начале все просто — как в Word. Есть Shapes у которого в свою очередь есть метод AddOLEObject, с практически теме же параметрами.
Далее, по логике вещей, у Shapes должно быть свойство-объект OLEFormat. Проверяем — действительно есть, но…свойства другие, точнее одно из свойств другое, а большинства вообще нет. Но, мы люди не гордые — будем управляться с тем, что есть:
Свойство | Описание |
---|---|
Application | При использовании без классификатора объектов, это свойство возвращает объект приложения, представляющий приложение Microsoft Excel. При использовании с объектом Qualifier, это свойство возвращает объект приложения, которое использовалось для создания объекта |
Object | Возвращает OLE Automation объект ассоциированный с OLE объектом |
Parent | Возвращает объект, который представляет собой родительский объект указанного объекта OLEFormat |
progID | Возвращает программный идентификатор (ProgID) для указанного объекта OLE. |
Как видите свойств не много. Главное, что осталось свойство Object — вот его мы и попробуем использовать в своих корыстных целях.
За что следует, наверное, сказать спасибо разработчикам Excel, так это за то, что они предусмотрели сразу объект OLEObjects предоставляющий нам в распоряжение все OLE-объекты листа. Используя этот объект мы минуем использование Shapes. Например так:
MyExcel.ActiveWorkBook.ActiveWorkSheet.OLEObjects.Count
Мы получаем число OLE-объектов документа.
MyExcel.ActiveWorkBook.ActiveWorkSheet.OLEObjects(1)
соответственно даст доступ к первому из OLE-объектов документа, а уж с ним-то нам и предстоит работать. Итак, рассмотрим следующую задачку: необходимо вставить в документ Excel пустой документ Word и написать в нем любую строку.
Чтобы не повторяться в применениях метода — вставим в Excel уже готовый документ Word из файла:
... MyExcel.ActiveWorkBook.ActiveSheet.OLEObjects.Add(FileName:=doc, Left:=10, Top:=10, Width:=300, Height:=300); MyOLE:=MyExcel.ActiveWorkBook.ActiveSheet.OLEObjects.item(1); MyOLE.Activate; ShowMessage(MyOle.ProgID); //убедимся, что объект относится к Word ShowMessage(MyOle.Object.Application.Name); //запросим имя приложения MyOle.Object.Application.ActiveDocument.Range.InsertAfter('Привет'); ....
Обратите внимание, в данном случае мы использовали для работы с OLE-объектом не Shapes, а OLEObjects. Попробуйте воспроизвести те же самые действия как в случае работы с Excel из Word, т.е. воспользоваться свойством Object у объекта ObjectFormat. Думаю Вы будите «приятно» удивлены, т.к. в результате запроса имени приложения Вам вернется не Word как ожидалось, а Excel — следовательно работать с OLE-объектом становится невозможно.
Также следует отметить, что прежде, чем приступать к редактированию OLE-объекта, следует его предварительно активировать.
Вот так можно работать с Excel из Word и с Word из Excel и при этом не выходить из Delphi :). Ну, а для чего это использовать — решать Вам. Я только показал Вам возможности работы в Delphi с программами Word и Excel.
Книжная полка
Название:Разработка приложений Microsoft Office 2007 в Delphi Описание Описаны общие подходы к программированию приложений MS Office. Даны программные методы реализации функций MS Excel, MS Word, MS Access и MS Outlook в среде Delphi. |
0
0
голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.