Свойство Selection объекта Application, которое применяется в VBA для возвращения выбранного объекта на активном листе в активном окне приложения Excel.
Свойство Application.Selection
Если выделить на рабочем листе диапазон «B2:E6», то обратиться к нему из кода VBA Excel можно через свойство Selection объекта Application, например, присвоить выбранный диапазон объектной переменной:
1 2 3 4 5 |
Sub Primer1() Dim myRange As Object Set myRange = Selection MsgBox myRange.Address End Sub |
При использовании свойства Selection в коде VBA Excel указывать объект Application не обязательно. Результат работы кода:
На рабочем листе Excel может быть выбран не только диапазон ячеек, но и другие объекты: рисунок, надпись, диаграмма, элемент управления формы и другие.
Применение функции TypeName
Для программного выбора объекта в VBA Excel используется метод Select, а для определения типа ранее выбранного объекта — функция TypeName.
Выберем диапазон «D5:K9» методом Select и определим тип данных выбранного объекта с помощью функции TypeName:
1 2 3 4 |
Sub Primer2() Range("D5:K9").Select MsgBox TypeName(Selection) End Sub |
В качестве переменной для функции TypeName здесь используется свойство Selection. Результат работы кода:
Следующий пример кода VBA Excel очень хорошо иллюстрирует определение типа выбранного объекта с помощью функции TypeName. Он взят с сайта разработчиков, только в блок Select Case добавлены еще два элемента Case:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub TestSelection() Dim str As String Select Case TypeName(Selection) Case "Nothing" str = "Объект не выбран." Case "Range" str = "Выбран диапазон: " & Selection.Address Case "Picture" str = "Выбран рисунок." Case "ChartArea" str = "Выбрана диаграмма." Case "TextBox" str = "Выбрана надпись." Case Else str = "Выбран объект: " & TypeName(Selection) & "." End Select MsgBox str End Sub |
Если из предыдущей процедуры VBA Excel удалить переводы отдельных типов объектов и учесть, что рабочий лист без выбранного объекта встречается редко, то ее можно значительно упростить:
1 2 3 |
Sub TestSelection2() MsgBox "Выбран объект: " & TypeName(Selection) & "." End Sub |
Пример рабочего листа без выбранного объекта: лист диаграммы, на котором диаграмма не выбрана (выделение снимается кликом по одному из полей вокруг диаграммы). Для такого листа в информационном окне MsgBox будет выведено сообщение: Выбран объект: Nothing.
Свойство Selection при выборе листа
Если метод Select применить к рабочему листу, то свойство Application.Selection возвратит объект, который ранее был выбран на данном листе. Проверить это можно с помощью следующего примера:
1 2 3 4 5 6 7 8 9 |
Sub Primer3() Worksheets(3).Select Select Case TypeName(Selection) Case "Range" MsgBox "Выбран диапазон: " & Selection.Address Case Else MsgBox "Выбран объект: " & TypeName(Selection) & "." End Select End Sub |
Свойство Selection при выборе книги
Выбрать рабочую книгу Excel методом Select невозможно, так как у объекта Workbook в VBA нет такого метода. Но мы можем выбрать книгу, сделав ее активной с помощью метода Activate:
1 2 3 4 5 6 7 8 9 |
Sub Primer4() Workbooks("Книга2.xlsx").Activate Select Case TypeName(Selection) Case "Range" MsgBox "Выбран диапазон: " & Selection.Address Case Else MsgBox "Выбран объект: " & TypeName(Selection) & "." End Select End Sub |
В данном случае, свойство Application.Selection возвратит объект, который ранее был выбран на активном листе активированной книги.
Обычно, свойство Application.Selection используется для работы с выделенным диапазоном ячеек, а для обращения к одной активной ячейке используется свойство Application.ActiveCell.