К выбранному объекту типа excel приложение не определено осуществите введение параметров
Термин Объекты Excel (понимаемый в широком смысле, как объектная модель Excel) включает в себя элементы, из которых состоит любая рабочая книга Excel. Это, например, рабочие листы (Worksheets), строки (Rows), столбцы (Columns), диапазоны ячеек (Ranges) и сама рабочая книга Excel (Workbook) в том числе. Каждый объект Excel имеет набор свойств, которые являются его неотъемлемой частью.
Например, объект Worksheet (рабочий лист) имеет свойства Name (имя), Protection (защита), Visible (видимость), Scroll Area (область прокрутки) и так далее. Таким образом, если в процессе выполнения макроса требуется скрыть рабочий лист, то достаточно изменить свойство Visible этого листа.
В Excel VBA существует особый тип объектов – коллекция. Как можно догадаться из названия, коллекция ссылается на группу (или коллекцию) объектов Excel. Например, коллекция Rows – это объект, содержащий все строки рабочего листа.
Доступ ко всем основным объектам Excel может быть осуществлён (прямо или косвенно) через объект Workbooks, который является коллекцией всех открытых в данный момент рабочих книг. Каждая рабочая книга содержит объект Sheets – коллекция, которая включает в себя все рабочие листы и листы с диаграммами рабочей книги. Каждый объект Worksheet состоит из коллекции Rows – в неё входят все строки рабочего листа, и коллекции Columns – все столбцы рабочего листа, и так далее.
В следующей таблице перечислены некоторые наиболее часто используемые объекты Excel. Полный перечень объектов Excel VBA можно найти на сайте Microsoft Office Developer (на английском).
Доступ к диапазону, состоящему из единственной ячейки, может быть осуществлён через объект Worksheet при помощи свойства Cells, например, Worksheet.Cells(1,1).
Приведённая выше таблица показывает, как выполняется доступ к объектам Excel через родительские объекты. Например, ссылку на диапазон ячеек можно записать вот так:
Присваивание объекта переменной
В Excel VBA объект может быть присвоен переменной при помощи ключевого слова Set:
Активный объект
В любой момент времени в Excel есть активный объект Workbook – это рабочая книга, открытая в этот момент. Точно так же существует активный объект Worksheet, активный объект Range и так далее.
Сослаться на активный объект Workbook или Sheet в коде VBA можно как на ActiveWorkbook или ActiveSheet, а на активный объект Range – как на Selection.
Если в коде VBA записана ссылка на рабочий лист, без указания к какой именно рабочей книге он относится, то Excel по умолчанию обращается к активной рабочей книге. Точно так же, если сослаться на диапазон, не указывая определённую рабочую книгу или лист, то Excel по умолчанию обратится к активному рабочему листу в активной рабочей книге.
Таким образом, чтобы сослаться на диапазон A1:B10 на активном рабочем листе активной книги, можно записать просто:
Смена активного объекта
Если в процессе выполнения программы требуется сделать активной другую рабочую книгу, другой рабочий лист, диапазон и так далее, то для этого нужно использовать методы Activate или Select вот таким образом:
Методы объектов, в том числе использованные только что методы Activate или Select, далее будут рассмотрены более подробно.
Свойства объектов
Каждый объект VBA имеет заданные для него свойства. Например, объект Workbook имеет свойства Name (имя), RevisionNumber (количество сохранений), Sheets (листы) и множество других. Чтобы получить доступ к свойствам объекта, нужно записать имя объекта, затем точку и далее имя свойства. Например, имя активной рабочей книги может быть доступно вот так: ActiveWorkbook.Name. Таким образом, чтобы присвоить переменной wbName имя активной рабочей книги, можно использовать вот такой код:
Ранее мы показали, как объект Workbook может быть использован для доступа к объекту Worksheet при помощи такой команды:
Это возможно потому, что коллекция Worksheets является свойством объекта Workbook.
Методы объектов
Объекты VBA имеют методы для выполнения определённых действий. Методы объекта – это процедуры, привязанные к объектам определённого типа. Например, объект Workbook имеет методы Activate, Close, Save и ещё множество других.
Для того, чтобы вызвать метод объекта, нужно записать имя объекта, точку и имя метода. Например, чтобы сохранить активную рабочую книгу, можно использовать вот такую строку кода:
Как и другие процедуры, методы могут иметь аргументы, которые передаются методу при его вызове. Например, метод Close объекта Workbook имеет три необязательных аргумента, которые определяют, должна ли быть сохранена рабочая книга перед закрытием и тому подобное.
В окне Object Browser редактора Visual Basic показан список всех доступных объектов, их свойств и методов. Чтобы открыть этот список, запустите редактор Visual Basic и нажмите F2.
Рассмотрим несколько примеров
Пример 1
Этот отрывок кода VBA может служить иллюстрацией использования цикла For Each. В данном случае мы обратимся к нему, чтобы продемонстрировать ссылки на объект Worksheets (который по умолчанию берётся из активной рабочей книги) и ссылки на каждый объект Worksheet отдельно. Обратите внимание, что для вывода на экран имени каждого рабочего листа использовано свойство Name объекта Worksheet.
Пример 2
В этом примере кода VBA показано, как можно получать доступ к рабочим листам и диапазонам ячеек из других рабочих книг. Кроме этого, Вы убедитесь, что если не указана ссылка на какой-то определённый объект, то по умолчанию используются активные объекты Excel. Данный пример демонстрирует использование ключевого слова Set для присваивания объекта переменной.
В коде, приведённом ниже, для объекта Range вызывается метод PasteSpecial. Этот метод передаёт аргументу Paste значение xlPasteValues.
Пример 3
Следующий отрывок кода VBA показывает пример объекта (коллекции) Columns и демонстрирует, как доступ к нему осуществляется из объекта Worksheet. Кроме этого, Вы увидите, что, ссылаясь на ячейку или диапазон ячеек на активном рабочем листе, можно не указывать этот лист в ссылке. Вновь встречаем ключевое слово Set, при помощи которого объект Range присваивается переменной Col.
Данный код VBA показывает также пример доступа к свойству Value объекта Range и изменение его значения.
Тем не менее, я не мог избавиться от этой ошибки - я считаю, что у нее есть собственное быстрое решение.
Я немного покопался на этом сайте и наткнулся на это решение: тип взаимодействия не может быть встроен
Однако я не мог понять, поэтому не мог реализовать то, что было предложено в качестве решения.
Любая помощь очень ценится.
Если это не ошибка кода, удалите указанный ниже ключ из реестра.
Пуск -> Выполнить -> regedit -> HKEY_CLASSES_ROOT -> TypeLib -> -> 1.8 / 1.7 (Удалить это)
Решение. Эту проблему можно решить, удалив недопустимый раздел реестра, оставшийся от более поздней версии Office. Следуйте вышеуказанным шагам.
Причина: эта проблема вызвана оставшимся разделом реестра, если вы понизили версию Microsoft Office с Office 2010 до Office 2007 или с Office 2013 до Office 2010 или 2007.
Сообщите мне, если вам не помогло это решение
Microsoft Office 365
Я запускал Microsoft Office 365 с Windows 10 и безуспешно пробовал упомянутые решения для удаления раздела реестра.
Я пошел к панели управления, пытаясь восстановить пакет Office 365.
Выбрал быстрый ремонт
Еще раз попробовал мою программу, и все заработало!
Я уверен, что ответы на этот вопрос (и аналогичные вопросы), предлагающие редактировать реестр и удалять старые ссылки на версии Office, которых больше нет на компьютере верны.
Я добавляю этот ответ только потому, что сейчас пинаю себя. Два часа потратил на поиски ключей в реестре и ни к чему не привело. Последний бросок кости заключался в том, чтобы попробовать простое ремонт в Microsoft Office и вдруг моя ошибка исчезла.
- Благословения вам, я застрял с последних 45 минут
Windows 7 x64 / Office 365 (16.0.x) 32-разрядная / VS 2019
P.S> Была произведена проверка "после обработки" Process Monitor - теперь файл берется из первым зондом.
Компьютер был обновлен до 64-разрядной версии Office 2016, и интерфейс COM генерировал исключения при вызове из 32-разрядного приложения. У него не было старых записей TypeLib, подобных тем, что были в ответе Джайеша.
Сравнение трассировки ProcessMonitor с работающей машиной с Office 2016 привело к тому, что в
HKEY_CLASSES_ROOT \ Wow6432Node \ TypeLib \
Рабочая машина проверит несуществующий ключ реестра и вернет
На отказавшей машине был ключ реестра, но вскоре после этого возникло исключение.
После многократного удаления раздела реестра, повторного запуска трассировки и удаления следующего отказавшего ключа функциональность COM-интерфейса была восстановлена.
- Попробовав все, что я мог придумать, я прочитал это и понял, что мой компилятор настроен на 32-битный. Снятие отметки с этого поля было последней частью головоломки.
В моем случае я удаляю regedit в:
и проблема решена.
В реестре были 1.7 и 1.8. Решено удалением:
Дорогие форумчане, написал программку для офиса, закинул на сервер, чтобы все могли пользоваться и столкнулся с проблемой.
Дело в том, что там где Я ее писал был офис 2016 и на компьютерах с другой версией вылетала ошибка, так же вылетала ошибка если версия word, excel не активирована на компьютере.
Пока вижу 2 пути решения:
1 - переустановить всем офис 2016
2 - попытаться в реестре поковыряться (сомнительный)
Так вот, есть ли способ "вшить" interop в саму программу или иной способ обойти данную. ммм. "загвоздку"? =)
P.S. : Желательно не сильно кардинальный, чтобы не пришлось переделывать всё.
__________________Помощь в написании контрольных, курсовых и дипломных работ здесь
Microsoft.Office.Interop.Excel.Application процессы Excel в памяти компьютера
Добрый день, коллеги! Программа работает с файлами Excel. В каждой процедуре я указываю, что.
Работа с Excel через Microsoft.Office.Interop.Excel
Необходимо реализовать програмку взаимодействующую с Excel в режиме реального времени. Проблем.
Не могу записать в файл Excel при Microsoft.Office.Interop.Excel.Application.Visible = False
Коллеги, доброго времени суток. Столкнулся с такой проблемой. Не могу записать в файл, когда.
Работа с word и excel (Interop)
Добрый вечер всем. Появился у меня вопрос по моему проекту. Написал я небольшую программку. Все.
Zhivoder, используйте "позднее связывание", тогда отпадет привязка к версии Interop.
или же использовать библиотеку Interop от Офиса 2010, тем самым все следующие версии офиса будут с ней совместимы.
Думаю сейчас редко встретишь офис 2007, хотя, если есть, то лучще тогда версию 12 библиотеки использовать.
Yury Komar, можно чуть подробнее, что за "позднее связывание"?
А библиотеку можно включить в саму программу?
Добавлено через 17 минут
по первому вопросу нашел информацию читаю
Zhivoder, Вам ненужно носить эту библиотеку "с собой", она есть в установленном офисе, просто удаляете ссылку на вашу библиотеку от 2016-го офиса, устанавливаете необходимый NuGet пакет, ничего в коде менять не придётся.
Так как проект будет ссылаться на библиотеку от офиса 2010, то все последующие имеют обратную совместимость и успешно будут запускаться и работать.
Позднее связывание неудобно при написании кода и отладке.
на VS2010 NuGet не поставить, попробую потанцевать с бубном.Если нет, используйте, вместо той, что сейчас используете, те, что я выше приложил. Повторюсь, ненужно их таскать с EXE'шником
Yury Komar, ссылку на библиотеку сделал, те, что были на 16 оффис удалил, проблема не ушла, вываливается исключение на других версиях:
может Я чего-то не так сделал?)
Добавлено через 2 минуты
может имело смысл 12 версию поставить. сейчас попробую
Office 365 ProPlus переименован в Майкрософт 365 корпоративные приложения. Для получения дополнительной информации об этом изменении прочитайте этот блог.
Симптомы
Решение
Для решения этой проблемы воспользуйтесь приведенными ниже способами в указанном порядке.
Способ 1. Игнорировать DDE
Чтобы изменить этот параметр, выполните приведенные ниже действия:
Эта проблема может возникнуть, если в параметрах Excel установлен флажок Игнорировать другие приложения, использующие динамический обмен данными (DDE).
Дополнительные сведения об отключении DDE см. в следующей статье базы знаний Майкрософт:
Если устранить проблему с помощью этих действий не удалось, перейдите к способу 2.
Способ 2. Восстановление виртуализации взаимодействия с пользователем (UE-V)
Если вы используете обновление пользовательского опыта виртуализации (UE-V), установите Hotfix Package 1 для Microsoft User Experience Virtualization 2.0 (KB2927019).
Если вы не уверены, используете ли вы UE-V, просмотрите список программ в Программы и компоненты на панели управления. Запись для «Центра параметров компании» указывает на то, что вы используете UE-V.
Если устранить проблему с помощью этих действий не удалось, перейдите к способу 3.
Способ 3. Сброс сопоставления файлов
Чтобы проверить, правильно ли работают сопоставления файлов в системе, сбросите сопоставления файлов Excel на настройки по умолчанию. Для этого выполните описанные ниже действия в зависимости от установленной операционной системы. Windows 10
Windows 8
- На начальном экране введите «Панель управления».
- Выберите Панель управления.
- Выберите Программы по умолчанию > Задание программ по умолчанию.
- Выберите Excel > Выберите по умолчанию для этой программы.
- На экране Сопоставление программ выберите Выбрать все > Сохранить.
Windows 7
- Выберите Пуск > Панель управления.
- Выберите Программы по умолчанию.
- Выберите Сопоставление типов файлов или протоколов с конкретными программами.
- Выберите Лист Microsoft Excel, затем выберите "Изменить программу".
- В разделе Рекомендуемые программы выберите Microsoft Excel.
- Если Excel не отображается в этом списке, выберите Обзор, найдите папку установки Excel, выберите Excel.exe > Excel.
Если устранить проблему с помощью этих действий не удалось, перейдите к способу 4.
Способ 4. Восстановление Office
Возможно, требуется восстановить программы Office. Для этого следуйте инструкциям для вашего типа установки и операционной системы.
Для Office 365, установленной по технологии "нажми и работай"
- В поле поиска введите Панель управления, а затем выберите Панель управления в результатах поиска.
- В разделе Программы выберите Удаление программы.
- Нажмите Microsoft Office 365 > Изменить.
- Нажмите Восстановление по сети > Восстановить.
После завершения восстановления может потребоваться перезагрузить компьютер. Windows 8
- На начальном экране введите «Панель управления».
- Выберите Панель управления.
- В разделе Программы выберите Удаление программы.
- Выберите Microsoft Office 365 > Изменить.
- Выберите Восстановление по сети > Восстановить.
После завершения восстановления может потребоваться перезагрузить компьютер.
- Выберите Пуск >Панель управления.
- Дважды щелкните Программы и компоненты.
- Выберите Microsoft Office 365 > Изменить.
- Выберите Восстановление по сети > Восстановить.
После завершения восстановления может потребоваться перезагрузить компьютер.
Для установки Office 2016, 2013, Office 2010 или Office 2007
Для восстановления Office 2013, Office 2010 или Office 2007, следуйте шагам в следующей теме веб-сайта Office:
Если устранить проблему с помощью этих действий не удалось, перейдите к способу 5.
Способ 5. Выключите надстройки
Надстройки Excel и COM также могут вызывать эту проблему. Эти два вида надстроек расположены в разных папках. Для тестирования отключите и изолируйте конфликт, отключив каждую надстройку по одному. Для этого выполните следующие действия:
- В меню Файл выберите пункт Параметры > Надстройки.
- В списке Управление в нижней части экрана выберите элемент Надстройки COM > Перейти.
- Удалите одну из надстроек в списке, затем выберите OK.
- Перезапустите Excel, дважды щелкнув значок или имя файла для книги, которую вы пытаетесь открыть.
- Если проблема сохраняется, повторите шаги 1-4, за исключением выбора другой надстройки в шаге 3.
- Если проблема сохраняется после того, как вы очистите все надстройки COM, повторите шаги 1-4, за исключением выбора Надстройки Excel в шаге 2, затем попробуйте каждую из надстроек Excel по одному на шаге 3.
Если Excel загружает файл, надстройка, которую вы выключили в последний раз, вызывает проблему. В этом случае мы рекомендуем вам посетить веб-сайт производителя надстройки, чтобы узнать, доступна ли обновленная версия надстройки. Если новая версия надстройки недоступна или вам не нужно использовать надстройку, вы можете оставить ее выключенной.
Если Excel не открывает файл после выключения всех надстроек, проблема имеет другую причину.
Если устранить проблему с помощью этих действий не удалось, перейдите к способу 6.
Способ 6. Отключите аппаратное ускорение
Чтобы решить эту проблему, отключите аппаратное ускорение до тех пор, пока производитель видеокарт не выпустит исправление. Регулярно проверяйте обновления для драйвера видеокарты.
Порядок отключения аппаратного ускорения:
Запустите любую программу Office 2013.
На вкладке Файл выберите пункт Параметры.
В диалоговом окне Параметры выберите категорию Дополнительно.
В списке доступных параметров, установите флажок в поле Выключить аппаратное ускорение обработки изображений.
Следующий снимок экрана показывает эту опцию в Excel.
Нажмите OK.
Если устранить проблему с помощью этих действий не удалось, перейдите к способу 7.
Способ 7. Проверка наличия или установка последних обновлений
Возможно, вам придется настроить Центр обновления Windows для автоматической загрузки и установки рекомендуемых обновлений. Установка важных, рекомендуемых и необязательных обновлений зачастую может решить проблемы за счет замены устаревших файлов и устранения уязвимостей.
Для получения дополнительных сведений об обновлениях Office щелкните следующий номер статьи, чтобы перейти к статье в базе знаний Майкрософт.
Дополнительная информация
Существует множество возможных причин, которые могут привести к этой ошибке.
Дополнительные сведения об этой проблеме и дополнительные действия по устранению неполадок см. в следующих статьях базы знаний Майкрософт.
Программист, работающий в Excel , должен свободно ориентироваться в мире его объектов. Мощь офисного программирования определяется тем, что изначально в распоряжении программиста находится большое число уже готовых объектов. Чтобы с толком распорядиться предоставляемыми возможностями, объекты нужно знать.
Разговор об объектах Excel целесообразно начать с рассмотрения каркаса документа Excel . О важном понятии каркаса документа я много писал в предыдущих книгах [1, 2]. Многочисленные библиотеки объектов Office 2000, совокупность которых для программиста и представляют Office 2000, задают каркас всех документов, которые можно построить в этой среде. Когда создается новый документ, например, рабочая книга Excel , то по умолчанию из всей совокупности библиотек выбирается несколько, объекты которых и составляют каркас документа. Эти объекты доступны программисту, без каких либо дополнительных усилий. Центральную роль в каркасе документов Excel играют, конечно же, объекты библиотеки Excel . Но знание и всех других объектов, входящих в каркас, необходимо. Например, при программном создании интерфейса необходимо знание общих объектов библиотеки Office. Отмечу еще, что при желании программист всегда может расширить каркас документа, добавив в него те или иные библиотеки. Каркас, создаваемый по умолчанию в тот момент, когда открывается новая рабочая книга , состоит из объектов, входящих в состав следующих библиотек:
Если сравнить каркас рабочей книги Excel , например, с каркасом документа Word , то они отличаются тем, что в основе одного лежит библиотека Excel , в основе другого - библиотека Word . Эти библиотеки содержат специфические для данных приложений объекты. Что же касается интерфейсных объектов, объектов определяющих среду редактора VBA , автоматизацию, то здесь используются общие объекты. Библиотеки Office, Stdole, VBA - это общие для всех приложений Office 2000 библиотеки. Об объектах этих библиотек я подробно рассказывал в [2].
Замечу, что хотя каркас документа Excel не изменился в Office 2000 в сравнении с предыдущей версией, вместе с тем в объектной модели произошли довольно существенные изменения, появились новые объекты, новые свойства и методы у ранее существовавших объектов.
Объектная модель Excel
Прежде всего, несколько слов о том, как устроена объектная модель Excel и других приложений Office 2000. В этой модели объекты связаны между собой отношением встраивания . На нулевом уровне иерархии существует некоторый центральный объект , в который встроены другие объекты, составляющие первый уровень иерархии. В каждый из объектов первого и последующих уровней могут быть встроены объекты следующего уровня. Так этот процесс продолжается. Таким образом, объекты в этой модели "толстые", поскольку в них встроено большое число других объектов. В особенности это касается объектов, стоящих на верхних уровнях иерархии.
Формально встраивание реализуется с помощью свойств объектов. Свойства могут быть как терминальными, не являющимися объектами, и так называемыми свойствами - участниками, которые возвращают объекты при их вызове.
Давайте перейдем к рассмотрению библиотеки объектов Excel 9.0 и начнем с центрального объекта этой библиотеки - Excel.Application .
Объект Excel Application
Объект Excel.Application задает приложение Excel. А посему свойства, методы и события этого объекта должны характеризовать приложение в целом. Понятно, что у этого объекта должно быть свойство Workbooks , возвращающее все открытые в приложении рабочие книги, свойство Windows , возвращающее открытые окна, свойства, такие как CommandBars , возвращающие объекты интерфейса, и другие подобные свойства. Методов и событий, характерных для всего приложения в целом, по-видимому, не так уж и много. Так что, казалось бы, структура этого объекта должна быть достаточно простой. Однако реально это не так, - у объекта Excel.Application очень большое число свойств, методов и событий, что не позволяет мне описать их полностью, да и нет в этом особого смысла. Объект Excel.Application , на мой взгляд, явно перегружен, многие его свойства и методы без всякого ущерба можно было бы исключить, поскольку они оперируют с объектами, стоящими на более низких уровнях иерархии и не имеют прямого отношения ко всему приложению в целом. Приведу лишь один пример. Первое по алфавиту свойство ActiveCell возвращает объект, задающий активную ячейку . Понятно, что речь идет об активной ячейке активной страницы активной рабочей книги. Непонятно только, зачем нужно было добавлять это свойство самому приложению. Вполне достаточно, чтобы им обладал объект WorkSheet , задающий страницу книги. Более того, если в момент вызова свойства ActiveCell нет активной страницы с ячейками, то возникнет ошибка, чего не происходит, если активную ячейку вызывает объект WorkSheet . Примеров подобной перегруженности объекта Application можно привести много. Я в своем описании объектов верхнего уровня не всегда буду упоминать такие свойства, полагая, что лучше рассказать о них там, где они необходимы по существу.
Общие объекты и Excel.Application
Давайте начнем рассмотрение со свойств объекта Excel.Application, возвращающих уже знакомые нам общие объекты:
Все объекты, приведенные в этой таблице, играют важную роль при программной работе с документами Excel, как, впрочем, и с другими документами Office 2000.
Свойства - участники объекта
Рассмотрим теперь свойства - участники объекта Excel.Application , возвращающие объекты, специфические для Excel, Как я и предупреждал, я рассмотрю лишь основные свойства, которые действительно необходимы при работе с объектом Excel.Application .
Основное содержание этой главы будет связано с рассмотрением коллекции Workbooks , а точнее с объектом Workbook и вложенными в него объектами. Но прежде чем двинуться далее, приведу все-таки краткий обзор тех вложенных в Excel.Application объектов, доступных на этом уровне, по сути, относящихся к нижним уровням иерархии объектной модели Excel:
- Группа активных объектов - ActiveWorkbook, ActiveWindow, ActiveSheet, ActiveChart, ActiveCell, ActivePrinter , - возвращающих активную рабочую книгу, окно, активную рабочую страницу, диаграмму или ячейку, если таковые существуют в момент вызова соответствующего свойства. При отсутствии запрашиваемого активного объекта возникнет ошибка. Все эти объекты будут подробно рассмотрены, но чуть позже, когда мы спустимся вниз по иерархии объектов. Особняком стоит свойство, возвращающее активный принтер. Это свойство действительно имеет смысл связать с приложением. Заметьте, что объекты, стоящие на нижних уровнях иерархии, например, Workbook , этим свойством не обладают, так что добраться до принтера можно только через объект Application.
- Группа коллекций и объектов Range, входящих в состав соответствующего активного объекта - Sheets, Charts, Rows, Columns, Cells, Range - возвращающие соответственно коллекции рабочих страниц, страниц диаграмм активной рабочей книги, объект Range, содержащий все строки, столбцы, ячейки или заданную область активной рабочей страницы. Также как и в случае вызова объектов предыдущей группы, при вызове этих свойств следует быть осторожным, поскольку возникает ошибка, если нет соответствующего активного объекта.
- Свойство Selection возвращает выделенный объект в активном окне. Тип возвращаемого объекта зависит, от текущего выделения. Возвращается Nothing, если в активном окне нет выделенного объекта.
- Свойство ThisWorkbook возвращает текущую рабочую книгу, содержащую выполняемый макрос, один из операторов которого и вызвал это свойство. Это свойство представляет единственный способ добраться до рабочей книги, содержащей компонент AddIn, изнутри макросов, составляющих этот компонент.
Терминальные свойства
Терминальных свойств много, и понятно почему. Приложение Excel, как и другие приложения Office 2000, могут быть настроены пользователем по своему усмотрению. Эту настройку можно выполнять вручную, а можно и программно. Настройка вручную большей частью проводится из меню Сервис | Параметры, используя возможности, предоставляемые различными вкладками в открывающемся окне параметров. Для программной настройки используются терминальные свойства, - в этом их основное назначение. Естественно, я не буду останавливаться на всех свойствах, - они просты. В ниже приведенном обзоре представлено выборочное описание некоторых групп терминальных свойств:
Методы объекта Application
Методов у объекта Excel.Application меньше, чем свойств, но и их около полусотни. Дадим краткий обзор, опять-таки, объединяя их по возможности в группы:
- Метод ActivateMicrosoftApp(Index As xlMSApplication) позволяет активировать приложение Microsoft, заданное соответствующей константой в аргументе метода. Если приложение уже выполняется, то активируется текущий вариант. В противном случае открывается экземпляр приложения, и затем приложение активируется. Константы позволяют задать все основные приложения Office 2000, а также FoxPro, Project и некоторые другие приложения Microsoft.
- Группа методов - DeleteCustomList, DeleteChartAutoFormat, AddCustomList, AddChartAutoFormat - позволяет удалять и добавлять пользовательские списки и пользовательские форматы к тем спискам и форматам, которые используются в самом приложении Excel.
- Группа из пяти DDE -методов позволяет обеспечить динамический обмен данными между приложениями в соответствии со стандартом DDE . Сохранена для поддержки совместимости с предыдущими версиями Excel.
- Методы, запускающие вычисления - Calculate, CalculateFull , приводят к перевычислению рабочих страниц всех рабочих книг. Метод CheckSpelling запускает проверку орфографии во всех рабочих книгах. Метод Evaluate(Name) преобразует имя объекта в сам объект. Эти методы объединяет то, что все они, по существу, являются методами объектов более низкого уровня иерархии - объектов Workbook, WorkSheet, Chat . Объект Application "наследует" эти методы у своих потомков, что позволяет распространять действие метода на все открытые рабочие книги. Следует понимать, что пользоваться вызовом этих методов объектом Application стоит в очень редких случаях. Опять-таки, можно говорить о некоторой излишней перегрузке объекта Application .
- Группа Get-методов - GetCustomListContents, GetCustomListNum , позволяет вернуть содержимое пользовательского списка, получить его номер. Методы GetOpenFileName, GetSaveAsFileName позволяют получить имя файла, выбранное пользователем, открывая по ходу дела соответствующее диалоговое окно.
- Группа On-методов, позволяющих запустить на выполнение некоторый макрос. Метод OnKey(Key, Procedure) позволяет запустить макрос, заданный вторым параметром метода, при нажатии пользователем комбинации клавиш, заданной первым параметром метода. Метод OnTime(EarliestTime, Procedure As String, [LatestTime], [Schedule]) позволяет запустить макрос, заданный вторым параметром метода, в указанное время. О схожем методе OnTime рассказывалось при описании методов объекта Word.Application . Методы OnRepeat(Text As String, Procedure As String) и OnUndo(Text As String, Procedure As String) позволяют указать макросы и текст, который будет появляться в пунктах "Повторить Выполнение"и "Отменить Выполнение"из меню Правка. Когда пользователь выберет соответствующий пункт меню, то запускается макрос, указанный вторым параметром метода. Вот простой пример на применение этих методов:
Процедура RepeatAndUndo создает соответствующие пункты меню Правка, а процедуры Test и Write7 будут вызываться при выборе пользователем этих пунктов меню. Замечу, что реально особой пользы от применения этих методов не вижу, так как при любых действиях пользователя произойдет обновление этих пунктов меню.
- Методы Repeat и Undo близки по духу к рассмотренным только что методам. Они позволяют повторить или отменить последнее действие пользователя при его работе вручную.
- Еще одним важным методом, позволяющим запускать макрос на выполнение, является метод Run(Macro, Arg1, Arg2, …) . Метод Run позволяет выполнить макрос (процедуру или функцию) проекта рабочей книги или функцию из DLL или XLL. Макрос, запускаемый на выполнение, может находиться в той же рабочей книге, что и макрос, вызвавший метод Run , но может принадлежать и другой рабочей книге. В этом случае, естественно, проекты должны быть связаны по ссылке и в проекте, который вызывает макрос другого проекта, должна быть установлена ссылка на вызываемый проект. При вызове макросу могут быть передано произвольное число аргументов, все они передаются по значению, так что, заметьте, нельзя передать макросу сам объект, а только его значение, задаваемое свойством Value . Метод Run в свою очередь возвращает значение, являющееся результатом выполнения макроса. Приведу простой пример, демонстрирующий все особенности вызова метода Run :
Проекту документа BookOne я дал имя BookOneProject . В этом проекте объявлена глобальная переменная
В модуль с именем ModuleOne этого проекта я поместил описание процедуры PlusXY и функции Plus1 . Они выполняют простые и понятные без комментариев действия.
В этом же модуле находится и процедура testrun , демонстрирующая вызовы метода Run .
В проекте другой рабочей книги Excel с именем BookTwo я установил ссылку на проект BookOneProject и в один из модулей поместил процедуру testrun1 , вызывающую макросы проекта BookOneProject :
Взгляните, как выглядит сама форма.
Привожу рисунок этой формы только для того, чтобы пояснить, какая цель преследуется в этом примере. Я предполагал, что при открытии формы пользователь должен успеть в предоставленное ему время ввести два числа в поля X и Y, нажать кнопку, производящую вычисления и запомнить полученный результат. Однако мои намерения не осуществились, и вот по каким причинам. Если форма имеет статус модальной формы , то выполнение макроса приостанавливается до той поры, пока пользователь не закроет форму. Так что в этом случае у пользователя время на работу с формой не ограничено. Это я понимал. Если же форма имеет статус немодальной формы (свойство ShowModal = False ), то форма действительно будет открыта в течение 10 секунд. Но в этом случае пользователь не сможет работать с этой формой, вводить значения в поля ввода и нажимать командную кнопку. Хуже всего то, что при попытке ввода значений в поля формы они фактически будут попадать в произвольное место программного текста и порти ть сам проект. Так что следует быть осторожным в подобной ситуации.
- Метод Help([HelpFile], [HelpContextID]) позволяет вызвать справочное руководство, указав при необходимости и соответствующий раздел в этом руководстве. Можно вызывать как стандартную справочную систему, - в этом случае не нужно задавать аргументы при вызове метода, либо, что чаще бывает, собственную справочную систему. Первый параметр метода задает имя файла, хранящего справочное руководство. Этот файл может иметь уточнение "chm" , если руководство подготовлено с помощью инструментария HTML Help Workshop , или иметь уточнение "htm", если справочная система создана с помощью инструментария Microsoft WinHelp.
- Методы Intersect(Arg1 As Range, Arg2 As Range, …)As Range и Union(Arg1 As Range, Arg2 As Range, …)As Range возвращают в качестве результата объект Range , задающий прямоугольную область, представляющую соответственно пересечение или объединение областей аргументов, которых должно быть не менее двух и не более 30.
- Метод InputBox , по существу, эквивалентен одноименной функции из библиотеки VBA [2, стр. 346]и позволяет организовать диалог с пользователем и принять введенное им значение. Функция InputBox является одной из наиболее широко применяемых функций, и примеров ее вызова приводилось достаточно много. Не обойтись без нее и в примерах этой книги. Что вызывать метод InputBox объекта Application или функцию InputBox библиотеки VBA - дело вкуса.
- Метод Volatile([Volatile]) позволяет включить или выключить принудительное вычисление для функций, вызываемых в формулах рабочего листа. Метод вызывается непосредственно в функции, которую предполагается пометить. Булев параметр Volatile помечает функцию, как принудительно вычисляемую, если он имеет значение true . Это значение является значением параметра по умолчанию.
Я рассмотрел большую часть методов объекта Application. Замечу, что в предыдущей версии этих методов было значительно больше, поскольку многие функции Excel - математические и прочие были доступны на этом уровне. Теперь, как и положено, все они находятся в специальном контейнере WorkSheetFunction.
Читайте также: