Программное создание границ ячеек произвольного диапазона с помощью кода VBA Excel. Свойство Borders объекта Range. Создание границ одной ячейки. Код макроса.
Программное создание границ ячеек
Если записать макрос добавления границ к ячейкам какого-нибудь диапазона, то в тексте макроса будет сгенерировано очень много строк с указанием различных параметров. Создать сетку из границ ячеек с параметрами «по умолчанию» можно гораздо проще.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
'Для этого необходима всего одна строка: Range("A1:G7").Borders.LineStyle = True 'Вместо ключевого слова True можно 'использовать константу xlContinuous: Range("A1:G7").Borders.LineStyle = xlContinuous 'Кроме того, для создания границ ячеек можно 'использовать единственную строку с указанием 'какого-нибудь параметра, например, 'для создания сетки из синих границ: Range("A1:G7").Borders.Color = vbBlue 'или для создания сетки из границ в виде двойных линий: Range("A1:G7").Borders.LineStyle = xlDouble 'Чтобы применить при создании границ два 'параметра, придется использовать уже две 'строки кода, например, для создания сетки 'из границ в виде жирных красных линий: Range("A1:G7").Borders.Weight = xlThick Range("A1:G7").Borders.Color = vbRed 'Удалить границы можно с помощью строки: Range("A1:G7").Borders.LineStyle = False 'Вместо ключевого слова False можно 'использовать константу xlNone: Range("A1:G7").Borders.LineStyle = xlNone |
Создание границ одной ячейки
Создать границы ячейки (только для одной ячейки) в VBA Excel можно следующим образом:
1 2 3 4 5 6 |
Range("A5").Borders.LineStyle = True Cells(2, 8).Borders.Color = vbBlue ActiveCell.Borders.LineStyle = xlDouble 'Удаление границ: ActiveCell.Borders.LineStyle = False |
Пример кода записанного макроса
Запись макроса: включаем запись, выбираем диапазон «A1:E9», на панели инструментов выбираем значок «Все границы», останавливаем запись. И это все наши выполненные действия, а в результате получаем следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
Sub Макрос1() Range("A1:E9").Select 'Отображается левая граница диапазона With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With 'Отображается верхняя граница диапазона With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With 'Отображается нижняя граница диапазона With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With 'Отображается правая граница диапазона With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With 'Отображаются внутренние вертикальные линии With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With 'Отображаются внутренние горизонтальные линии With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With End Sub |
Конечно, можно использовать в своих программах код, сгенерированный при записи макроса, который будет прекрасно работать. Вот только нужны ли в самописном коде такие нагромождения лишних строк?
Макросы можно и нужно использовать, когда вы не знаете название нужного свойства или его значения, а после записи макроса открываете модуль и все перед глазами. Это касается не только создания границ ячеек, но и всех остальных случаев, когда предполагаемые действия можно записать с помощью макроса.
Создание и удаление диагональных линий
Диагональные линии не относятся к границам ячеек, но принцип работы с ними тот же. Отличие заключается в том, что для отображения и удаления диагональных линий, их необходимо указывать явно:
1 2 3 4 5 6 |
'Создание диагональных линий: Range("A1:G7").Borders(xlDiagonalDown).LineStyle = True Range("A1:G7").Borders(xlDiagonalUp).LineStyle = True 'Удаление диагональных линий: Range("A1:G7").Borders(xlDiagonalDown).LineStyle = xlNone Range("A1:G7").Borders(xlDiagonalUp).LineStyle = xlNone |
Расположение границ ячеек и диапазонов
Расположение границ по краям и внутри ячеек и диапазонов описывают константы из коллекции XlBordersIndex.
Список констант XlBordersIndex:
Константа | Значение | Описание |
---|---|---|
xlDiagonalDown | 5 | Диагональная линия от верхнего левого угла к нижнему правому углу в каждой ячейке диапазона. |
xlDiagonalUp | 6 | Диагональная линия от нижнего левого угла к правому верхнему углу в каждой ячейке диапазона. |
xlEdgeBottom | 9 | Граница по нижнему краю диапазона. |
xlEdgeLeft | 7 | Граница по левому краю диапазона. |
xlEdgeRight | 10 | Граница по правому краю диапазона. |
xlEdgeTop | 8 | Граница по верхнему краю диапазона. |
xlInsideHorizontal | 12 | Горизонтальные границы для всех ячеек в диапазоне, за исключением внешних границ диапазона. |
xlInsideVertical | 11 | Вертикальные границы для всех ячеек в диапазоне, за исключением внешних границ диапазона. |
1 2 3 |
'Отображаем у выделенной ячейки нижнюю границу с толщиной и стилем по умолчанию (xlThin и xlContinuous) ActiveCell.Borders(xlEdgeBottom).LineStyle = True ActiveCell.Borders(xlEdgeBottom).LineStyle = 1 |
Толщина границ ячеек и диапазонов
Толщину границ по краям и внутри ячеек и диапазонов описывают константы из коллекции XlBorderWeight.
Список констант XlBorderWeight:
Константа | Значение | Описание |
---|---|---|
xlHairline | 1 | Очень тонкая граница |
xlThin | 2 | Тонкая граница (по умолчанию) |
xlMedium | -4138 | 3* | Граница средней толщины |
xlThick | 4 | Толстая граница |
* У меня, в Excel 2016, константе xlMedium соответствует не только числовое значение -4138, но и 3.
1 2 |
'Отображаем у выделенной ячейки нижнюю границу в виде толстой линии ActiveCell.Borders(xlEdgeBottom).Weight = xlThick |
Стили границ (типы линий)
Стили границ по краям и внутри ячеек и диапазонов описывают константы из коллекции XlLineStyle.
Список констант XlLineStyle:
Константа | Значение | Описание |
---|---|---|
xlContinuous | 1 | Непрерывная линия |
xlDash | -4115 | Штриховая линия |
xlDashDot | 4 | Чередование точек и тире |
xlDashDotDot | 5 | Чередование двух точек и тире |
xlDot | -4118 | Пунктирная линия |
xlDouble | -4119 | Двойная линия |
xlLineStyleNone | -4142 | Нет границы (удаление границы) |
xlSlantDashDot | 13 | Линия, разрезанная двойными слешами |
Применяем разные типы линий к разным сторонам выделенного диапазона:
1 2 3 4 5 6 7 8 9 |
Sub Primer() With Selection .Borders(xlEdgeTop).LineStyle = xlDash .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeRight).LineStyle = xlDouble .Borders(xlEdgeBottom).LineStyle = xlDot .Borders(xlEdgeLeft).LineStyle = xlDashDot End With End Sub |
Какие могут быть границы в сочетаниях типа линии и ее толщины, вы можете видеть в диалоговом окне «Формат ячеек» на вкладке «Граница».
Удалить границы можно с помощью строки:
обратите внимание, что диагональные линии этим способом не удаляются
Вы правы, для удаления диагональных линий, их необходимо указывать явно:
Спасибо
Здравствуйте!
А как правильно создавать границы для именованных диапазонов?
Я пока только понял, как их выделять
[диапазон].Select
или
Range("диапазон").Select
и работать уже с выделением, что, на мой взгляд, неправильно.
Спасибо!
Здравствуйте!
Можно ли программно выбирать константу. Например вставить i в Range.Borders(i) и таким образом пробежаться или выбрать границу (верхнюю, левую и т. д.).
Добрый вечер, Андрей!
Можно создать массив с константами или использовать их числовые индексы:
Спасибо!
Создал вот такую процедурку. Может кому пригодится.
Обсуждение закрыто.