- •Об авторе
- •Введение
- •Глава 1. Excel 2010: история программы
- •Краткая история электронных таблиц
- •Все начиналось с VisiCalc
- •Quattro Pro
- •Microsoft Excel
- •Почему программа Excel так удобна разработчикам
- •Место Excel в стратегии Microsoft
- •Объектное мышление
- •Рабочие книги
- •Рабочие листы
- •Листы диаграмм
- •Листы макросов XLM
- •Пользовательский интерфейс Excel
- •Ввод данных
- •Формулы, функции и имена
- •Выделение объектов
- •Форматирование
- •Глава 3. Особенности формул
- •О формулах
- •Вычисление формул
- •Ссылки на ячейки и диапазоны
- •Зачем нужны неотносительные ссылки
- •Ссылки на другие листы или рабочие книги
- •Применение имен к существующим ссылкам
- •Пересечение имен
- •Присвоение имен столбцам и строкам
- •Определение области действия
- •Присвоение имен константам
- •Присвоение имен объектам
- •Ошибки в формулах Excel
- •Формулы массивов
- •Пример формулы массива
- •Создание календаря с помощью формулы массива
- •Достоинства и недостатки формул массивов
- •Примеры формул суммирования
- •Другие инструменты подсчета
- •Работа со значениями даты и времени
- •Использование дат до 1900 года
- •Создание мегаформул
- •Глава 4. Файлы Excel
- •Запуск Excel
- •Типы файлов
- •Форматы файлов Excel
- •Форматы текстовых файлов
- •Форматы файлов баз данных
- •Другие форматы файлов
- •Создание шаблонов
- •Создание шаблонов рабочих книг
- •Файл XLB
- •Файлы надстроек
- •Настройки Excel
- •Глава 5. Приложения электронных таблиц
- •О приложениях электронных таблиц
- •Разработчик и конечный пользователь
- •Кто такие разработчики и чем они занимаются
- •Классификация пользователей электронных таблиц
- •Для кого предназначены приложения электронных таблиц
- •Решение проблем с помощью Excel
- •Основные типы электронных таблиц
- •Однопользовательские приложения
- •Приложения-утилиты
- •Надстройки с функциями рабочих листов
- •Одноблоковые бюджеты
- •Электронные таблицы для хранения данных и доступа к ним
- •Клиентские приложения баз данных
- •Глава 6. Принципы разработки приложений электронных таблиц
- •Этапы разработки приложения
- •Определение потребностей пользователя
- •Проектирование приложения с учетом потребностей пользователя
- •Определение удобного пользовательского интерфейса
- •Работа с конечным пользователем
- •Тестирование приложения
- •Создание привлекательных и интуитивно понятных приложений
- •Документирование усилий, затраченных на разработку
- •Распространение приложения среди пользователей
- •Обновление приложения
- •Другие вопросы разработки приложений
- •Версия Excel, установленная у пользователя
- •Трудности, касающиеся поддержки языка
- •Видеорежимы
- •Глава 7. Введение в VBA
- •Основы языка BASIC
- •Обзор VBA
- •Объектные модели
- •Сравнение VBA и XLM
- •Основы VBA
- •Работа с Project Explorer
- •Добавление нового модуля VBA
- •Удаление модуля VBA
- •Экспорт и импорт объектов
- •Работа с окнами кода
- •Сворачивание и восстановление окон
- •Сохранение кода VBA
- •Ввод кода VBA
- •Настройка среды VBE
- •Что записывается
- •Параметры записи
- •Улучшение записанных макросов
- •Об объектах и коллекциях
- •Иерархия объектов
- •О коллекциях
- •Ссылки на объекты
- •Свойства и методы
- •Свойства объекта
- •Методы объекта
- •Свойства объекта Comment
- •Методы объекта Comment
- •Коллекция Comments
- •Работа с объектами Range
- •Свойство Range
- •Свойство Offset
- •Что следует знать об объектах
- •Важные концепции для запоминания
- •Узнайте больше об объектах и свойствах
- •Обзор элементов и конструкций VBA
- •Комментарии
- •Переменные, типы данных и константы
- •Определение типов данных
- •Объявление переменных
- •Работа с константами
- •Операторы присваивания
- •Массивы
- •Объявление массивов
- •Объявление многомерных массивов
- •Объявление динамических массивов
- •Объектные переменные
- •Пользовательские типы данных
- •Встроенные функции
- •Управление объектами и коллекциями
- •Конструкция With - End With
- •Конструкция For Each - Next
- •Контроль за выполнением кода
- •Конструкция Select Case
- •Циклическая обработка инструкций
- •Глава 9. Работа с процедурами VBA
- •О процедурах
- •Объявление процедуры Sub
- •Область действия процедуры
- •Выполнение процедуры
- •Выполнение процедуры с помощью ленты
- •Выполнение процедуры из пользовательского контекстного меню
- •Выполнение процедуры из другой процедуры
- •Выполнение процедуры по щелчку на объекте
- •Выполнение процедуры по событию
- •Выполнение процедуры в окне отладки
- •Передача аргументов процедурам
- •Обработка ошибок
- •Перехват ошибок
- •Реальный пример
- •Цель
- •Требования к проекту
- •Исходные данные
- •Подход
- •Что необходимо знать
- •Написание кода
- •Создание процедуры сортировки
- •Устранение проблем
- •Доступность
- •Глава 10. Создание функций
- •Процедуры и функции
- •Назначение пользовательских функций
- •Простой пример функции
- •Анализ пользовательской функции
- •Синтаксис функции
- •Область действия функции
- •Аргументы функций
- •Примеры функций
- •Функции без аргументов
- •Функция с одним аргументом
- •Функция с двумя аргументами
- •Функция с аргументом в виде массива
- •Функция с необязательными аргументами
- •Функция VBA, возвращающая массив
- •Функция с неопределенным количеством аргументов
- •Расширенные функции для работы с датами
- •Отладка функций
- •Определение категории функции
- •Использование надстроек для хранения пользовательских функций
- •Использование функций Windows API
- •Примеры функций Windows API
- •Определение папки Windows
- •Определение состояния клавиши <Shift>
- •Дополнительная информация о функциях Windows API
- •Учимся на примерах
- •Работа с диапазонами
- •Копирование диапазона
- •Перемещение диапазона
- •Подсчет выделенных ячеек
- •Определение типа выделенного диапазона
- •Удаление всех пустых строк
- •Дублирование строк
- •Чтение и запись диапазонов
- •Перенесение одномерных массивов
- •Перенесение диапазона в массив типа Variant
- •Выбор ячеек по значению
- •Копирование несмежных диапазонов
- •Управление рабочими книгами и листами
- •Сохранение всех рабочих книг
- •Синхронизация рабочих книг
- •Методы программирования на VBA
- •Переключение значения булева свойства
- •Определение количества страниц для печати
- •Отображение списка шрифтов
- •Обработка последовательности файлов
- •Полезные функции для программ VBA
- •Функция FileExists
- •Функция FileNameOnly
- •Функция PathExists
- •Функция RangeNameExists
- •Функция SheetExists
- •Получение значения из закрытой рабочей книги
- •Полезные функции в формулах Excel
- •Получение информации о форматировании ячейки
- •Беседа с рабочим листом
- •Отображение даты сохранения файла или вывода файла на печать
- •Основы иерархии объектов
- •Подсчет количества ячеек между двумя значениями
- •Соответствует ли строка шаблону
- •Возвращение из строки n-го элемента
- •Возвращение максимального значения всех рабочих листов
- •Возвращение массива случайных целых чисел без повторов
- •Расположение значений диапазона в произвольном порядке
- •Определение текущего видеорежима
- •Чтение и запись параметров системного реестра
- •Глава 12. Создание собственных диалоговых окон
- •Перед созданием диалоговых окон...
- •Использование окон ввода данных
- •Функция VBA MsgBox
- •Отображение формы ввода данных с помощью VBA
- •CommandButton
- •Frame
- •Image
- •Label
- •ListBox
- •MultiPage
- •OptionButton
- •RefEdit
- •ScrollBar
- •SpinButton
- •TabStrip
- •TextBox
- •ToggleButton
- •Настройка элементов управления пользовательского диалогового окна
- •Общие свойства
- •Отображение пользовательского диалогового окна
- •Отображение немодальной формы
- •Отображение пользовательского диалогового окна на основе значения переменной
- •Загрузка пользовательского диалогового окна
- •О процедурах обработки событий
- •Закрытие пользовательского диалогового окна
- •Пример создания пользовательского диалогового окна
- •Создание пользовательской формы
- •Создание кода для отображения диалогового окна
- •Проверка правильности введенных данных
- •События объекта UserForm
- •События объекта UserForm
- •События элемента управления SpinButton
- •Ссылка на элементы управления пользовательского диалогового окна
- •Настройка панели инструментов Toolbox
- •Добавление новых страниц
- •Настройка или комбинирование элементов управления
- •Вопросы для самоконтроля
- •Создание заставки
- •Отключение кнопки закрытия пользовательского диалогового окна
- •Изменение размера диалогового окна
- •Добавление опций в элемент управления ListBox
- •Определение выделенного элемента списка
- •Определение нескольких выделенных элементов списка
- •Работа с многоколоночными элементами управления ListBox
- •Использование элемента управления ListBox для выделения строк на листе
- •Использование элемента управления ListBox для активизации листа
- •Использование внешних элементов управления
- •Глава 15. Дополнительные приемы работы с пользовательскими формами
- •Отображение индикатора текущего состояния
- •Создание мастеров
- •Программирование зависимостей
- •Выполнение задачи
- •Имитация работы функции MsgBox
- •Несколько кнопок с одной процедурой обработки событий
- •Глава 16. Разработка утилит Excel с помощью VBA
- •Об утилитах Excel
- •Создание утилит с помощью VBA
- •Признаки хорошей утилиты
- •Утилита Text Tools
- •Рабочая книга утилиты
- •Как работает утилита
- •Оценка проекта
- •Принципы работы утилиты
- •Дополнительно об утилитах Excel
- •Глава 17. Работа со сводными таблицами
- •Вводный пример
- •Просмотр созданного кода
- •Код сводной таблицы
- •Создание обратной сводной таблицы
- •Кратко о диаграммах
- •Создание внедренной диаграммы
- •Размещение диаграммы на листе диаграммы
- •Активизация диаграммы с помощью кода VBA
- •Деактивизация диаграммы
- •Определение активности диаграммы
- •Изменение размеров и выравнивание диаграмм
- •Экспорт диаграммы
- •События диаграмм
- •Поддержка событий для встроенных диаграмм
- •Тонкости создания диаграмм
- •Печать встроенных диаграмм на всю страницу
- •Отображение/сокрытие рядов данных
- •Создание фиксированной диаграммы
- •Анимирование диаграмм
- •Прокрутка диаграммы
- •Глава 19. Концепция событий Excel
- •Типы событий Excel
- •Понимание последовательности событий
- •Отключение событий
- •Ввод кода процедуры обработки события
- •События уровня объекта Workbook
- •Событие Open
- •Событие Activate
- •Событие SheetActivate
- •Событие NewSheet
- •Событие Deactivate
- •Событие BeforePrint
- •Событие Change
- •Включение событий уровня объекта Application
- •Определение факта открытия рабочей книги
- •События объекта UserForm
- •Запуск другого приложения из Excel
- •Использование функции Shell
- •Использование API-Функции ShellExecute
- •Инструкция AppActivate
- •Работа с внешними объектами
- •Раннее и позднее связывание
- •Простой пример позднего связывания
- •Использование метода SendKeys
- •Глава 21. Создание и использование надстроек
- •Определение надстройки
- •Основные причины создания надстроек
- •Создание надстройки
- •Пример надстройки
- •Установка надстройки
- •Тестирование надстройки
- •Распространение надстройки
- •Изменение надстройки
- •Членство в коллекциях
- •Получение доступа к VBA-процедурам надстройки
- •События объекта AddIn
- •Оптимизация производительности надстроек
- •Проблемы, связанные с использованием надстроек
- •Правильная установка
- •Ссылки на другие файлы
- •Указание правильной версии Excel
- •Глава 22. Работа с лентой
- •Начальные сведения о ленте
- •Активизация вкладки
- •Настройка ленты
- •Простой пример кода RibbonX
- •Некоторые замечания о настройке ленты
- •Код панели инструментов
- •Глава 23. Работа с контекстными меню
- •Обзор объекта CommandBar
- •Типы объектов CommandBar
- •Отображение контекстных меню
- •Настройка контекстных меню с помощью VBA
- •Сброс контекстных меню
- •Отключение контекстного меню
- •Отключение элементов контекстного меню
- •Добавление подменю в контекстное меню
- •Автоматическое добавление и удаление меню
- •Создание нового контекстного меню
- •Справка в приложениях Excel
- •Справочная система, созданная с помощью компонентов Excel
- •Использование примечаний к ячейке для предоставления справки
- •Использование средства HTML Help
- •Связывание файлов справочного руководства с приложением
- •Глава 25. Разработка пользовательских приложений
- •Что такое приложение, ориентированное на пользователя
- •Как это работает
- •Концепции разработки приложений
- •Концепция совместимости
- •Проблемы совместимости
- •Избегайте использования новых возможностей
- •Использование 64-разрядной версии Excel
- •Создание интернациональных приложений
- •Многоязычные приложения
- •Идентификация настроек системы
- •Параметры настройки даты и времени
- •Часто выполняемые операции с файлами
- •Управление файлами с помощью функций VBA
- •Использование объекта FileSystemObject
- •Открытие текстового файла
- •Чтение текстового файла
- •Запись в текстовый файл
- •Получение номера файла
- •Определение или установка позиции в файле
- •Примеры управления текстовыми файлами
- •Импортирование данных из текстового файла
- •Экспортирование диапазона в текстовый файл
- •Импортирование текстового файла в диапазон
- •Протоколирование операций в Excel
- •Фильтрация текстового файла
- •Экспортирование диапазона в формат HTML
- •Введение в IDE
- •Объектная модель IDE
- •Использование VBA для создания кода VBA
- •Простой пример
- •Глава 29. Модули классов
- •Определение модуля класса
- •Пример создания модуля класса
- •Дополнительные сведения о модулях классов
- •События модуля класса
- •Модуль класса CSVFileClass
- •Глава 30. Работа с цветом
- •Определение цвета
- •Цветовая модель RGB
- •Темы документа
- •Изменение цветов диаграммы
- •Списки часто задаваемых вопросов
- •Общие вопросы об Excel
- •Редактор Visual Basic
- •Процедуры
- •Функции
- •Объекты, свойства, методы и события
- •Пользовательские диалоговые окна
- •Надстройки
- •Пользовательский интерфейс
- •Справочная система Excel
- •Техническая поддержка со стороны компании Microsoft
- •Группы новостей
- •Веб-сайты
- •Сайт Йона Пелтиера
- •Системные требования
- •Использование компакт-диска
- •Файлы и программы, находящиеся на компакт-диске
- •Решение проблем
- •Предметный указатель
358 |
|
Часть III. Visual Basic for Applications |
F o u n d F ile s = F ou nd F ile s |
+ |
1 |
ReDim P reserve F i le L i s t ( l |
To F ou nd F ile s) |
|
F ile L is t( F o u n d F ile s ) = |
FileName & " * " |
|
Loop |
|
|
'Просмотр и обработка файлов
For i |
= |
1 То F o u n d F ile s |
C a ll |
P r o c e s s F ile s ( F ile L is t( i) ) |
|
N ext |
i |
|
End Sub
Компакт-диск
Файл рассмотренного выше примера b a tc h p ro c e s s in g .x ls m находится на прилагаемом к книге компакт-диске. Здесь же можно найти дополни тельные файлы t e x t O l. t x t , te x t0 2 . t x t и te x t0 3 . t x t .
Если нужно импортировать другие текстовые файлы, процедуру придется немного изменить. Соответствующие заданному критерию файлы находятся в массиве Found F ile s , а процедура использует для обработки файлов цикл F o r - N e x t. В цикле обра ботка выполняется процедурой P r o c e s s F ile s , показанной ниже. Эта простая проце дура использует метод O p e n T e xt для импорта файла и вставки в него пяти формул. Ко нечно, вы можете заменить такую процедуру собственной, соответствующей более конкретной задаче.
Sub P ro ce ssF ile s(F ile N a m e As S trin g )
' Импорт файла |
|
|
|
W orkbooks. OpenText |
F ileN am e: =FileN am e, _ |
||
O r ig in : =xlW indow s, |
_ |
||
S ta rtR o w := l, |
_ |
|
|
D ataType: = x lF ix e d W id th / _ |
|||
F ie ld In fo := |
_ |
|
|
A r r a y ( A r ra y (0, |
1 ), |
A r r a y (3, 1 ), A r r a y (12, 1)) |
|
'Ввод формул суммирования
R a n g e ("D l").V a lu e |
= |
"A" |
R a n g e ("D 2 ").V a lu e |
= |
"B" |
R a n g e ("D 3 ").V a lu e |
= |
"C" |
Range( "E l:E 3 ").F o rm u la |
= |
"=COUNTIF(В : B , D l) " |
Range( " F I:F 3 ").F o rm u la |
= |
"=SUMIF(В : B ,D l#С: С )" |
End Sub |
|
|
Перекрестная ссылка
©Дополнительныев главе 27. сведения о работе с файлами с помощью VBA можно найти
Полезные функции для программ VBA
В данном разделе представлены некоторые “практичные” функции, которые будут использоваться в ваших приложениях либо помогут в создании аналогичных функций. Эти функции наиболее полезны, когда вызываются из другой процедуры V B A . Следова тельно, они объявляются с ключевым словом P r iv a t e и не отображаются в диалоговом окне Excel М астер функций (Insert Function).
Глава 11. Приемы и методы программирования на VBA |
359 |
Компакт-диск
Примеры, описанные в этом разделе, можно найти на прилагаемом к книге компакт-диске в файле VBA u t i l i t y fu n c tio n s .xlsm .
Функция FileExists
Данная функция получает один аргумент (путь и имя файла) и возвращает ИСТИНА, если файл существует.
Private F u n c tio n |
F ile E x is ts (fn a m e ) |
As Boolean |
|||
' Возвращает |
ИСТИНА, если |
файл |
сущ ествует |
||
F ile E x is ts |
= |
(D ir(fn a m e ) |
<> |
"" ) |
|
End F u n c tio n |
|
|
|
|
|
Функция FileNameOnly
Функция получает один аргумент (путь и имя файла) и возвращает только имя файла. Другими словами, функция “обрезает” путь.
Private F u n c tio n |
FileNam eO nly(pnam e) As S trin g |
||||
' Возвращает |
имя |
файла |
из стр о ки п уть /и м я файла |
||
Dim temp |
As |
V a ria n t |
|
||
le n g th |
= |
Len(pname) |
|
||
temp = |
S p lit(p n a m e , |
A p p lic a tio n . P a th S e p a ra to r) |
|||
FileNam eOnly = |
tem p(U B ound(tem p)) |
||||
End F u n ctio n |
|
|
|
|
|
Функция использует функцию VBA S p lit, которая принимает строку (вместе с симво- лами-разделителями) и возвращает массив типа v a r ia n t, содержащий элементы, которые находятся между символами-разделителями. В рассматриваемом случае переменной temp присваивается массив, содержащий текстовые строки между A p p lic a tio n .P a th S e - parater (обычно в качестве разделителя используется обратная косая черта). Дополни тельные примеры использования функции S p l it будут рассмотрены далее.
Если в качестве аргумента указать с : \e x c e l f ile s\2 0 1 0 \b a c k u p \b u d g e t .x lsx , функция возвратит строку b u d g e t. x lsx .
Функция FileN am eO nly обрабатывает любой путь и имя файла (даже если файла не существует). Если файл существует, лучше воспользоваться следующей более простой функцией.
Private F u n c tio n |
FileNam eOnly2(pname) As S trin g |
FileNameOnly2 |
= D ir(pnam e) |
End F u n ctio n |
|
Функция PathExists
Функция получает один аргумент (путь) и возвращает ИСТИНА, если путь существует.
Private F u n c tio n |
P athE xists(pnam e) |
As Boolean |
||
' Возвращает ИСТИНА, если путь |
сущ ествует |
|||
I f D ir(pnam e, |
v b D ire c to ry ) = |
"" |
Then |
|
P a th E x is ts |
= |
F alse |
|
|
Else |
= |
(G etA ttr(pn am e) |
And v b D ire c to ry ) = v b D ire c to ry |
|
P a th E x is ts |
||||
End I f |
|
|
|
|
End F un ction |
|
|
|
|
360 |
Часть III. Visual Basic for Applications |
Функция RangeNameExists
Функция получает один аргумент (название диапазона) и возвращает ИСТИНА, если в активной рабочей книге существует указанное название диапазона.
P riv a te |
F u n c tio n RangeNameExists(nname) |
As Boolean |
||
' |
Возвращает ИСТИНА, |
если имя диапазона |
сущ ествует |
|
|
Dim n |
As Name |
|
|
|
RangeNameExists = F alse |
|
||
|
For Each n In ActiveW orkbook.Nam es |
|
||
|
I f |
UCase(n.Name) |
= UCase(nname) Then |
|
|
|
RangeNameExists = True |
|
|
|
|
E x it F u n c tio n |
|
|
|
End I f |
|
|
|
End |
N ext |
n |
|
|
F u n c tio n |
|
|
||
Ниже представлен еще один вариант этой функции. Она создает объектную перемен ную, использующую имя. Если имени не существует, генерируется ошибка.
P riv a te |
F u n c tio n RangeNameExists2(nname) |
As |
Boolean |
|||||
' |
Возвращает ИСТИНА, |
если |
имя диапазона |
сущ ествует |
||||
|
Dim |
n |
As |
Range |
|
|
|
|
|
On |
E rro r |
Resume N ext |
|
|
|
||
|
Set |
n |
= Range(nname) |
|
|
|
||
|
I f |
E rr.N um ber = 0 |
Then RangeNameExists2 |
= True _ |
||||
|
|
E lse |
RangeNameExists2 |
= F alse |
|
|
||
End |
F u n c tio n |
|
|
|
|
|||
Функция SheetExists
Функция получает один аргумент (название рабочего листа) и возвращает ИСТИНА, если данный рабочий лист существует в активной рабочей книге.
P riv a te F u n c tio n S h eetE xists(snam e) As Boolean
' |
Возвращает ИСТИНА, |
если рабочий лист |
сущ ествует в активной |
||||
1 |
рабочей |
кн и ге |
|
|
|
|
|
|
Dim |
х As |
O b je c t |
N ext |
|
|
|
|
On |
E rro r |
Resume |
|
|
||
|
Set |
x = A ctive W o rkb o o k . Sheets(snam e) |
|
||||
|
I f |
E rr.N um ber = |
0 Then |
S h e e tE x is ts = |
True _ |
||
|
|
E lse |
S h e e tE x is ts |
= |
F alse |
|
|
End |
F u n c tio n |
|
|
|
|
||
Функция WorkbooklsOpen
Функция получает один аргумент (название рабочей книги) и возвращает ИСТИНА, если данная рабочая книга открыта.
P riv a te |
F u n c tio n WorkbooklsOpen(wbname) |
As |
Boolean |
|||||
' |
Возвращает ИСТИНА, |
если |
рабочая кн и га |
откры та |
||||
|
Dim |
х |
As |
Workbook |
|
|
|
|
|
On |
E rro r |
Resume N ext |
|
|
|
||
|
Set |
x |
= Workbooks(wbname) |
|
|
|||
|
I f |
E rr.N um ber = 0 |
Then |
W orkbooklsOpen |
= |
True _ |
||
|
|
E lse |
W orkbooklsOpen |
= F alse |
|
|
||
End |
F u n c tio n |
|
|
|
|
|||
Глава 11. Приемы и методы программирования на VBA |
361 |
Проверка принадлежности к коллекции
Следующая функция представляет собой образец “групповой” функции, с помощью которой можно определить, является ли объект членом коллекции.
Private |
F u n c tio n Is In C o lle c tio n ( C o in As O b je c t, _ |
||
Item |
As |
S trin g ) |
As Boolean |
Dim |
Obj |
As O b je c t |
|
On E rro r |
Resume |
N ext |
|
Set |
Obj |
= C o in (Ite m ) |
|
Is In C o lle c tio n |
= Not Obj Is N o th in g |
||
End F u n ctio n |
|
||
Эта функция имеет два аргумента: коллекцию (объект) и элемент (строка), который может быть либо не быть членом коллекции. Функция будет создавать объектную пере менную, представляющую элемент коллекции. Если попытка увенчается успехом, функция возвратит True; иначе — False .
Функцию Is In C o lle c tio n можно использовать вместо трех других функций, пере численных в этой главе: RangeNameExists, S h e e tE x is ts и WorkbooklsOpen. Чтобы определить, содержится ли в активной рабочей книге диапазон Data, вызовите функ цию Is In C o lle c tio n с помощью следующего оператора:
MsgBox Is In C o lle c tio n (A c tiv e W o rk b o o k .N a m e s , "D a ta")
Для того чтобы определить, открыта ли рабочая книга с названием Budget, исполь зуйте следующий оператор:
MsgBox Is In C o lle c tio n (W o rk b o o k s , "b u d g e t. x ls x " )
Чтобы узнать, содержит ли активная рабочая книга рабочий лист Лист1, используйте следующий оператор:
MsgBox Is In C o lle c tio n (A c tiv e W o rk b o o k . W orksheets, "Л ист1")
Получение значения из закрытой рабочей книги
В VBA не существует метода получения значения из закрытого файла рабочей книги. Однако вы можете воспользоваться возможностью управления ссылками на файлы, ко торая предоставляется в Excel. В настоящем разделе описана функция VBA (G etV alue, показанная ниже), которая получает значение из закрытой книги. Эта задача выполняет ся в результате вызова макроса XLM, который появился в “доисторических” версиях Excel (до версии 5), но поддерживается до сих пор.
Private F u n c tio n |
G e tV a lu e (p a th , |
f i l e , |
sh e e t, |
r e f) |
||||||||||
1 Выборка значения из закрытой рабочей книги |
|
|
||||||||||||
|
Dim arg |
As |
S trin g |
|
|
|
|
|
|
|
|
|
||
1 |
Проверка |
существования |
файла |
|
|
|
|
|
||||||
|
I f |
R ig h t(p a th , |
1) |
<> " \ " |
Then |
p a th |
= p a th |
& |
" \ " |
|||||
|
I f |
D ir(p a th |
& |
f i l e ) |
= |
"" |
Then |
|
|
|
|
|
||
|
|
G etValue |
= |
"Файл |
не |
найден |
" |
|
|
|
|
|||
|
|
E x it |
F u n c tio n |
|
|
|
|
|
|
|
|
|
||
|
End I f |
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
Создание |
аргумента |
" [" |
& |
f i l e |
& "] " |
& |
sheet |
& " 1!" & |
|||||
|
arg |
= |
& p a th |
& |
||||||||||
|
|
R a n g e (re f) . Range( " A l" ) .A d d re s s (, |
, |
x lR lC l) |
||||||||||
1 |
Выполнение |
макроса |
XLM |
|
|
|
|
|
|
|
||||
|
GetValue |
= |
E xe cuteE xcel4 M a cro (a rg) |
|
|
|
|
|||||||
End F un ction
