Show All
Create a link using Dynamic Data Exchange (DDE)
Security Dynamic data exchange (DDE) is an older technology that is not secure. If possible, use a more secure alternative to DDE, such as object linking and embedding (OLE).
The program that contains the data you want to link to must support Dynamic Data Exchange (DDE). To determine whether your program supports DDE or to learn the DDE name and topic information for the program, contact the software vendor of the program. For more information about DDE, see the Microsoft Office 2003 Resource Kit.
How to obtain the Office 2003 Resource Kit
The Office 2003 Resource Kit is the definitive guide to installing, configuring, and supporting Microsoft Office in your organization. Designed for system administrators, consultants, and power users, this guide offers complete coverage whether you’re running Microsoft Office on Windows or the Macintosh.
You can obtain the Office 2003 Resource Kit wherever computer books are sold, or order direct from Microsoft Press, or online at the Office 2003 Resource Kit Web site.
To locate your nearest source for Microsoft Press products worldwide, visit the Microsoft Press Web site.
- Select the cell you want to link from.
- Enter a formula using the following syntax: application name; document name or topic; and cell range, value, field, or data that’s referred to.
The following example shows the parts of a remote reference formula and the required separator characters:
A pipe character (|) separates the program name from the document or topic name. An exclamation point (!) separates the document or topic name from the cell range, value, field, or data referred to.
- Press ENTER.
Note If the name of the application, document, topic, or data item contains spaces or characters such as colons (:) or minus signs (–) that have special uses in a formula, or if a name resembles a cell reference, enclose the name in single quotation marks.
Содержание
- Причины возникновения ошибки
- Решение проблемы
- Способ 1: отключение игнорирования DDE
- Способ 2: отключение режима совместимости
- Способ 3: Очистка реестра
- Способ 4: отключение аппаратного ускорения
- Способ 5: отключение надстроек
- Способ 6: сброс сопоставлений файлов
- Способ 7: загрузка обновлений Windows и переустановка пакета Microsoft Office
- Вопросы и ответы
Несмотря на то, что, в целом, программа Microsoft Excel отличается довольно высоким уровнем стабильности работы, с этим приложением тоже иногда случаются проблемы. Одной из таких проблем является появление сообщения «Ошибка при направлении команды приложению». Оно возникает при попытке сохранить или открыть файл, а так же провести с ним некоторые другие действия. Давайте разберемся, чем вызвана данная проблема, и как её можно устранить.
Причины возникновения ошибки
Какие же основные причины вызывают данную ошибку? Можно выделить следующие:
- Повреждение надстройки;
- Попытка получить доступ к данным активного приложения;
- Ошибки в системном реестре;
- Повреждение программы Excel.
Решение проблемы
Пути устранения данной ошибки зависят от её причины. Но, так как в большинстве случаев, установить причину труднее, чем её ликвидировать, то более рациональным решением является методом проб попытаться найти верный способ действий из тех вариантов, которые представлены ниже.
Способ 1: отключение игнорирования DDE
Чаще всего, устранить ошибку при направлении команды удается путем отключения игнорирования DDE.
- Переходим во вкладку «Файл».
- Кликаем по пункту «Параметры».
- В открывшемся окне параметров, переходим в подраздел «Дополнительно».
- Ищем блок настроек «Общие». Снимаем галочку около параметра «Игнорировать DDE-запросы от других приложений». Жмем на кнопку «OK».
После этого, в значительном числе случаев, проблема устраняется.
Способ 2: отключение режима совместимости
Ещё одной вероятной причиной, описанной выше проблемы, может быть включенный режим совместимости. Для того, чтобы отключить его, нужно последовательно проделать указанные ниже шаги.
- Переходим, с помощью проводника Windows, или любого файлового менеджера, в каталог размещения пакета программ Microsoft Office на компьютере. Путь к нему выглядит следующим образом:
C:Program FilesMicrosoft OfficeOFFICE№
. № — это номер офисного пакета. Например, папка, где хранятся программы Microsoft Office 2007, будет называться OFFICE12, Microsoft Office 2010 — OFFICE14, Microsoft Office 2013 — OFFICE15, и т.д. - В папке OFFICE ищем файл Excel.exe. Кликаем по нему правой кнопкой мыши, и в появившемся контекстном меню выбираем пункт «Свойства».
- В открывшемся окне свойств Excel, переходим во вкладку «Совместимость».
- Если стоят флажки напротив пункта «Запустить программу в режиме совместимости», или «Выполнять эту программу от имени администратора», то снимаем их. Жмем на кнопку «OK».
Если галочки в соответствующих пунктах не установлены, то продолжаем искать источник проблемы в другом месте.
Способ 3: Очистка реестра
Одной из причин, которая может вызвать ошибку при направлении команды приложению в Excel, являются неполадки в реестре. Поэтому, нам его необходимо будет почистить. Перед тем, как приступать к дальнейшим действиям, для того чтобы подстраховать себя от возможных нежелательных последствий данной процедуры, настойчиво рекомендуем создать точку восстановления системы.
- Для того, чтобы вызвать окно «Выполнить», на клавиатуре вводим комбинацию клавиш Win+R. В открывшееся окно, вводим команду «RegEdit» без кавычек. Жмем на кнопку «OK».
- Открывается Редактор реестра. В левой части редактора расположено древо каталогов. Перемещаемся в каталог «CurrentVersion» по следующему пути:
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion
. - Удаляем все папки, расположенные в директории «CurrentVersion». Для этого, кликаем по каждой папке правой кнопкой мыши, и в контекстном меню выбираем пункт «Удалить».
- После того, как удаление выполнено, перезагружаем компьютер и проверяем работоспособность программы Excel.
Способ 4: отключение аппаратного ускорения
Временным решением проблемы может стать отключение аппаратного ускорения в Excel.
- Переходим в уже знакомый нам по первому способу решения проблемы раздел «Параметры» во вкладке «Файл». Опять кликаем по пункту «Дополнительно».
- В открывшемся окне дополнительных параметров Excel, ищем блок настроек «Экран». Устанавливаем галочку около параметра «Отключить аппаратное ускорение обработки изображений». Кликаем по кнопке «OK».
Способ 5: отключение надстроек
Как уже говорилось выше, одной из причин данной проблемы может быть неисправность какой-то надстройки. Поэтому, как временную меру, можно использовать отключение надстроек Excel.
- Опять переходим, находясь во вкладке «Файл», в раздел «Параметры», но на этот раз кликаем по пункту «Надстройки».
- В самой нижней части окна, в выпадающем списке «Управление», выбираем пункт «Надстройки COM». Жмем на кнопку «Перейти».
- Снимаем галочки со всех надстроек, которые указаны в списке. Жмем на кнопку «OK».
- Если после этого, проблема исчезла, то опять возвращаемся в окно надстроек COM. Устанавливаем галочку, и жмем на кнопку «OK». Проверяем, не вернулась ли проблема. Если все в порядке, то переходим к следующей надстройке, и т.д. Ту надстройку, на которой ошибка вернулась, отключаем, и больше не включаем. Все остальные надстройки можно включить.
Если же после выключения всех надстроек проблема осталась, то это означает, что надстройки можно включить, а ошибку следует устранить другим способом.
Способ 6: сброс сопоставлений файлов
Для решения проблемы можно также попытаться сбросить сопоставления файлов.
- Через кнопку «Пуск» переходим в «Панель управления».
- В Панели управления выбираем раздел «Программы».
- В открывшемся окне, переходим в подраздел «Программы по умолчанию».
- В окне настроек программ по умолчанию выбираем пункт «Сопоставление типов файлов и протоколов конкретных программ».
- В списке файлов выбираем расширение xlsx. Жмем на кнопку «Изменить программу».
- В открывшемся списке рекомендуемых программ, выбираем Microsoft Excel. Делаем клик по кнопке «OK».
- В случае, если программы Excel нет в списке рекомендуемых программ, жмем на кнопку «Обзор…». Переходим по тому пути, о котором мы говорили, обсуждая способ решения проблемы отключением совместимости, и выбираем файл excel.exe.
- Аналогичные действия проделываем и для расширения xls.
Способ 7: загрузка обновлений Windows и переустановка пакета Microsoft Office
Не в последнюю очередь виной появления данной ошибки в Excel может быть отсутствие важных обновлений Windows. Нужно проверить, все ли доступные обновления загружены, и в случае необходимости закачать недостающие.
- Опять открываем Панель управления. Переходим в раздел «Система и безопасность».
- Кликаем по пункту «Центр обновления Windows».
- В случае, если в открывшемся окне присутствует сообщение о наличии обновлений, жмем на кнопку «Установить обновления».
- Ждем, пока обновления будут установлены, и перезагружаем компьютер.
Если ни один из перечисленных методов не помог решить проблему, то возможно есть смысл задуматься о переустановке пакета программ Microsoft Office, а то и о переустановке операционной системы Windows в целом.
Как видим, довольно много возможных вариантов по устранению ошибки при направлении команды в программе Excel. Но, как правило, в каждом конкретном случае существует только одно верное решение. Поэтому, для того, чтобы ликвидировать эту проблему, придется методом проб использовать различные способы устранения ошибки, пока не будет найден единственно верный вариант.
Степан
Этот вопрос задаёт человек, который написал с десяток книг.
Михаил Фленов
Если я написал книгу по Delphi или C#, это не значит, что я знаю Excel. Это может значить только то, что я знаю хорошо Word и умею в нем печатать
Коля
Версия 2010 — нормально открывается в разных окнах
Rejackt
Михаил — если вы имеете ввиду один и тотже документ в разных окнах (ну типа разные части чтобы одновременно видеть) — то там подвох в 2003-м — офис требует чтобы файлы по разному открываемые назывались — т.е можно копию сделать с другим названием — и юзать в двух окнах… сам пробовал — вроде норм.. ))
Михаил Фленов
Версия 2010 — нормально открывается в разных окнах
Начиная с 2007-го команда Microsoft Office поняли, что они сморозили тупость.
Михаил Фленов
Михаил — если вы имеете ввиду один и тотже документ в разных окнах
Разные документы в разных окнах. Сейчас office открывает два документа внутри одного окна в стиле MDI. Я хочу запустить две совершенно независимые копии Excel.
Степан
Ставь виртуальную машину, если нет варианта поставить нормальный офис.
Rejackt
Я кстати до сих пор тоже 2003-м пользуюс… както 2007/2010-й не пошёл….
script
Михаил, там есть меню окно в нём надо выбрать новое окно, точно не опишу но примерно так ещё есть способ мышью но это тяжело описать!
Михаил Фленов
Window -> New window
Эта функция открывает еще одно окно для текущего документа внутри того же главного окна. Получается примерно следующее:
— Главное окно
— Документ: окно 1
— Документ: окно 2
Проблема в том, что оба документа внутри одного и того же главного окна. А мне нужно сделать так, чтобы было два главных окна и я их расположил на разных мониторах.
— Главное окно 1
— Документ: окно 1
— Главное окно 2
— Документ: окно 2
Тогда одно окно будет на одном мониторе, а другое на другом.
Михаил Фленов
У меня складывается ощущение, что моя задача все же невозможна. Если так, то я понимаю, почему Mocrosoft не открывает офис программистов в Москве. Таким людям запрещено там парады проводить.
Михаил Фленов
Последний мой комментарий конечно же шутка. Я просто сегодня действительно задолбался переключаться между окнами. На самом деле я все так же продолжаю считать эту компанию великой и их офис самым офигенным, по крайней мере 2007 и 2010, которые я использую дома. И я все так же уважаю Microsoft, не смотря на то, что им запрещено проводить парады в Москве.
BOBA
Я сам не жалую MS Office, но по службе приходиться:
Сервис->Свойства папки->Типы файлов->XLS.
Действии по умолчанию "Открыть".
"Приложение, исполняющее действие:".
"C:Program FilesMicrosoft OfficeOffice12EXCEL.EXE" "%e" ("%1").
Думаю у них был косяк с DDE, издержки обратной совместимости. Не случайно служба сетевого DDE по умолчанию выключина.
Михаил Фленов
Так не получилось, зато получилось следующим образом:
1. Запустить первую компию Excel.
2. Отключить DDE
3. Запустить Excel еще раз. Тут ему срывает башню и он открывает отдельное окно с ошибкой, но отдельное.
4. Возвращаем DDE и открываем файл в созданном окне.
Сейчас времени нет играть с параметрами, нужно отчетность ремонтировать. Чуть попозже поиграю. По крайней мере у меня теперь есть два окна.
BOBA
"%e" заменить на "%1"
По памяти, может где ошибся|пропустил (давно не практиковал). Но, вектор точно этот.
h.lya.kh.ovich
Степан, так это ты вечно ко мне подходишь и говоришь: "Почини микроволновку, ты же программист". Я искал тебя все эти годы.
darth_at
я на работе использую Ексель 2003, там нет никаких проблем… Открываю один документ экселя, переношу его на другой монитор, а потом запускаю сам эксель кликом по его значку. И он открывает второй экземпляр программы.
Rejackt
Я вот прикинул — у меня Office 2003 c SP3 — может поэтому два окна нормально ОТДЕЛЬНЫХ открываются.. Михаил — попробуйте установить сервис пак — может поможет..))
Всё таки проще будя — чем постоянно с DDE бороться…
Михаил Фленов
Это не SP, это настройки. Я просто не знаю Excel и впадлу лазить в настройках. Думал, может кто здесь быстро подскажет.
Михаил Фленов
Победил. DDE можно оставлять в покое, просто нужно удалить в текстовом поле DDE Message: [open("%1")]. Это поле должно быть пустым. Блин, кто бы знал. MDI — это вообще такая глупость, ненавижу. Хорошо, что в 2007-м ее убрали.
Степан
h.lya.kh.ovich, сравнил хер с пальцем.
Андрей из Астрахани
Безо всякиз dde просто два раза запустил Excel из меню Пуск, и оба раза он запускался с пустым новым документом. И из меню Файл открывал те документы которые нужны в той копии в которой нужны. ОС W7 64bit, Office2010Std64bit установлен дефолтно.
Ustas
Этот вопрос задаёт человек, который написал с десяток книг.
Ну и бред вы сморозили, товарищ.
Степан
Михаил, раз ты публикуешь такие откровенные провокации уже дважды, то значит ты тоже это поддерживаешь. Поэтому отвечу.
Ustas, человек, который пишет много книг, уже подразумевает под собой наличие обширного багажа знаний и опыта в этой сфере. Если мне, как к врачу, придёт пациент и будет жаловаться на болячку никак не связанной с моей специальностью и я не дам ему ответ на его вопрос, то будет считаться, что я ступил, а не пациент. Тем более если я не просто врач, а ещё и автор множества книг по разным темам в медицине! Тебе не очевидна моя ирония? Раз у нас с вами такие разные взгляды и вы так агрессивно относитесь к чужому мнению, то удачи, я сюда больше не зайду. Считайте дальше себя умными.
Степан
Ustas, для меня это тоже самое, если бы я спросил у посетителей своего же медицинского блога, если бы я его вёл, как вылечить болезнь, которая не относится к моей специальности. Знаешь что они ответят? Откуда нам знать, ты же здесь врач, ты написал с десяток книг по медицине и нас ещё спрашиваешь простых людей. Так и тут.
Ustas, может ты тут такой великий компьютерщик, что мой вопрос показался тебе "бред сморозил". Знаешь, что иди в жопу, я бы тебе с удовольствием бы набил морду, козёл.
Михаил Фленов
Когда я не публикую, меня начинают обвинять, что я не пропускаю комментарии и тоже начинают говорить, что перестанут ходить на блог. Я бы на твоем месте просто проигнорировал комментарии, которые не нравятся. Мне регулярно приходится игнорировать. Не принимай ничего близко.
Самое страшное, что буквы на мониторе не передают эмоции, с которыми писался комментарий. Я абсолютно без обид написал свой. Реально, ну не знаю я Excel и пользуюсь им очень и очень редко. Я и Word в принципе знаю не так хорошо. Знаю только то, чем пользуюсь. Я просто не в состоянии знать все.
Михаил Фленов
Кстати твой комментарий тоже подтвердил, хотя в нем тоже есть провокация. Просто считаю, что ты имеешь право ответить мне и сказать свое мнение.
Но просьба ко всем, не продолжать разговор.
Татьяна
Сервис-Параметры-Вид- галочку на "Окна на панели задач" и вуаля!!! Но закрывает всё равно оба окна сразу…
Вадим
Какие "Вуаля"? )) Все бестолку, а косяк капитальный с этим одним окном в экселе. Крайне неудобно.
Ezhik
Открыть необходимый файл Exel. Затем нажать клавишу Shift и на панели задач нажать левой кнопкой мыши по значку Exel, тем самым откроется 2-я копия программы, а в ней открыть другой интересующий файл.
Нашел где-то. Мне помогло.
Петя
Здесь был Петя
Виктор
Действуем так: 1. открываем первый файл Excel 2003 по щелчку в файловом менеджере в , перетаскиваем окно программы на второй монитор, 2. Пуск, Microsoft Office, Excel 2003 — запускаем пустой Excel 2003, перетаскиваем окно программы на второй монитор, 3. щёлкаем другой файл в файловом менеджере — он открывается в этом новом окне. 4. Повторяя пункты 2 и 3, можно открыть сколько угодно файлов Excel 2003 — каждый в своём окне. Удачи
Ошибка Excel: ошибка при направлении команды приложению. Как оказалось, причиной являются DDE запросы. Когда мы нажимаем два раза на рабочую книгу Excel, то запрос динамического обмена данными (DDE) отправляется в Excel, давая команду открыть эту рабочую книгу. И если запрещен обмен запросами DDE, то программа будет отвергать их, и не запустит рабочую книгу путем двойного клика.
Для MS Excel 2007
1. Запустите Excel, через Пуск — все программы — Microsoft Office 2007 — Microsoft Office Excel 2007
2. Нажмите кнопку «Office» (Круглая кнопка слева вверху), затем кнопку «параметры Excel» (внизу списка, справа). В открывшемся окне настроек выбираем пункт «Дополнительно» и справа ищем раздел «Общие» (почти в самом низу).
3. Убираем галочку с параметра «Игнорировать DDE-запросы от других приложений.» Нажимаем «Ок.»
Для MS Excel 2010
1. Откройте вкладку «Файл» и выберите пункт «Параметры.»
2. Выберите пункт «Дополнительно» и в разделе «Общие» снимите флажок с параметра «Игнорировать DDE-запросы от других приложений.»
3. Нажмите кнопку «Ок.»
Для MS Excel 2003 и более ранние версии Excel
1. В меню «Сервис» выберите пункт «Параметры.»
2. Откройте вкладку «Общие.»
3. Снимите флажок с параметра «Игнорировать DDE-запросы от других приложений» и нажмите кнопку «Ок.»
Как оказалось, причиной являются DDE запросы. Когда мы нажимаем два раза на рабочую книгу Excel, то запрос динамического обмена данными (DDE) отправляется в Excel, давая команду открыть эту рабочую книгу. И если запрещен обмен запросами DDE, то программа будет отвергать их, и не запустит рабочую книгу путем двойного клика.
При открытии файлов двойным нажатием из проводника, Excel 2007 начал выдавать ошибку «ошибка при направлении команды приложению». Если попытаться открыть через Total Commander, то вылетает ошибка «Программа не запускается».
Еще по теме:
1. Тема: Выгрузка с форматированием: задать диапазон выгружаемых данных
2. Тема: Пример записи / чтения с Microsoft Excel в VB
Способы передачи данных с Visual Basic в Excel
Источник: MSDN
В данной статье рассматриваются способы передачи данных в Microsoft Excel из приложения Microsoft Visual Basic. В статье также представлены преимущества и недостатки каждого из способов, что позволяет пользователю выбрать наиболее подходящий способ для конкретной ситуации.
Дополнительная информация
Чаще всего для передачи данных в книгу Excel используется программирование объектов (автоматизация). Этот способ обладает наибольшим спектром возможностей для указания местоположения данных в книге Excel, а также обеспечивает возможность форматирования книги и настройки различных параметров во время выполнения. Программирование объектов позволяет использовать для передачи данных несколько подходов:
- Передача данных по одной ячейке
- Передача массива данных в диапазон ячеек
- Передача набора записей ADO в диапазон ячеек с помощью способа CopyFromRecordset
- Создание в листе Excel объекта QueryTable, содержащего результаты запроса по источнику данных ODBC или OLEDB
- Передача данных в буфер обмена с последующей вставкой содержимого буфера обмена в лист Excel
Также существуют способы передачи данных в Excel, не требующие программирования объектов. При работе с серверным приложением рекомендуется освободить клиентов от большого объема обрабатываемых данных. Ниже приведены способы передачи данных, не использующие программирование объектов.
- Передача данных в текстовый файл, использующий запятые или знаки табуляции в качестве разделителей, который Excel впоследствии может разобрать на ячейки листа
- Передача данных на лист Excel с помощью ADO
- Передача данных в Excel с помощью динамического обмена данными (DDE)
В следующих разделах приведены дополнительные сведения о каждом решении.
Примечание. При использовании Microsoft Office Excel 2007 для сохранения книги Excel 2007 можно использовать новый формат файла (XSLX). Для этого найдите следующую строку кода в приведенных ниже примерах:
Visual Basic
oBook.SaveAs "C:Book1.xls"
Замените этот код следующей строкой кода:
Visual Basic
oBook.SaveAs "C:Book1.xlsx"
Кроме того, база данных «Борей» не входит в состав Office 2007 по умолчанию. Тем не менее базу данных «Борей» можно загрузить с веб-узла русской версии Microsoft Office Online.
Перенос данных по одной ячейке с помощью автоматизации
Автоматизация позволяет передавать данные на лист Excel по одной ячейке:
Visual Basic | ||
|
Передача данных по одной ячейке является оптимальным способом передачи небольших объемов данных. Этот способ позволяет помещать данные в любом месте рабочей книги и форматировать ячейки во время выполнения. Однако этот способ не рекомендуется применять при передаче больших объемов данных в книгу Excel. Каждый объект Range, получаемый во время выполнения, вызывает запрос к интерфейсу, поэтому такой способ передачи данных может оказаться очень медленным. Кроме того, в Microsoft Windows 95 и Windows 98 существует ограничение на запросы к интерфейсу, составляющее 64 КБ. При превышении лимита в 64 КБ сервер автоматизации (Excel) может перестать отвечать на запросы или может отображаться сообщение о нехватке памяти. Это ограничение для Windows 95 и Windows 98 рассматривается в следующей статье базы знаний Майкрософт:
216400 Автоматизация COM может привести к зависанию клиентского приложения в Win 95/98 (Эта ссылка может указывать на содержимое полностью или частично на английском языке).
Таким образом, передача данных по одной ячейке допустима только для небольших объемов данных. Для передачи больших объемов данных в Excel следует использовать один из способов, описанных ниже.
Примеры сценариев для автоматизации Excel см. в следующей статье базы знаний Майкрософт:
219151 Использование Visual Basic для автоматизации Microsoft Excel
Передача массива данных в диапазон ячеек листа с помощью программирования объектов
Массив данных можно одновременно передать в диапазон ячеек листа:
Visual Basic | ||
|
Передача большого объема данных с помощью массива происходит значительно быстрее, чем передача данных по одной ячейке. Обратите внимание на строку из приведенного выше сценария, которая одновременно передает данные в 300 ячеек листа:
Visual Basic
oSheet.Range("A2").Resize(100, 3).Value = DataArray
Эта строка представляет всего два запроса к интерфейсу (один для объекта Range, возвращаемого методом Range, и один для объекта Range, возвращаемого методом Resize). При этом при передаче данных по одной ячейке потребовалось бы 300 запросов к интерфейсу для объектов Range. Поэтому по возможности рекомендуется выполнять массовый перенос данных, чтобы сократить число запросов к интерфейсу.
Перенос набора записей ADO в диапазон листа с помощью автоматизации
В Excel 2000 появился метод CopyFromRecordset, позволяющий переносить наборы данных ADO (или DAO) в диапазон ячеек листа. Приведенный ниже сценарий является примером автоматизации Excel 2000, Excel 2002 или Office Excel 2003 для переноса содержимого таблицы Orders образца базы данных «Борей» с помощью метода CopyFromRecordset.
Visual Basic | ||
|
Примечание. При использовании версии базы данных «Борей» для Office 2007 необходимо заменить в примере следующую строку кода:
Visual Basic | ||
|
Замените эту строку кода следующей строкой:
Visual Basic | ||
|
В Excel 97 также имеется метод CopyFromRecordset, однако его можно использовать только для набора записей DAO. CopyFromRecordset в Excel 97 не поддерживает ADO.
Дополнительные сведения об использовании ADO и метода CopyFromRecordset см. в следующей статье базы знаний Майкрософт:
246335 Использование программирования объектов для передачи данных из набора записей в Excel
(Эта ссылка может указывать на содержимое полностью или частично на английском языке)
Создание объекта QueryTable с помощью программирования объектов
Объект QueryTable представляет собой таблицу, содержащую данные, возвращенные из внешнего источника. При автоматизации Microsoft Excel для создания объекта QueryTable следует просто указать строку подключения к источнику данных OLEDB или ODBC в строке SQL. Далее Excel генерирует набор записей и вставляет его в указанное местоположение на листе. Использование объекта QueryTables обладает несколькими преимуществами по сравнению с использованием метода CopyFromRecordset:
- Созданием набора записей и его размещением на листе управляет Excel.
- Запрос можно сохранить в объекте QueryTable таким образом, чтобы в дальнейшем его можно было обновить и получить обновленный набор записей.
- При добавлении нового объекта QueryTable к листу можно переместить данные, уже находящиеся в ячейках листа, чтобы свободно разместить новые данные (см. свойство RefreshStyle).
Ниже приводится пример сценария, позволяющего автоматизировать Excel 2000, Excel 2002 или Office Excel 2003 для создания нового объекта QueryTable на листе Excel с данными из базы Northwind:
Visual Basic | ||
|
Использование буфера обмена
Буфер обмена Windows также может использоваться как механизм передачи данных на лист Excel. Чтобы вставить данные в несколько ячеек листа, можно скопировать строку, в которой столбцы разделены знаками табуляции, а строки – символами возврата каретки. В приведенном ниже сценарии показано, как Visual Basic может использовать буфер обмена для передачи данных в Excel:
Visual Basic | ||
|
Создание текстового файла с разделителями, который Excel может разобрать на строки и столбцы
Excel может открывать файлы с разделителями-запятыми и знаками табуляции и разбирать данные по ячейкам. Этим можно воспользоваться при необходимости передачи большого объема данных в лист Excel с минимальным использованием автоматизации. Этот подход рекомендуется для приложений типа клиент-сервер, поскольку текстовый файл может генерироваться серверным приложением. Затем текстовый файл можно открыть с помощью клиентского приложения, при необходимости используя автоматизацию.
Ниже приведен сценарий, иллюстрирующий создание текстового файла с разделителями-запятыми из набора записей ADO:
Visual Basic | ||
|
Примечание. При использовании версии базы данных «Борей» для Office 2007 необходимо заменить в примере следующую строку кода:
Visual Basic | ||
|
Замените эту строку кода следующей строкой:
Visual Basic | ||
|
Если файл имеет расширение CSV, Excel открывает его без отображения мастера импорта текста и по умолчанию принимает, что в файле используются разделители-запятые. Если же файл имеет расширение TXT, Excel автоматически разбирает его, используя в качестве разделителей знаки табуляции.
В приведенном выше примере запуск Excel осуществлялся с помощью оператора Shell, а имя файла использовалось как аргумент командной строки. А в этом примере автоматизация не использовалась. Однако при желании можно применить минимум автоматизации, чтобы открыть текстовый файл и сохранить его в формате книги Excel:
Visual Basic | ||
|
Дополнительные сведения об операциях ввода-вывода файлов из приложения Visual Basic см. в следующей статье базы знаний Майкрософт:
172267 RECEDIT.VBP демонстрирует ввод-вывод файлов в Visual Basic recedit.rar
(Эта ссылка может указывать на содержимое полностью или частично на английском языке)
Передача данных на лист Excel с помощью ADO
С помощью Microsoft Jet OLE DB Provider можно добавлять записи в таблицу существующей книги Excel. «Таблицей» в Excel считается диапазон с заданным именем. Первая строка диапазона содержит заголовки (или имена полей), а все последующие строки – записи. Ниже приведен пример создания книги с пустой таблицей MyTable.
Excel 97, Excel 2000 и Excel 2003
1. Откройте новую книгу Excel.
2. Добавьте следующие заголовки в ячейки A1:B1 листа Sheet1:
A1: FirstName B1: LastName
3. Выровняйте ячейку B1 по правому краю.
4. Выделите A1:B1.
5. В меню Вставка выберите Имя, а затем Присвоить. Введите имя MyTable и нажмите кнопку OK.
6. Сохраните новую книгу как C:Book1.xls и закройте Excel.
Чтобы добавить записи в таблицу MyTable с помощью ADO, понадобится сценарий приблизительно следующего вида:
Visual Basic | ||
|
Excel 2007
1. В Excel 2007 создайте книгу.
2. Добавьте следующие заголовки в ячейки A1:B1 листа «Лист1»:
A1: FirstName B1: LastName
3. Выровняйте ячейку B1 по правому краю.
4. Выделите диапазон A1:B1.
5. На ленте откройте вкладку Формулы и выберите пункт Определить имя. Введите имя MyTable и нажмите кнопку ОК.
6. Сохраните новую книгу как C:Book1.xlsx и закройте Excel.
Чтобы добавить записи в таблицу MyTable с помощью ADO, используйте код, подобный приведенному ниже.
Visual Basic | ||
|
При подобном добавлении записей в таблицу производится форматирование книги. В приведенном выше примере новые поля, добавляемые в столбец B, выравниваются по правому краю. Каждая запись, добавляемая в строку, форматируется так же, как предыдущая.
Обратите внимание на то, что при добавлении в ячейку или ячейки листа запись заменяет любые данные, находившиеся в этих ячейках ранее; другими словами, строки листа не сдвигаются вниз при добавлении новых записей. Это следует иметь в виду при планировании размещения данных на листе.
Примечание. Обновление данных на листе Excel с помощью ADO или DAO невозможно в среде Visual Basic для приложений в Access после установки пакета обновления 2 (SP2) для Office 2003 или обновления для Access 2002, описанного в статье 904018 базы знаний Майкрософт. Однако этот способ можно использовать в среде Visual Basic для приложений в других приложениях Office, например в Word, Excel и Outlook. Дополнительные сведения см. в следующих статьях базы знаний Майкрософт:
904953 Запрещается вносить изменения, добавлять или удалять данные, источником которых являются книги Excel в Office Access 2003 или в Access 2002
904018 Описание обновления для Access 2002: от 18 октября 2005 г.
Дополнительные сведения об использовании ADO для доступа к книгам Excel см. в следующих статьях базы знаний Майкрософт:
195951 Создание запросов и обновление данных Excel с помощью ADO со страниц ASP
(Эта ссылка может указывать на содержимое полностью или частично на английском языке)
Передача данных в Excel с помощью DDE
Наряду с программированием объектов DDE является способом связи с Excel и передачи данных; однако, в противоположность автоматизации и COM, DDE больше не является часто используемым способом связи с другими приложениями и должен использоваться только при отсутствии других решений.
Для передачи данных в Excel с помощью DDE можно воспользоваться одним из следующих способов:
- LinkPoke для вставки данных в указанный диапазон ячеек
. - LinkExecute для отправки команд, которые будет выполнять Excel.
В приведенном ниже примере показано, как установить связь DDE с Excel таким образом, чтобы модно было поместить данные в ячейки листа и выполнить команды. В этом примере для успешного установления связи DDE с файлом LinkTopic Excel|MyBook.xls книга с именем MyBook.xls уже должна быть открыта в запущенном экземпляре Excel.
Примечание. При использовании Excel 2007 для сохранения книг можно использовать новый формат файла (XLSX). Обязательно обновите имя файла в приведенном ниже примере кода.
Примечание. В данном примере Text1 представляет элемент управления Text Box формы Visual Basic:
Visual Basic | ||
|
При использовании метода LinkPoke с Excel необходимо указать диапазон в формате строка-столбец (R1C1) для LinkItem. Если данные вставляются в несколько ячеек, можно использовать строку, в которой столбцы разделены символами табуляции, а строки – символами возврата каретки.
Если метод LinkExecute используется для выполнения команды в Excel, синтаксис команды должен соответствовать языку Excel Macro Language (XLM). Документация по XLM не входит в состав Excel 97 и более поздних версий. Дополнительные сведения о получении документации по XLM см. в следующей статье базы знаний Майкрософт:
143466 Файл Macro97.exe доступен для загрузки. macro97.rar
(Эта ссылка может указывать на содержимое полностью или частично на английском языке)
DDE не является рекомендуемым способом связи с Excel. Программирование объектов предоставляет больше возможностей и обеспечивает лучший доступ к новым функциям Excel.
Все ссылки MSDN по теме:
Автоматизация COM может привести к зависанию клиентского приложения в Win 95/98
Использование Visual Basic для автоматизации Microsoft Excel
Использование программирования объектов для передачи данных из набора записей в Excel
RECEDIT.VBP демонстрирует ввод-вывод файлов в Visual Basic
Запрещается вносить изменения, добавлять или удалять данные, источником которых являются книги Excel в Office Access 2003 или в Access 2002
Описание обновления для Access 2002: от 18 октября 2005 г.
Создание запросов и обновление данных Excel с помощью ADO со страниц ASP (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
Документация по XLM