- •Содержание
- •Алгоритмизация и программирование vba введение
- •1 Макросы
- •На панели быстрого запуска
- •2. Алгоритмизация
- •2.1 Алгоритм. Общие сведения.
- •Форма записи алгоритма на естественном языке
- •2.3 Графическая форма записи алгоритма
- •2.4 Правила оформления схем алгоритмов
- •2.5 Основные этапы подготовки и решения задачи на компьютере
- •2.6 Постановка задачи. Разработка математической модели
- •Складских помещений
- •Равным плану d в виде блок-схемы
- •Массива по строкам
- •3 Язык программирования
- •Функции InputBox
- •Воды предприятием и номера месяца с минимальным расходом в виде блок-схемы
- •Программирование на vba в microsoft office
- •4.1 Программирование на vba в Excel
- •(Для наглядности выделен)
- •В нём активной ячейки
- •В формуле ячейки
- •Change объекта WorkSheet
- •4.2 Программирование на vba в Word
- •4.3 Программирование на vba в PowerPoint
- •«Элементы управления»
- •5 Технология организации, хранения и обработки данных
- •5.1 Общие сведения
- •5.2 Листинг программы
- •5.3 Алгоритм программы
- •5.4 Результат работы
- •Список использованных источников
В нём активной ячейки
При необходимости можно использовать и прямое указание адреса активизируемой ячейки — например, тот же результат даст замена третьей строки предыдущего примера на:
Range("С4").Activate
Прежде чем выполнять какие-либо операции с выделением, обычно следует убедиться, что текущее выделение содержит именно тот тип объектов, который предполагается обрабатывать в программе. Если программа предпримет попытку работать с выделением как с ячейками, когда в действительности выделенной является диаграмма, это приведёт к возникновению ошибки. Для предотвращения подобных ситуаций в VBA имеется функция TypeName, которая возвращает строку, определяющую тип объекта выделения. На основании полученного от нее значения с помощью структур If...Then или Case... Select можно выяснить, какие из действий допускается применять к выделенному в данный момент объекту.
В приведенном ниже примере выражение TypeName (Selection) в операторе Select (вторая строка кода) возвращает строку, содержащую тип объекта текущего выделения. Данная строка затем проверяется серией операторов Case, чтобы установить, является ли текущее выделение диапазоном (в этом случае в его ячейки помещается значение 2012) или областью диаграммы (в этом случае для выделения устанавливается красный цвет). Если же выделение в текущий момент вовсе отсутствует, пользователю выводится сообщение об отсутствии выделения. Также предусмотрен вывод соответствующего сообщения для случая, когда выделение не принадлежит ни одному из перечисленных выше типов.
With Selection
Select Case TypeName(Selection)
Case "Range" ' Это диапазон ячеек
.Value = 2012
Case "ChartArea" ' Это диаграмма
.Interior.Colorlndex = 3
Case "Nothing"
MsgBox "Ничего не выделено"
CaseElse
MsgBox "Выделение допустимого объекта!"
End Select
End With
Использование диалоговых окон Excel
Приложение Excel предлагает программисту на языке VBA те же самые возможности работы с его диалоговыми окнами и их элементами, что и любое другое приложение пакета Office 2007. Безусловно, отображение окон не потребуется, если обращение к Excel из VBA-программы осуществляется как к скрытому приложению. Вполне возможны ситуации, когда работа с приложением Excel должна быть явной, чтобы пользователь мог получить доступ к диалоговым окнам и различным имеющимся в них инструментам.
В VBA-программах можно использовать для своих целей множество диалоговых окон, имеющихся в приложении Excel. Доступ к этим окнам осуществляется через коллекцию Dialogs, которая является свойством объекта Application. Для использования некоторого диалогового окна прежде всего нужно создать ссылку на это диалоговое окно.
Dim Диалог As Dialog
Set Диалог = Dialogs(Тип_окна)
Здесь аргумент Тип_окна определяет конкретное диалоговое окно, доступ к которому требуется получить. В библиотеке типов Excel содержится список предопределенных констант в форме xlDialogXXXX, где хххх определяет конкретное диалоговое окно. В большинстве случаев (но не во всех) имя хххх связано с именем соответствующего диалогового окна в английской версии приложения. Например, константа xlDialogOpen определяет диалоговое окно открытия файла. Когда диалоговое окно имеет вкладки, константа приобретает вид xlDialogXXXXyyyy, где хххх определяет диалоговое окно, а уууу — его отдельную вкладку. Так, константа xlDialogFormatNumber определяет вкладку «Число» диалогового окна «Формат ячеек».
После того как ссылка на требуемое диалоговое окно получена, для его отображения можно использовать метод Show этого объекта. Синтаксис его следующий.
Окно.Show(Аргументы)
Здесь набор параметров Аргументы определяется типом открываемого окна. Иногда никаких аргументов не требуется, а в других случаях передаваемые открываемому окну аргументы обязательны и определяют исходное состояние открываемого диалогового окна. Набор и краткое описание аргументов метода Show диалоговых окон можно найти на странице справочной системы редактора VBA в Excel, если в ее строку поиска ввести значение Built-In Dialog Box Argument Lists.
Следует отметить, что изменения и любые действия, выполненные пользователем в открытом диалоговом окне, вступают в силу автоматически, обычным способом. Ваша программа сама должна получить информацию о внесенных пользователем изменениях, а затем поступить с ними требуемым образом.
Метод Show возвращает значение типа Boolean, определяющее, какая кнопка использована для закрытия окна: True, если пользователь щелкнул на кнопке ОК, и False, если щелчок был сделан на кнопке Отмена (Cancel).
Следующий пример показывает, как открыть из программного кода диалоговое окно Open, а затем проверить, открыл ли пользователь какой-либо файл.
Dim Диалог As Dialog
Dim Кнопка As Boolean
Set Диалог = Application.Dialogs(xlDialogOpen)
Кнопка = Диалог.Show
If Кнопка Then
MsgBox ("Файл открыт")
Else
MsgBox ("Файл не открыт")
End If
В этом случае, если в раскрывшемся диалоговом окне пользователь выберет некоторый файл и щелкнет на кнопке Open, указанный файл будет открыт и метод Show возвратит значение True. В противном случае для закрытия диалогового окна пользователь вынужден будет щелкнуть на кнопке Отмена, и метод возвратит значение False.
В приложении Excel имеется 1101 (!) встроенное диалоговое окно. Информацию о них можно получить с помощью справочной системы редактора VBA, выполнив поиск фразы Built-in Dialog Boxes. Результаты поиска по этой фразе включают множество ссылок на описание доступных в Excel диалоговых окон, а полный перечень всех окон с указанием аргументов их вызова можно увидеть, если перейти по первой ссылке — Built-In Dialog Box Argument Lists.
Программирование пользовательских функций
Использование языка VBA в среде Excel позволяет создавать пользовательские функции, существенно превосходящие по своим возможностям встроенные формулы, которые могут записываться непосредственно в ячейке. Пользовательские функции позволяют проводить как вычисления, так и другие операции, выполнение которых с помощью формул, основанных на использовании встроенных функций Excel, просто невозможно. Даже когда формула, записанная стандартными средствами, дает такой же результат, как и пользовательская функция, последняя все же имеет для пользователя существенные преимущества — например, простота ввода, проверка результатов, понимание принципов работы и т.д. Так, вместо стандартной строки формул, в распоряжение программиста предоставляется целое окно редактирования кода, где можно разбить сложную логическую конструкцию на отдельные элементы, организовать ее поэтапное построение и проверку. Еще одно важное преимущество (которое следует максимально использовать!) состоит в возможности вставки комментариев рядом с тем кодом, к которому они относятся.
Написание пользовательских функций рабочего листа
Пользовательские функции Excel — это в сущности обычные VBA-функции. Текст функции начинается с декларации ее имени и заканчивается оператором End Function. Внутри может присутствовать оператор, присваивающий значение переменной с именем функции, — данное значение как раз и будет возвращать функция при выполнении.
Function SeparatorAvailable()
SeparatorAvailable = Application.DecimalSeparator
End Function
Данная функция просто возвращает символ, который в настоящее время принят в качестве десятичного разделителя в приложении Excel. Поскольку функция получает эту информацию из системы, она не имеет аргументов.
Выполнить функцию в программе — значит использовать стандартную процедуру обращения к функции в языке VBA, т.е. вызвать ее внутри процедуры Sub.
Для того чтобы вставить в рабочий лист значение, возвращаемое созданной вами функцией, следует использовать тот же механизм, который применяется для встроенных функций Excel, — внести имя функции в ячейку после знака равенства. Вслед за именем функции следуют круглые скобки, в которые заключаются требуемые значения аргументов. Скобки необходимы даже в том случае, когда аргументы отсутствуют.
Например: =SeparatorAvailable().
Так же как и встроенные, пользовательские функции могут быть частью более сложной формулы ячейки.
Например: ="Используется десятичный разделитель" & SeparatorAvailable. Результат помещения этой формулы в ячейку рабочего листа показан на рисунке 4.10 (напомним, что приведенное выше определение функции SeparatorAvailable () должно присутствовать в одном из программных модулей, доступных приложению в данный момент.)
Если вы не помните, какие аргументы требуются для функции и принимает ли функция вообще какие-либо аргументы, не стоит беспокоиться, панель формул Excel распознает пользовательские функции и показывает все, что необходимо для каждой из них.
Рисунок 4.10 − Использование пользовательской функции
