Стив Каммингс - VBA для чайников
Private Sub Worksheet_Change(ByVal Target As Range)
For Each oCell In Target
If oCell> 4 And oCell < 11 Then
With oCell.Font
.Bold = True
.Size = 16
.Color = RGB(0, 255, 0) ‘ Зеленый
End With
End If
Next oCell
End Sub
Обратите внимание, что Target может быть не одной ячейкой, а диапазоном, благодаря тому, что операции заливки, удаления и вставки могут применяться одновременно к нескольким ячейкам. Для этого процедура сообщения Change должна включать в себя структуру
For Each ... Next; в таком варианте процедура применима как отдельной ячейке, так и к нескольким ячейкам, что и демонстрирует приведенный выше пример.
В действительности, события Change и Sheet Change могут активизироваться даже тогда, когда значение не изменялось. Данные события готовы произойти, когда пользователь начинает редактирование ячейки (после щелчка в панели формул или нажатия клавиши <F2>), даже если сразу после этого он прекратил редактирование, не внеся никаких изменений (нажав клавишу <Enter>, щелкнув на кнопке Ввод или на рабочем листе). Событие не активизируется, если пользователь прекращает редактирование нажатием клавиши <Esc> или щелчком на кнопке Отмена.
Событие Calculate распознаваемое как объектом Worksheet, так и Chart, происходит при каждом обновлении программой Excel рабочего листа или диаграммы.
Событие Sheet Calculate для объектов Workbook и Application происходит в ответ. Если средство автоматического вычисления включено, данное событие активизируется, как только изменяется значение любой ячейки, т.е. происходит в тандеме с событием Change. Когда средство пересчета включено в ручном режиме, событие Calculate происходит лишь тогда, когда пользователь инициализирует пересчет нажатием клавиши <F9>.
Процедуры событий для событий Calculate и SheetCalculate используются для изменения рабочего листа в соответствии с результатами вычислений. Например, если известно, что пересчет может изменить элементы упорядоченного списка, целесообразно использовать процедуру события Worksheet _Calculate для упорядочения списка после проведения вычислений. Поскольку данные процедуры не сообщают, какая из ячеек изменялась в результате вычислений, необходимо поместить в код адреса ячеек, которые требуется изменить.
При каждом перемещении активной ячейки, а также при расширении или сжатии выделения Excel вызывает событие SelectionChange для Worksheet. Параллельно происходит событие Sheet SelectionChange для объектов Workbook и Application. Процедуры событий для данных событий можно использовать для обратной связи с текущим выделением. В приведенном ниже примере событие Selection Change используется для отображения в левой верхней ячейке текущего листа адреса активной ячейки, а также для помещения имени рабочего листа и адреса выделения в строку состояния. Обратите внимание на то, как аргумент Sh позволяет идентифицировать и вести работу с текущим листом:
Private Sub Workbook Sheet SelectionChange (ByVal Sh As Object, _
ByVal Tarqet As Excel.Range)
Sh.Range("Al") = ActiveCell.Address
Application.StatusBar = Sh.Name & " : " & Target.Address
End Sub
Несколько усложнив код. можно добиться того, чтобы вместо простого выделения вызывался какой-нибудь ответ: например, чтобы в случае попадания определенной ячейки пли диапазона в новое выделение отображалось пользовательское диалоговое окно:
Private Sub Worksheet_SelectionCharge (ByVal Target As Excel.Range)
If Target.Address = "$3$2" Then
MsgBox "Вы нашли нужную ячейку!"
End If
End Sub
Поскольку объекты диаграмм Excel способны распознавать большое число событий, многие из которых связаны с мышкой, их можно считать большим элементом управления ActiveX, помещенным в рабочей книге. Диаграммы распознают события Activate, DeActivate и Calculate. Вот еще некоторые события, для которых возможно написание кодов.
* DragOver и DragPlot. Происходят, когда ячейки перемешаются над внедренной диаграммой или опускаются на нее соответственно.
* MouseDown. MouseUp и MouseMove. Происходят в ответ на действия мыши.
* Select. Происходит при выделении какой-либо части диаграммы. Написанный код может определять тип и характеристики выделенного элемента и проводить соответствуюшие действия.
* Series Change. Происходит, когда пользователь изменяет значение в диаграмме через саму диаграмму (а не изменяя значения, содержащиеся в листе).
Глава 17. Программирование баз данных.
В этой главе ...
~ Знакомство с терминологией
~ Написание кода баз данных с помощью объектов данных ActiveX
~ Программирование с помощью DAO
~ Ускорение с помощью SQL
Несмотря на то, что Access - официальное приложение для работы с базами данных, входящее в состав Office, вы не ограничены только этим приложением при создании пользовательских баз данных с помощью VBA. Действительно, любое приложение, поддерживающее VBA, - от Word до CorelDraw, - позволяет использовать сведения, которые хранятся в базах данных на вашем компьютере, сервере локальной сети или любом другом компьютере в Internet. В настоящей главе мы остановимся на нескольких базовых приемах программирования на VBA, позволяющих управлять данными прямо из ваших собственных VBA-программ.
Программирование баз данных на VBA: основные термины
Прежде чем вы сможете создавать собственный программный код для работы с базами данных, вам следует ознакомиться с основной терминологией. Этому и посвящен материал настоящего раздела.
О ядре баз данных
Программное обеспечение, которое отвечает за выполнение основных действий по извлечению информации, которая содержится в одном или нескольких файлах базы данных, называется ядром базы данных. Ядро базы данных часто называют просто базой данных, хотя согласитесь, что называть программное обеспечение, управляющее информацией в базе данных, и саму базу данных одним термином несколько нелогично.
Хотя эта программа и предназначена для выполнения различных функций с базами данных, Access нельзя назвать ядром базы данных. Access- это "клиент" (front end), который показывает вам, какие именно команды и данные доступны, а также воспринимает ваши инструкции по отношению к информации, такие как ее изменение, добавление или удаление. Все эти инструкции передаются серверной части (back end) СУБД.
Стандартным ядром баз данных для Access является Microsoft Jet. Стандартные файлы баз данных Access (вы всегда сможете определить их по расширению .mdb) на самом деле являются файлами Jet. Работая через Jet, другие инструменты разработки, такие как Visual Basic, могут получить из файлов баз данных все необходимые сведения.
Jet предназначено для обслуживания индивидуальных пользователей и небольших рабочих групп. Для решения более серьезных задач, уровня предприятия, например, предназначены другие ядра баз данных. Сюда относятся еще один программный продукт компании Microsoft - SQL Server, а также предложения от других ведущих поставщиков, таких как Oracle и Informix. Версия SQL Server для разработчика, которая называется SQL Server 2000 Desktop Engine, поставляется в составе Access 2002. Она позволяет вам разрабатывать базирующиеся на технологиях SQL Server приложениях баз данных прямо на своем компьютере, а затем передавать их "настоящей" версии SQL Server, работающей в сети.
В любом случае, всегда можно запутаться, когда дело касается программного обеспечения клиентной и серверной частей СУБД. Работая с Access или любым другим VBА -приложением, вы можете взаимодействовать с различными ядрами баз данных, руководствуясь прежде всего вашими конкретными потребностями. Access предоставляет больше возможностей программисту баз данных, но вы можете использовать Word, CorelDraw или любое другое поддерживающее VBA приложение, и получить при этом не менее превосходные результаты.
SQL и VBA
SQL (Structured Query Language - Язык структурированных запросов) - это общепринятый стандарт организации запросов баз данных (запрос - это команда, которая получает или изменяет информацию, которая содержится в базе данных). Любая система управления данных, будь то Jet или Oracle, поддерживает язык SQL. SQL- это полноправный язык программирования, однако лучше всего он подходит именно для управления базами данных. Вы создаете инструкции SQL для выбора, изменения или удаления определенных наборов записей.
А как же SQL и VBA дополняют друг друга? VBA позволяет передавать ядру базы данных инструкции SQL для их дальнейшей обработки. После обработки инструкций и извлечения необходимого набора записей ядром базы данных вам снова потребуется VBA для отображения и форматирования результатов: SQL при этом не используется.
Все об объектах баз данных
Сам по себе язык VBA не предоставляет никаких средств для доступа к базам данных и манипулирования содержащейся в них информацией. Однако после объединения с библиотекой объектов баз данных VBA тотчас превращается в инструмент для программирования баз данных с очень широкими возможностями.