- •Об авторе
- •Введение
- •Глава 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
- •Группы новостей
- •Веб-сайты
- •Сайт Йона Пелтиера
- •Системные требования
- •Использование компакт-диска
- •Файлы и программы, находящиеся на компакт-диске
- •Решение проблем
- •Предметный указатель
Глава 31. Часто задаваемые вопросы о программировании в Excel |
879 |
ссылки переместите данные диаграммы в текущую рабочую книгу, затем повторно соз дайте диаграмму.
Если рабочая книга содержит диалоговые листы Excel 5/95, выделяйте объекты в ка ждом диалоговом окне, проверяя при этом содержимое строки формул. Если объект со держит ссылку на другую рабочую книгу, измените или удалите ее.
Выберите команду Формулы^ХЭпределенные имена^Диспетчер имен (Formulas1^ Defined Name^Name Manager). Прокрутите вниз список в окне диспетчера имен и про смотрите столбец Диапазон (Refers То). Удалите имена, которые ссылаются на другую рабочую книгу или содержат некорректные ссылки (например, #ССЫЛ!). Именно по этой причине чаще всего возникают “фантомные ссылки”.
Почему Excel сбоит при каждом запуске?
При запуске Excel открывается файл * . x lb , который включает настройки меню и панели инструментов. Если этот файл поврежден, это приведет к сбою при запуске Excel. В силу ряда причин размер этого файла может быть чрезвычайно большим. Ре зультатом является очередной сбой при запуске Excel. Обычно размер файла * . x lb со ставляет 100 Кбайт или менее.
Если при каждом запуске Excel происходит сбой программы, попробуйте удалить файл * .x lb . Для этого закройте Excel и найдите на жестком диске файл * .x lb . (Имя файла и его местоположение варьируются.) Создайте резервную копию этого файла, удалите исходный файл и попробуйте перезапустить Excel. Обычно Excel запускается в штатном режиме, создавая новый файл * . x lb .
Удаление файла * .x lb также влечет за собой удаление всех настроек меню и пане лей инструментов, которые находятся на вкладке Надстройки (Add-Ins).
Где можно найти примеры кода VBA?
В Интернете можно найти буквально тысячи примеров кода VBA. Для начала можете посетить мой веб-сайт, находящийся по следующему адресу:
h ttp ://sp read sh eetp ag e . com
Можно попробовать поискать нужные сведения на сайте Google: h ttp ://g o o g le . com
Редактор Visual Basic
Можно ли использовать функцию записи макросов VBA для создания всех макросов?
Нет. Запись макросов подходит только для очень простых операций. Макросы, которые задействуют переменные, циклы или прерывают поток выполнения операций, записать не возможно. Но вы вправе воспользоваться командой записи макросов для создания фраг ментов кода, а также для получения информации о необходимых свойствах и методах.
Я создал универсальные макросы, которые должны быть доступны все время. Как обеспечить постоянный доступ к ним?
Можно сохранить макросы в персональной книге макросов. Это (обычно) скрытая рабочая книга, которая загружается в Excel автоматически. После записи макроса у вас появляется возможность сохранить его в персональной книге макросов. Соответствую щий этой книге файл под названием находится в папке
880 |
Часть VII. Дополнительные темы |
Я не могу найти свою персональную книгу макросов. Где она? |
|
Файл P e r s o n a l . x ls b |
не будет существовать до тех пор, пока в него не записан хо |
тя бы один макрос. |
|
Я заблокировал проект VBA с помощью пароля и забыл пароль. Существует ли спо собразблокировать проект?
Существует несколько программ взлома паролей, которые предоставляются незави симыми производителями. Для их поиска можно воспользоваться одним из поисковых средств Интернета. В поиске вам помогут ключевые слова “пароль Excel”. Существова ние подобных программ говорит о том, что пароли Excel не настолько надежны, как того хотелось бы.
Можно ли записать макрос, предназначенный для изменения пароля проекта?
Это невозможно. Средства защиты проекта VBA не предоставляются в объектной модели. Скорее всего, такой шаг сделан для усложнения работы программного обеспе чения по взлому паролей.
Добавляемый новый модуль всегда начинается со строки O p tio n E x p l i c i t . Что она означает?
Если строка O p tio n E x p lic it находится в начале модуля, это означает, что необ ходимо объявлять все переменные, которые будут использоваться в пределах данного модуля (достаточно неплохая идея). Если требуется, чтобы эта строка не добавлялась в но вые модули, запустите VBE и выберите команду Tools^Options (Сервис1^Параметры). Перейдите на вкладку Editor (Редактор) и отмените установку флажка Require Variable Declaration (Явное описание переменных). После этого можно объявить переменные или переложить задачу определения типа данных на плечи интерпретатора VBА.
Почему мой код VBA отображается другим цветом? Можно ли изменить эти цвета?
В VBA цвета используются для выделения различных текстов в коде: комментариев, ключевых слов, идентификаторов, операторов с синтаксическими ошибками и т.д. Эти цвета можно переопределять, кроме того, допускается изменять шрифты, которые ис пользуются для выделения, и т.д. Воспользуйтесь командой Tools^Options (и перейди те на вкладку Editor Format (Формат редактора)) в редакторе VBE.
Можно ли удалить модуль VBA с помощью кода VBA?
Да. Следующий код удаляет модуль M odulel из активной рабочей книги.
W ith A ctive W o rkb o o k . V B P ro je ct
.VBComponent s . Remove .VBComponent s ( " M odule1") End W ith
Этот код может не работать в вашей версии Excel. См. следующий вопрос.
Я написал макрос, который добавляет код VBA в проект VB. При запуске в среде Excel появляется сообщение об ошибке. Что здесь неправильно?
В Excel 2002 появилась новая настройка: Доверять доступ к объектной модели проектов VBA. По умолчанию эта настройка отключена. Для ее изменения выберите команду Файл^Параметры Ехсе^Центр управления безопасностью (File^Excel Options^Trust Center). Щелкните на кнопке Параметры центра управления безопас ностью (Trust Center Settings) для отображения диалогового окна Центр управления
Глава 31. Часто задаваемые вопросы о программировании в Excel |
881 |
безопасностью (Trust Center). Щелкните на вкладке Параметры макросов (Macro Settings) и установите флажок Доверять доступ к объектной модели проектов VBA
(Trust Access to the VBA Project Object Model).
Как изменить параметры безопасности макросов для пользователя? Как отключить появление сообщения “эта рабочая книга содержит макросы”, когда открывается приложение?
Изменение уровня безопасности с помощью кода VBA приведет к полной бесполез ности всей системы безопасности макросов. Подумайте над этим.
Какработает опция X Ja erln terfa ceO n ly при защите рабочего листа?
При организации защиты рабочего листа с помощью кода VBA можно использовать следующий оператор:
A c tiv e S h e e t. P ro te c t U s e rln te rfa c e O n ly : =True
После выполнения этого оператора лист будет защищен, хотя и может изменяться с помощью макроса. Важно понимать, что эта установка не сохраняется вместе с рабо чей книгой. При повторном открытии рабочей книги следует опять выполнить оператор для повторной установки U s e r ln te r f aceO nly.
Как узнать, находится ли в рабочей книге макровирус?
В редакторе VBE активизируйте проект, который соответствует рабочей книге. Про смотрите все модули кода и обратите внимание на код VBA, который вам незнаком. Обычно код вируса плохо форматирован и содержит большое количество переменных со странными названиями. Еще одной возможностью является использование коммерче ских программ для поиска вирусов.
При использовании оператора & появляется сообщение об ошибке
Скорее всего, VBA интерпретирует амперсанд как символ объявления типа. Удосто верьтесь, что перед оператором конкатенации и после него добавлены пробелы.
Не работает символ продолжения строки в VBA (подчеркивания)
Для продолжения строки используются два символа: пробел и после него символ подчеркивания.
Я распространил приложение Excel для многих пользователей. На некоторых ком пьютерах процедуры обработки VBA не работают. Почему?
Процедуры обработки ошибок не работают, если была выбрана опция Break on All Errors (Останавливаться при любой ошибке). Эта опция находится в диалоговом окне Options (Параметры) вкладки General (Общие) в окне VBE. К сожалению, эту настрой ку нельзя изменить средствами VBA.
Процедуры
Чем отличается процедура VBA от макроса?
Ничем. Термин макрос “пришел” из ранней эпохи развития электронных таблиц. Эти термины в настоящее время являются взаимозаменяемыми.
29 Зак. 3107
882 |
Часть VII. Дополнительные темы |
Что такое процедура?
Процедура — это набор операторов VBА, который можно вызвать по имени. Если операторы должны возвратить явный результат (например, значение) процедуре, которая их вызывала, то эта процедура называется функцией и объявляется как F u n c tio n . В противном случае процедура объявляется как Sub.
Что такое переменный тип данных?
Переменные, тип данных которых явно не определен, получают переменный тип дан ных ( V a ria n t) . При использовании таких переменных VBA автоматически изменяет тип переменной в соответствии с присвоенным значением. Это особенно полезно при получении значений из рабочего листа, так как заранее неизвестно, что содержится в ячейках. Рекомендуется явно объявлять тип переменной. Для этого используются опе раторы Dim, P u b lic и P r iv a t e . Применение переменных типов данных замедляет ра боту приложения и вызывает неэффективное использование ресурсов памяти.
Чем отличается массив переменного типа от массива значений переменного типа?
Ячейка памяти переменного типа может содержать любой тип данных: единственное значение или массив значений (массив переменного типа). Следующий код создает пе ременную, которая содержит массив, включающий три элемента.
Dim |
X As V a ria n t |
X = |
A r r a y (30, 40, 50) |
В обычном массиве могут находиться элементы определенного типа, включая нетипизированные элементы (имеющие переменный тип). Приведенный ниже оператор соз дает массив, который состоит из 3-х элементов переменного типа.
Dim X (0 То 2) As V a ria n t
Несмотря на то что массив элементов переменного типа и массив, представленный переменной типа V a r ia n t , концептуально отличаются, способ доступа к элементам массива остается таким же.
Что такое символ определения типа?
В VBA можно добавить к имени переменной символ, который будет указывать тип этой переменной. Например, можно объявить переменную M yVar, имеющую тип целого числа (integer). Для этого к имени переменной добавляется символ %:
Dim MyVar%
Ниже приведен список символов определения типа, которые поддерживаются в VBA:
•I n t e g e r — %;
•Long — &;
•S in g le — !;
•D o u b le — #;
•C u rre n c y —
•S t r i n g — $.
Символы определения типа включены в целях обеспечения совместимости. Обычно для объявления переменных используются зарезервированные слова.
Глава 31. Часто задаваемые вопросы о программировании в Excel |
883 |
Требуется создать процедуру, которая автоматически выполняет форматирование, зависящее от вводимых данных. Например, если вводится значение, большее 0, цвет фона ячейки становится красным. Возможно ли это?
Конечно, и для этого не обязательно программировать. Воспользуйтесь командой Excel Условное форматирование (Conditional Formatting), доступ к которой открыва ется в раскрывающемся списке кнопки Условное форматирование (Conditional For matting), находящейся в группе Стили (Styles) вкладки Главная (Ноте).
Команда условного форматирования весьма полезна, но хотелось бы выполнять при вводе данных в ячейки и другие операции
Рекомендуем воспользоваться событием C h a n g e объекта рабочего листа. Как только будут внесены изменения в какую-либо из ячеек, возникнет событие C h a n g e . Если мо дуль кода объекта S h e e t (Лист) содержит процедуру W o r k s h e e t _ C h a n g e , то при воз никновении события она будет выполняться автоматически.
Какие другие типы событий можно контролировать ?
Огромное количество! Интерактивное справочное руководство содержит полный список доступных событий.
Я создал процедуру обработки события (Sub W orkbookOpen), но она не запускает ся при открытии рабочей книги. В чем ошибка?
Скорее всего, процедура находится не там, где должна быть. Процедуры обработки событий рабочей книги должны располагаться в модуле кода объекта T h is W o r k b o o k (ЭтаКнига). Процедуры обработки событий рабочего листа должны находиться в модуле кода объекта S h e e t (Лист), что отображается в окне Project редактора VBE.
Еще одна причина появления подобной проблемы заключается в том, что в Excel от ключен запуск макросов. Проверьте соответствующие настройки в окне Центр управ ления безопасностью (Trust Center). Для доступа к этому окну используется диалого вое окно Параметры Excel (Excel Options).
Я могу создать процедуру обработки событий для определенной рабочей книги. Мож но ли создать процедуру обработки событий для всех открытых рабочих книг?
Да, но для этого необходимо создать модуль класса. Подробная информация приво дится в главе 19.
Используются ли в VBA те же математические и логические операторы, что и при создании формул в Excel?
Да. Кроме того, в VBA предоставляются дополнительные операторы, которые нельзя ис пользовать в формулах рабочего листа. Эти операторы перечислены в следующей таблице.
Оператор Выполняемые функции
\Деление с остатком
Eqv |
Возвращает значение True, если аргументы формулы одновременно равны |
|
True либо False |
Imp |
Поразрядная логическая импликация на основе двух аргументов (применяется., |
|
относительно редко) |
Is |
Сравнение двух объектов |
Like |
Сравнение строк с поддержкой групповых символов |
Xor |
Возвращает True только в том случае, когда один из аргументов равен True |
884 Часть VII. Дополнительные темы
Как вызвать процедуру, которая находится в другой рабочей книге?
Для этого необходимо воспользоваться методом Run объекта A p p lic a t io n . Пред ставленный далее оператор вызывает процедуру M a c ro l, которая расположена в рабо чей книге P e r s o n a l. x ls b .
Run "P e rs o n a l.x ls b !M a cro l"
Кроме того, можно создать ссылку на другую рабочую книгу. Для этого воспользуй тесь командой Tools'^References (Сервис^Ссылки) редактора VBA. После добавления ссылки можно вызывать процедуры из книги, на которую установлена ссылка, без указа ния имени этой книги.
Я воспользовался VBA для создания нескольких функций и хотел бы применить эти функции в качестве формул рабочего листа, но указывать имя рабочей книги перед названием функции неудобно. Существует ли способ обойти эту проблему?
Да. Преобразуйте рабочую книгу, которая содержит определения функций, в над стройку Excel (XLAM). После открытия надстройки определенные в ней функции можно вызывать, не указывая названия рабочей книги.
Кроме того, если вы создадите ссылку на рабочую книгу, которая содержит опреде ленные пользователем функции, то функцию также можно будет использовать без указа ния названия рабочей книги. Чтобы создать ссылку, необходимо воспользоваться коман дой Tools1^ References (Сервис^Ссылки) редактора VBE.
Возможно ли, чтобы определенная рабочая книга загружалась каждый раз, когда запускается Excel? Желательно также, чтобы при запуске Excel автоматически выполнялся макрос из этой рабочей книги
Почему бы и нет? Для того чтобы открыть рабочую книгу автоматически, сохраните ее в папке \X L S ta r t . Чтобы автоматически запускать макрос из этой рабочей книги, создай те процедуру W orkbook_O pen в модуле кода объекта T h is W o rk b o o k (ЭтаКнига).
У меня есть рабочая книга, в которой находится процедура Workbook_Open. Су ществует ли способ предотвратить автоматический запуск этой процедуры при открытии рабочей книги?
Да. Удерживайте клавишу <Shift> при выборе команды Файл^Открыть (File^Open). Для того чтобы предотвратить выполнение процедуры W orkbook_BeforeClose, удер живайте клавишу <Shift> при закрытии рабочей книги. Использование клавиши <Shift> не позволяет предотвратить запуск этих процедур при открытии надстройки.
Может ли процедура VBA получить доступ к значению ячейки в неоткрытой рабо чей книге?
VBA не в состоянии это сделать, но вы сможете достичь поставленной цели с помо щью языка XLM. К счастью, XLM можно вызывать из VBA. Ниже приведен простой пример получения значения ячейки А1 из листа Лист1 рабочей книги myf i l e . x l s x , которая находится в папке с : \ f i l e s .
MsgBox E xe cuteE xcel4 M a cro ( " ' с : \ f i l e s \ [ m y f i l e . x ls x ] JIH C T I ' !R1C1")
Обратите внимание на то, что ячейка идентифицируется в формате R1C1.
Глава 31. Часто задаваемые вопросы о программировании в Excel |
885 |
Как предотвратить отображение сообщения о необходимости сохранения рабочей книги при ее закрытии с помощью VBA?
Можно воспользоваться следующим оператором:
A ctive W o rkb o o k . Close SaveChanges: =False
Вы также вправе установить значение свойства S aved объекта W o rkbo ok равным T ru e . Для этого воспользуйтесь таким оператором:
A ctive W o rkb o o k . Saved = True
При его выполнении файл не сохраняется, поэтому после закрытия рабочей книги все несохраненные изменения будут утеряны.
Более универсальным решением по отмене сообщений в Excel будет использование следующего оператора:
A p p lic a tio n .D is p la y A le r ts = F alse
Обычно после закрытия файла свойству D is p la y A le r ts присваивается значение T rue .
Как сделать так, чтобы макрос запускался регулярно в определенное время?
Для этого необходимо воспользоваться методом OnTim e объекта A p p lic a t io n . Это позволяет указать процедуру, которая будет выполняться в определенное время су ток. Когда процедура завершает свою работу, необходимо еще раз воспользоваться ме тодом OnTim e, чтобы запланировать следующий вызов.
Как сделать так, чтобы макрос не отображался в списке макросов?
Для предотвращения отображения макроса в диалоговом окне Макрос (Macro) (отображается в результате выполнения команды Вид^ Макросы^Макросы (View1^ Macros1^Macro)) объявите процедуру с помощью ключевого слова P r iv a te .
P riv a te Sub M yMacro()
Также можно добавить необязательный аргумент определенного типа данных.
Sub MyMacro (O p tio n a l FakeArg as Long)
Существует ли возможность сохранения диаграммы в файле формата GIF?
Да. Приведенный ниже код сохраняет первую встроенную диаграмму рабочего листа Лист1 в виде файла формата GIF с названием M y c h a rt .g if .
Set C u rre n tC h a rt = S h e e ts ( "Л и ст1 ") . C h a rtO b je c ts ( 1 ) . C ha rt Fname = ThisW orkbook. P ath & " \M y c h a r t. g if"
C u rre n tC h a rt. E xp o rt F ile n a m e := Fname, F ilte rN a m e : ="G IF"
Доступны ли переменные одной процедуры VBA другим процедурам VBA? Что если процедура находится в другом модуле или даже в другой рабочей книге?
В данном случае речь идет об области действия переменной. Существует три типа действия: локальная, в пределах модуля и общедоступная (глобальная). Локальные пере менные имеют самую узкую область действия и объявляются внутри процедуры. Ло кальная переменная используется только в пределах процедуры, в которой она объявле на. Переменные с областью действия уровня модуля объявляются в начале модуля, до объявления первой процедуры. Переменные с областью действия уровня модуля исполь зуются во всех процедурах, которые определены в этом модуле. Общедоступные пере менные имеют самую широкую область действия и объявляются с помощью ключевого слова P u b lic .
