Dde in excel 2003

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.

ShowHow 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.

  1. Select the cell you want to link from.
  2. 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:

    Formula with separators

    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.

  3. 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

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

Причины возникновения ошибки

Какие же основные причины вызывают данную ошибку? Можно выделить следующие:

  • Повреждение надстройки;
  • Попытка получить доступ к данным активного приложения;
  • Ошибки в системном реестре;
  • Повреждение программы Excel.

Решение проблемы

Пути устранения данной ошибки зависят от её причины. Но, так как в большинстве случаев, установить причину труднее, чем её ликвидировать, то более рациональным решением является методом проб попытаться найти верный способ действий из тех вариантов, которые представлены ниже.

Способ 1: отключение игнорирования DDE

Чаще всего, устранить ошибку при направлении команды удается путем отключения игнорирования DDE.

  1. Переходим во вкладку «Файл».
  2. Переход во вкладку Файл в Microsoft Excel

  3. Кликаем по пункту «Параметры».
  4. Переход в Параметры в Microsoft Excel

  5. В открывшемся окне параметров, переходим в подраздел «Дополнительно».
  6. Переход в раздел Дополнительно в Microsoft Excel

  7. Ищем блок настроек «Общие». Снимаем галочку около параметра «Игнорировать DDE-запросы от других приложений». Жмем на кнопку «OK».

Отключение игнорирования DDE в Microsoft Excel

После этого, в значительном числе случаев, проблема устраняется.

Способ 2: отключение режима совместимости

Ещё одной вероятной причиной, описанной выше проблемы, может быть включенный режим совместимости. Для того, чтобы отключить его, нужно последовательно проделать указанные ниже шаги.

  1. Переходим, с помощью проводника Windows, или любого файлового менеджера, в каталог размещения пакета программ Microsoft Office на компьютере. Путь к нему выглядит следующим образом: C:Program FilesMicrosoft OfficeOFFICE№. № — это номер офисного пакета. Например, папка, где хранятся программы Microsoft Office 2007, будет называться OFFICE12, Microsoft Office 2010 — OFFICE14, Microsoft Office 2013 — OFFICE15, и т.д.
  2. Путь к файлу Excel

  3. В папке OFFICE ищем файл Excel.exe. Кликаем по нему правой кнопкой мыши, и в появившемся контекстном меню выбираем пункт «Свойства».
  4. Переход в свойства в Microsoft Excel

  5. В открывшемся окне свойств Excel, переходим во вкладку «Совместимость».
  6. Переход во вкладку Совместимость в Microsoft Excel

  7. Если стоят флажки напротив пункта «Запустить программу в режиме совместимости», или «Выполнять эту программу от имени администратора», то снимаем их. Жмем на кнопку «OK».

Отключение запуска программы в режиме совместимости в Microsoft Excel

Lumpics.ru

Если галочки в соответствующих пунктах не установлены, то продолжаем искать источник проблемы в другом месте.

Способ 3: Очистка реестра

Одной из причин, которая может вызвать ошибку при направлении команды приложению в Excel, являются неполадки в реестре. Поэтому, нам его необходимо будет почистить. Перед тем, как приступать к дальнейшим действиям, для того чтобы подстраховать себя от возможных нежелательных последствий данной процедуры, настойчиво рекомендуем создать точку восстановления системы.

  1. Для того, чтобы вызвать окно «Выполнить», на клавиатуре вводим комбинацию клавиш Win+R. В открывшееся окно, вводим команду «RegEdit» без кавычек. Жмем на кнопку «OK».
  2. Переход в редактор реестра через окно Выполнить

  3. Открывается Редактор реестра. В левой части редактора расположено древо каталогов. Перемещаемся в каталог «CurrentVersion» по следующему пути: HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion.
  4. Редактор реестра Windows

  5. Удаляем все папки, расположенные в директории «CurrentVersion». Для этого, кликаем по каждой папке правой кнопкой мыши, и в контекстном меню выбираем пункт «Удалить».
  6. Чистка реестра Windows

  7. После того, как удаление выполнено, перезагружаем компьютер и проверяем работоспособность программы Excel.

Способ 4: отключение аппаратного ускорения

