- •Глава 1. Взгляд на Excel 2007 и vba
- •Окно программы Microsoft Excel 2007
- •Режим конструктора и элементы ActiveX
- •Свойства элемента управления “Кнопка”
- •Элементы управления “Поле” и “Надпись”
- •Сохранение рабочих книг Microsoft Excel
- •Уровень безопасности
- •Процедура, выполняемая при открытии книги
- •Поле со списком и список
- •Изображение
- •Динамическое изменение цвета кнопки
- •Пример вывода информации о текущем времени
- •Полоса прокрутки
- •Динамическое перемещение кнопки
- •Разработка игры
- •Переключатели
- •Основные сведения по vba
- •Заключение по первой главе
Изображение
Разберем еще один пример, который будет связан с новым для нас элементом управления “Изображение”, позволяющим отображать содержание графических файлов. Пиктограмму этого элемента легко найти среди других элементов управления. Кроме обычных свойств у элемента управления “Изображение” есть свойство Picture. Когда вы в окне свойств попытаетесь подобрать для него значение, то автоматически на экране открывается диалоговое окно для выбора файла. В этом случае следует указать один из файлов с графическим изображением (например, файл с расширением bmp или jpg). На рис. 1.34 объект подобного типа размещен на рабочем листе, а в качестве значения его свойства Picture указано имя одного из графических файлов.
Рис. 1.34. Размещение изображения на листе
Перейдем теперь к практической задаче, связанной с рассматриваемым элементом управления. Необходимо сделать так, чтобы при перемещении курсора мыши на данном элементе картинка менялась. А именно, при нахождении курсора мыши в левой части рисунка в окне отображалась одна картинка, а при перемещении мыши в правую половину элемента картинка должна заменяться другой.
Для решения подобной задачи необходимо написать процедуру для обработки перемещения курсора мыши (MouseMove).
Перейдем в редактор программного кода, и в списке объектов выберем Image1 (это имя нашего элемента управления по умолчанию и здесь мы его менять не будем), а в правом списке определим действие, которое нас сейчас интересует — MouseMove (рис. 1.35).
Рис. 1.35. Процедура, выполняемая при перемещении мыши на изображении
Таким образом, в окне редактора программного кода мы выбрали заготовку для процедуры, и нам осталось написать ее содержание. На листинге 1.14 приведена процедура, выполняемая при наведении курсора мыши на область изображения.
Листинг 1.14. Обработка перемещения мыши в области изображения
Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer,
ByVal X As Single, ByVal Y As Single)
If X < Image1.Width / 2 Then
Image1.Picture = LoadPicture("C:\Рис\1.jpg")
Else
Image1.Picture = LoadPicture("C:\Рис\2.jpg")
End If
End Sub
Здесь появились новые конструкции, которые требуют комментария.
Во–первых, X и Y — это координаты курсора мыши, которые автоматически передаются системой в процедуру Image1_MouseMove. Эти переменные располагаются в списке входных параметров, и в тексте процедуры значение одной этих переменных (X) мы используем.
У элемента управления “Изображение” имеется стандартное свойство Width, которое соответствует его ширине. В тексте на листинге используется условие
If X < Image1.Width / 2 Then ,
в котором проверяется — находится курсор мыши левее середины окна рисунка или нет? Если да, то в элемент Image1 выводится файл 1.jpg, а если нет, то файл 2.jpg.
В процедуре на листинге 1.14 используется функция VBA LoadPicture, входным параметром которой является имя графического файла с указанием полного пути, где он располагается. В нашем случае графические файлы с указанными именами располагаются на диске С (если на вашем компьютере другие имена каталога и файлов, то следует входные параметры при вызовах функции LoadPicture изменить).
Таким образом, сформулированное задание требует написания только одной процедуры, что мы уже сделали. Теперь, если перейти в Microsoft Excel и выйти из режима конструктора, то вы увидите, что картинка в окне меняется в зависимости от того, где располагается курсор мыши.
Рассмотрим теперь другую, более интересную в практическом плане, задачу связанную с элементом управления “Изображение”. А именно на листе создадим некий вариант базы данных фотографий сотрудников. Интерфейс готовой разработки показан на рис. 1.36. С помощью кнопки Заполнить список в поле со списком (расположено ниже только что размещенной кнопки) вносятся фамилии сотрудников. Будем считать, что на диске С в каталоге Рис располагаются графические файлы с фотографиями сотрудников. Названия файлов будут совпадать с фамилиями сотрудников (разумеется, со стандартным расширением, отражающем тип графического файла).
На листинге 1.15 приведена процедура, позволяющая заполнить список фамилиями сотрудников, а на листинге 1.16 процедура, позволяющая после этого с помощью щелчка по списку выбрать фотографию определенного сотрудника. Как видно из текста процедур для свойства Name кнопки использовано CommandButton1, для изображения — Image1, а для поля со списком Sp1.
Рис. 1.36. Создание информационной базы фотографий
Листинг 1.15. Процедура заполнения поля со списком щелчком по кнопке
Private Sub CommandButton1_Click()
Sp1.Clear
Sp1.AddItem "Комарова Ю."
Sp1.AddItem "Логинова Н."
Sp1.AddItem "Хайретдинова Э."
End Sub
Листинг 1.16. Процедура для выбора фотографии
Private Sub Sp1_Click()
Image1.Picture = LoadPicture("C:/Рис/" + Sp1.Text + ".jpg")
End Sub
Таким образом, данный пример позволяет вам сформировать свою информационную базу с фотографиями сотрудников.