Microsoft Excel

трюкиприёмырешения

Как оформить свою информационную базу с фотографиями сотрудников при помощи VBA?

Разберем еще один пример, который будет связан с новым для нас элементом управления «Изображение», позволяющим отображать содержание графических файлов. Пиктограмму этого элемента легко найти среди других элементов управления. Кроме обычных свойств у элемента управления «Изображение» есть свойство Picture. Когда вы в окне свойств попытаетесь подобрать для него значение, то автоматически на экране открывается диалоговое окно для выбора файла. В этом случае следует указать один из файлов с графическим изображением (например, файл с расширением bmp или jpg). На рис. 1.34 объект подобного типа размещен на рабочем листе, а в качестве значения его свойства Picture указано имя одного из графических файлов.

Рис. 1.34. Размещение изображения на листе

Рис. 1.34. Размещение изображения на листе

Перейдем теперь к практической задаче, связанной с рассматриваемым элементом управления. Необходимо сделать так, чтобы при перемещении курсора мыши менялось изображение данного элемента, а именно: при нахождении курсора мыши в левой части элемента отображалась одна картинка, а при перемещении мыши в правую половину элемента — другая. Для решения подобной задачи необходимо написать процедуру для обработки перемещения курсора мыши (MouseMove).

Перейдем в редактор Visual Basic и в списке объектов выберем Image1 (это имя нашего элемента управления по умолчанию, и здесь мы его менять не будем), а в правом списке определим действие, которое нас сейчас интересует, MouseMove (рис. 1.35).

Рис. 1.35. Процедура, выполняемая при перемещении мыши на изображении

Рис. 1.35. Процедура, выполняемая при перемещении мыши на изображении

Таким образом, в окне редактора программного кода мы выбрали заготовку для процедуры, и нам осталось написать ее содержание. В листинге 1.14 приведена процедура, выполняемая при наведении курсора мыши на область изображения.

1
2
3
4
5
6
7
8
9
10
' Листинг 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("С:Рис1.jpg")
Else
Image1.Picture = LoadPicture("С:Рис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.36. Создание информационной базы фотографий

Рассмотрим теперь другую, более интересную в практическом плане задачу, связанную с элементом управления «Изображение». А именно: на листе создадим некий вариант базы данных фотографий сотрудников. Интерфейс готовой разработки показан на рис. 1.36. С помощью кнопки Заполнить список в поле со списком (расположено ниже только что размещенной кнопки) вносятся фамилии сотрудников. Будем считать, что на диске С: в каталоге Рис располагаются графические файлы с фотографиями сотрудников. Названия файлов будут совпадать с фамилиями сотрудников (разумеется, со стандартным расширением, отражающим тип графического файла).

В листинге 1.15 приведена процедура, позволяющая заполнить список фамилиями сотрудников, а в листинге 1.16 — процедура, позволяющая после этого с помощью щелчка на списке выбрать фотографию определенного сотрудника. Как видно из текста процедур, для свойства Name кнопки использовано CommandButton1, для изображения — Image1, а для поля со списком — Sp1.

1
2
3
4
5
6
7
' Листинг 1.15. Процедура заполнения поля со списком по щелчку на кнопке
Private Sub CommandButton1_Click()
Sp1.Clear
Sp1.AddItem "Комарова Ю."
Sp1.AddItem "Логинова H."
Sp1.AddItem "Хайретдинова Э."
End Sub
1
2
3
4
' Листинг 1.16. Процедура для выбора фотографии
Private Sub Sp1_Click()
Image1.Picture = LoadPicture("С:/Рис/" + Sp1.Text + ".jpg")
End Sub

Таким образом, данный пример позволяет вам сформировать свою информационную базу с фотографиями сотрудников.

Top