Временным решением проблемы может стать отключение аппаратного ускорения в Excel.

  1. Переходим в уже знакомый нам по первому способу решения проблемы раздел «Параметры» во вкладке «Файл». Опять кликаем по пункту «Дополнительно».
  2. В открывшемся окне дополнительных параметров Excel, ищем блок настроек «Экран». Устанавливаем галочку около параметра «Отключить аппаратное ускорение обработки изображений». Кликаем по кнопке «OK».

Отключение аппаратного ускоренрия в Microsoft Excel

Способ 5: отключение надстроек

Как уже говорилось выше, одной из причин данной проблемы может быть неисправность какой-то надстройки. Поэтому, как временную меру, можно использовать отключение надстроек Excel.

  1. Опять переходим, находясь во вкладке «Файл», в раздел «Параметры», но на этот раз кликаем по пункту «Надстройки».
  2. Переход в надстройки в Microsoft Excel

  3. В самой нижней части окна, в выпадающем списке «Управление», выбираем пункт «Надстройки COM». Жмем на кнопку «Перейти».
  4. Переход в надстройки COM в Microsoft Excel

  5. Снимаем галочки со всех надстроек, которые указаны в списке. Жмем на кнопку «OK».
  6. Надстройки COM в Microsoft Excel

  7. Если после этого, проблема исчезла, то опять возвращаемся в окно надстроек COM. Устанавливаем галочку, и жмем на кнопку «OK». Проверяем, не вернулась ли проблема. Если все в порядке, то переходим к следующей надстройке, и т.д. Ту надстройку, на которой ошибка вернулась, отключаем, и больше не включаем. Все остальные надстройки можно включить.

Включение надстройки в Microsoft Excel

Если же после выключения всех надстроек проблема осталась, то это означает, что надстройки можно включить, а ошибку следует устранить другим способом.

Способ 6: сброс сопоставлений файлов

Для решения проблемы можно также попытаться сбросить сопоставления файлов.

  1. Через кнопку «Пуск» переходим в «Панель управления».
  2. Переход в Панель управления

  3. В Панели управления выбираем раздел «Программы».
  4. Переход в раздел Программы в Панели управления

  5. В открывшемся окне, переходим в подраздел «Программы по умолчанию».
  6. Переход в раздел Программы по умолчанию в Панели управления

  7. В окне настроек программ по умолчанию выбираем пункт «Сопоставление типов файлов и протоколов конкретных программ».
  8. Переход в раздел Сопоставления типа файлов в Панели управления

  9. В списке файлов выбираем расширение xlsx. Жмем на кнопку «Изменить программу».
  10. Переход к изменению программы

  11. В открывшемся списке рекомендуемых программ, выбираем Microsoft Excel. Делаем клик по кнопке «OK».
  12. Выбор программы

  13. В случае, если программы Excel нет в списке рекомендуемых программ, жмем на кнопку «Обзор…». Переходим по тому пути, о котором мы говорили, обсуждая способ решения проблемы отключением совместимости, и выбираем файл excel.exe.
  14. Переход к поиску программы

  15. Аналогичные действия проделываем и для расширения xls.

Способ 7: загрузка обновлений Windows и переустановка пакета Microsoft Office

Не в последнюю очередь виной появления данной ошибки в Excel может быть отсутствие важных обновлений Windows. Нужно проверить, все ли доступные обновления загружены, и в случае необходимости закачать недостающие.

  1. Опять открываем Панель управления. Переходим в раздел «Система и безопасность».
  2. Переход в систему и безопасность панели управления

  3. Кликаем по пункту «Центр обновления Windows».
  4. Переход в центр обновления Windows

  5. В случае, если в открывшемся окне присутствует сообщение о наличии обновлений, жмем на кнопку «Установить обновления».
  6. Переход к установке обновлений Windows

  7. Ждем, пока обновления будут установлены, и перезагружаем компьютер.

Если ни один из перечисленных методов не помог решить проблему, то возможно есть смысл задуматься о переустановке пакета программ 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
 
   'Открыть новую книгу Excel
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
 
   'Добавить данные в ячейки первого листа новой книги
   Set oSheet = oBook.Worksheets(1)
   oSheet.Range("A1").Value = "Last Name"
   oSheet.Range("B1").Value = "First Name"
   oSheet.Range("A1:B1").Font.Bold = True
   oSheet.Range("A2").Value = "Doe"
   oSheet.Range("B2").Value = "John"
 
   'Сохранить книгу и закрыть Excel
   oBook.SaveAs "C:Book1.xls"
   oExcel.Quit

