Элемент управления VBA Image отвечает за добавление на поверхность формы изображения. Сам компонент довольно просто, и все его свойства интуитивно понятны, поэтому, в этой статье я сосредоточусь только на написании кода.
У самого объекта Image VBA есть свойство Picture, которое хранит доступ к рисунку. Для загрузки изображения мы будем использовать функцию VBA LoadPicture, который в качестве параметра мы будем передавать путь к изображению.
Что бы показать пример использования компонента VBA Image проделаем следующие действия. Сначала войдите в редактор VBA (для быстроты, можно использовать комбинацию клавиш Alt + F11). Добавим в проект новую форму (меню InsertUserForm), назовем ее ImageForm (свойство Name). Также добавим в проект новый модуль и назовем его ImageModule (свойство Name).
В редакторе кода для модуля пропишем:
Sub ImageModule() ImageForm.Show EndSub |
Тут мы прописываем процедуру ImageModule, которая предоставляет наш модуль. В теле процедуры мы говорим, что при вызове текущего макроса нужно показать форму с именем ImageForm.
Теперь надо отформатировать внешний вид формы. Добавим на поверхность компонент vba Image, под ним разместим компонент Label, а в самом низу разместим две кнопки (компонент CommandButton). Внешний вид формы можно увидеть на рисунке ниже.
Теперь настал самый интересный момент в плане программирования. В редакторе кода для формы пропишите следующий код:
' Глобальная переменная Dim i As Integer ' Процедура получения доступа к каталогу с файлами Private Sub GetFolders() Dim FSO As Object, Drive As Object, GetFiles As Object Dim j As Integer j = 1 ' формируем ссылку на объект FileSystemObject Set FSO = CreateObject("Scripting.FileSystemObject") ' получаем доступ к папке с рисунками Set Drive = FSO.GetFolder("C:\WINDOWS\Web\Wallpaper\") ' VBA Image ' фрмируем коллекцию каталогов Set GetFiles = Drive.Files ' Если значение i больше количества файлов If i > GetFiles.Count Then i = i - 1 End If ' Если значение i меньше количества файлов If i < 1 Then i = i + 1 End If ' Начинаем перебор файлов For Each OFiles In GetFiles If j = i Then Image1.Picture = LoadPicture(OFiles.Path) Label1.Caption = OFiles.Path End If j = j + 1 Next End Sub Private Sub CommandButton1_Click() i = i - 1 Call GetFolders End Sub Private Sub CommandButton2_Click() ' VBA Image i = i + 1 Call GetFolders End Sub Private Sub UserForm_Initialize() CommandButton1.Caption = "Назад" CommandButton2.Caption = "Вперед" Label1.Caption = "Путь к рисунку" ImageForm.Caption = "Работа с объектом VBA Image" End Sub |
В самом начале мы объявляем переменную i, которая является глобальной. Она нужна нам как счетчик, и будет хранить количество нажатий на кнопки. Процедура GetFolders отвечает за доступ к каталогу C:\WINDOWS\Web\Wallpaper\, в котором хранятся файлы-рисунки, используемые операционной системой для обоев. В вашем случае, путь может отличаться. В цикле for each происходит обработка всех файлов в заданной папке, там же происходит проверка условия – мы сравниваем значение переменной i и переменной j (данная переменная хранит номер обрабатываемого файла). По сути, условие нужно для того, что бы мы могли пролистывать рисунки из папки.
Процедуры CommandButton1_Click и CommandButton2_Click отвечают за обработку нажатий на кнопки, расположенные на форме. В обеих процедурах происходит вызов процедуры GetFolders(), разница лишь в том, что в CommandButton1_Click происходит уменьшение значения i, а в CommandButton2_Click – происходит увеличение значения переменной i.
Процедура UserForm_Initialize выполняется сразу при запуске формы, тут мы прописали заголовок формы, названия кнопок и начальное значение для метки (Label).
В итоге, при запуске макроса перед нами появится форма, при нажатии на кнопки “Вперед” и “Назад” происходит пролистывание рисунков из заданной папки, сам рисунок будет отображаться на поверхности формы (компонент VBA Image). Метка будет хранить путь к рисунку.
Стоит обратить внимание, что я не редактировал параметры отображения (размеры), при желании, вы можете отредактировать код по собственному усмотрению.