Передача данных по одной ячейке является оптимальным способом передачи небольших объемов данных. Этот способ позволяет помещать данные в любом месте рабочей книги и форматировать ячейки во время выполнения. Однако этот способ не рекомендуется применять при передаче больших объемов данных в книгу 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
   Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
 
   'Открыть новую книгу Excel
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
 
   'Создать массив с 3 столбцами и 100 строками
   Dim DataArray(1 To 100, 1 To 3) As Variant
   Dim r As Integer
   For r = 1 To 100
      DataArray(r, 1) = "ORD" & Format(r, "0000")
      DataArray(r, 2) = Rnd() * 1000
      DataArray(r, 3) = DataArray(r, 2) * 0.7
   Next
 
   'Добавить заголовки в строку 1
   Set oSheet = oBook.Worksheets(1)
   oSheet.Range("A1:C1").Value = Array("Order ID", "Amount", "Tax")
 
   'Передать массив на лист, начиная с ячейки A2
   oSheet.Range("A2").Resize(100, 3).Value = DataArray
   
   'Сохранить книгу и закрыть Excel
   oBook.SaveAs "C:Book1.xls"
   oExcel.Quit

Передача большого объема данных с помощью массива происходит значительно быстрее, чем передача данных по одной ячейке. Обратите внимание на строку из приведенного выше сценария, которая одновременно передает данные в 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
   'Создать набор записей из всех записей таблицы Orders
   Dim sNWind As String
   Dim conn As New ADODB.Connection
   Dim rs As ADODB.Recordset
   sNWind = _
      "C:Program FilesMicrosoft OfficeOfficeSamplesNorthwind.mdb"
   conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
      sNWind & ";"
   conn.CursorLocation = adUseClient
   Set rs = conn.Execute("Orders", , adCmdTable)
   
   'Создать новую книгу Excel
   Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
   Set oSheet = oBook.Worksheets(1)
   
   'Передать данные в Excel
   oSheet.Range("A1").CopyFromRecordset rs
   
   'Сохранить книгу и закрыть Excel
   oBook.SaveAs "C:Book1.xls"
   oExcel.Quit
   
   'Разорвать соединение
   rs.Close
   conn.Close

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

Visual Basic
1
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ sNWind & ";"

Замените эту строку кода следующей строкой:

Visual Basic
1
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _ sNWind & ";"

В 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   'Создать новую книгу Excel
   Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
   Set oSheet = oBook.Worksheets(1)
   
   'Создать объект QueryTable
   Dim sNWind As String
   sNWind = _
      "C:Program FilesMicrosoft OfficeOfficeSamplesNorthwind.mdb"
   Dim oQryTable As Object
   Set oQryTable = oSheet.QueryTables.Add( _
   "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
      sNWind & ";", oSheet.Range("A1"), "Select * from Orders")
   oQryTable.RefreshStyle = xlInsertEntireRows
   oQryTable.Refresh False
   
   'Сохранить книгу и закрыть Excel
   oBook.SaveAs "C:Book1.xls"
   oExcel.Quit

Использование буфера обмена

Буфер обмена Windows также может использоваться как механизм передачи данных на лист Excel. Чтобы вставить данные в несколько ячеек листа, можно скопировать строку, в которой столбцы разделены знаками табуляции, а строки – символами возврата каретки. В приведенном ниже сценарии показано, как Visual Basic может использовать буфер обмена для передачи данных в Excel:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   'Скопировать строку в буфер обмена
   Dim sData As String
   sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _
           & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _
           & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"
   Clipboard.Clear
 
   Clipboard.SetText sData
   
   'Создать новую книгу Excel
   Dim oExcel As Object
   Dim oBook As Object
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
   
 
   'Вставить данные
   oBook.Worksheets(1).Range("A1").Select
   oBook.Worksheets(1).Paste
   
   'Сохранить книгу и закрыть Excel
   oBook.SaveAs "C:Book1.xls"
   oExcel.Quit

Создание текстового файла с разделителями, который Excel может разобрать на строки и столбцы

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

Ниже приведен сценарий, иллюстрирующий создание текстового файла с разделителями-запятыми из набора записей ADO:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
   'Создать набор записей из всех записей таблицы Orders
   Dim sNWind As String
   Dim conn As New ADODB.Connection
   Dim rs As ADODB.Recordset
   Dim sData As String
   sNWind = _
      "C:Program FilesMicrosoft OfficeOfficeSamplesNorthwind.mdb"
   conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
      sNWind & ";"
   conn.CursorLocation = adUseClient
   Set rs = conn.Execute("Orders", , adCmdTable)
   
   'Сохранить набор записей как файл с символами табуляции в качестве разделителей
   sData = rs.GetString(adClipString, , vbTab, vbCr, vbNullString)
   Open "C:Test.txt" For Output As #1
   Print #1, sData
   Close #1
    
   'Разорвать соединение
   rs.Close
   conn.Close
   
   'Открыть новый текстовый файл в Excel
   Shell "C:Program FilesMicrosoft OfficeOfficeExcel.exe " & _
      Chr(34) & "C:Test.txt" & Chr(34), vbMaximizedFocus

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

Visual Basic
1
2
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
      sNWind & ";"

Замените эту строку кода следующей строкой:

Visual Basic
1
2
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
      sNWind & ";"

Если файл имеет расширение CSV, Excel открывает его без отображения мастера импорта текста и по умолчанию принимает, что в файле используются разделители-запятые. Если же файл имеет расширение TXT, Excel автоматически разбирает его, используя в качестве разделителей знаки табуляции.

В приведенном выше примере запуск Excel осуществлялся с помощью оператора Shell, а имя файла использовалось как аргумент командной строки. А в этом примере автоматизация не использовалась. Однако при желании можно применить минимум автоматизации, чтобы открыть текстовый файл и сохранить его в формате книги Excel:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
   'Создать новый экземпляр Excel
   Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
   Set oExcel = CreateObject("Excel.Application")
       
   'Открыть текстовый файл
   Set oBook = oExcel.Workbooks.Open("C:Test.txt")
   
   'Сохранить книгу Excel и закрыть Excel
   oBook.SaveAs "C:Book1.xls", xlWorkbookNormal
   oExcel.Quit

Дополнительные сведения об операциях ввода-вывода файлов из приложения 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
1
2
3
4
5
6
7
8
9
   'Создать новый объект подключения для Book1.xls
   Dim conn As New ADODB.Connection
   conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=C:Book1.xls;Extended Properties=Excel 8.0;"
   conn.Execute "Insert into MyTable (FirstName, LastName)" & _
      " values ('Bill', 'Brown')"
   conn.Execute "Insert into MyTable (FirstName, LastName)" & _
      " values ('Joe', 'Thomas')"
   conn.Close

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
1
2
3
4
5
6
7
8
9
   'Создание объекта соединения для Book1.xls
   Dim conn As New ADODB.Connection
   conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
      "Data Source=C:Book1.xlsx;Extended Properties=Excel 12.0;"
   conn.Execute "Insert into MyTable (FirstName, LastName)" & _
      " values ('Scott', 'Brown')"
   conn.Execute "Insert into MyTable (FirstName, LastName)" & _
      " values ('Jane', 'Dow')"
   conn.Close

При подобном добавлении записей в таблицу производится форматирование книги. В приведенном выше примере новые поля, добавляемые в столбец 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   'Установить связь DDE с Excel
   Text1.LinkMode = 0
   Text1.LinkTopic = "Excel|MyBook.xls"
   Text1.LinkItem = "R1C1:R2C3"
   Text1.LinkMode = 1
   
   'Вставить текст из Text1 в ячейки R1C1:R2C3 файла MyBook.xls
   Text1.Text = "one" & vbTab & "two" & vbTab & "three" & vbCr & _
                "four" & vbTab & "five" & vbTab & "six"
   Text1.LinkPoke
   
   'Выполнить следующие команды – выбрать ячейку A1 (R1C1) и изменить шрифт
   'format
   Text1.LinkExecute "[SELECT(""R1C1"")]"
   Text1.LinkExecute "[FONT.PROPERTIES(""Times New Roman"",""Bold"",10)]"
   
   'Разорвать связь DDE
   Text1.LinkMode = 0

При использовании метода 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

Понравилась статья? Поделить с друзьями:
  • Dd mm yyyy in excel vba
  • Dcs word 2 5
  • Dcount excel на русском
  • Dcf формула расчета excel
  • Dbf чем открыть excel