Страницы: 1
RSS
Цвет и тип границы ячейки
 
Доброго всем утра!!!  
 
Вручную в Екселе была нарисована таблица.  
 
При печати обнаружилось, что некоторые линии состоят из отрезков с разным оттенком серого цвета или из отрезков с разным типом линии (на взгляд непонятно, то ли это серая линия, то ли пунктирная).  
 
Надо их дорисовать единообразно, но каким цветом или типом линии неизвестно.  
Как узнать цвет границы ячейки и тип её линии?
 
a=Selection.Borders.LineStyle  
b=Selection.Borders.ColorIndex
Я сам - дурнее всякого примера! ...
 
Доброе утро, Сергей!  
А как это вставить в макрос и применить?  
 
Можно ли без макросов просто посмотреть где-то, какой цвет и тип у существующей границы ячейки?
 
Привет, Влад. Без макросов:
Я сам - дурнее всякого примера! ...
 
Макросом, в модуль листа, по двойному клику:  
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  
   Dim a&, b&  
   a = Target.Borders.LineStyle  
   b = Target.Borders.ColorIndex  
   MsgBox "Стиль линии " & a & ",цвет линии " & b  
   Cancel = True  
End Sub
Я сам - дурнее всякого примера! ...
 
Спасибо, это-то я знаю.  
Но когда, например, только правая граница ячейки серым оттенком,  
то как определить каким?    
 
В примере правая граница ячейки нарисована. Она то ли серая, то ли пунктиром, если серая, то насколько (20%, 40%, 60%, 80% чёрного).  
Как определить?
 
Спасибо, Сергей! Полезный макрос.  
Но он показывает окно формат автофигуры для нарисованной линии.  
 
А я говорю о том, когда чертишь линии по границам ячеек (кнопка "Нарисовать границу" на панели инструментов "Граница").  
Там можно цвет и тип линии выбирать. Но как узнать это у уже нарисованной границы?  
 
Вкладка "Границы" в окне "Формат ячеек" показывает цвет и тип границ, заданных форматом, а не нарисованных.
 
Нужно выделить пограничную ячейку, имеющую общую и единственную границу с определяемой ячейкой и уже в форматах подсмотреть цвет. Требуемый цвет будет выделен.
 
{quote}{login=Vlad}{date=19.12.2010 11:23}{thema=}{post}Спасибо, это-то я знаю.  
Но когда, например, только правая граница ячейки серым оттенком,  
то как определить каким?    
 
В примере правая граница ячейки нарисована. Она то ли серая, то ли пунктиром, если серая, то насколько (20%, 40%, 60%, 80% чёрного).  
Как определить?{/post}{/quote}  
b=Selection.Borders(xlEdgeRight).ColorIndex  
Дальше по аналогии.  
"Спасибо, Сергей! Полезный макрос.  
Но он показывает окно формат автофигуры для нарисованной линии." - вот тут совсем ничего не понял. При чем тут автофигуры?
Я сам - дурнее всякого примера! ...
 
Сергей, извини, неточно выразился, не Автофигура, а Линия с панели Рисование.  
 
А kim натолкнул на интересную мысль.  
Поэкспериментировав, понял, что в окне "Формат ячеек" на вкладке "Граница" всегда показывается цвет и тип только ЛЕВОЙ ВЕРТИКАЛЬНОЙ границы ячейки.  
 
А если надо узнать тип и цвет вертикальной границы?
 
Последний вопрос читать:  
 
А если надо узнать тип и цвет горизонтальной границы?
 
Во :-)  
Sub Borders_Info()  
MsgBox "Верхняя граница:" & Chr(10) _  
& vbTab & "Тип линии: " & vbTab & ActiveCell.Borders(xlEdgeTop).LineStyle & Chr(10) _  
& vbTab & "Цвет: " & vbTab & vbTab & ActiveCell.Borders(xlEdgeTop).ColorIndex & Chr(10) _  
& vbTab & "Толщина: " & vbTab & ActiveCell.Borders(xlEdgeTop).Weight _  
& Chr(10) & "Правая граница:" & Chr(10) _  
& vbTab & "Тип линии: " & vbTab & ActiveCell.Borders(xlEdgeRight).LineStyle & Chr(10) _  
& vbTab & "Цвет: " & vbTab & vbTab & ActiveCell.Borders(xlEdgeRight).ColorIndex & Chr(10) _  
& vbTab & "Толщина: " & vbTab & ActiveCell.Borders(xlEdgeRight).Weight _  
& Chr(10) & "Нижняя граница:" & Chr(10) _  
& vbTab & "Тип линии: " & vbTab & ActiveCell.Borders(xlEdgeBottom).LineStyle & Chr(10) _  
& vbTab & "Цвет: " & vbTab & vbTab & ActiveCell.Borders(xlEdgeBottom).ColorIndex & Chr(10) _  
& vbTab & "Толщина: " & vbTab & ActiveCell.Borders(xlEdgeBottom).Weight _  
& Chr(10) & "Левая граница:" & Chr(10) _  
& vbTab & "Тип линии: " & vbTab & ActiveCell.Borders(xlEdgeLeft).LineStyle & Chr(10) _  
& vbTab & "Цвет: " & vbTab & vbTab & ActiveCell.Borders(xlEdgeLeft).ColorIndex & Chr(10) _  
& vbTab & "Толщина: " & vbTab & ActiveCell.Borders(xlEdgeLeft).Weight  
 
End Sub  
=====  
11117
 
...
 
Если нужно справа добавить аналогичную - зачем узнавать? Копируем формат.
 
Константы:  
xlEdgetop - 8  
xlEdgeBottom - 9  
xlEdgeRight - 10  
xlEdgeLeft - 7  
Т.е. можно в цикле проверить цвет и тип всех границ ячейки.
Я сам - дурнее всякого примера! ...
 
Спасибо, Юрий!  
Формат копировать нельзя, т.к. в ячейках разные форматы шрифта, заливки и т.д. (только формат границ и совпадает).  
А формат ведь скопируется весь.  
 
Классный у Вас макрос! Но Тип границы показывает только 1 (есть) или -4142 (нет).  
Да и цвет 16 или 48 или 25 как применить для продолжения линии?  
 
Сергей, а как эти константы применить?
 
{quote}{login=Vlad}{date=19.12.2010 12:28}{thema=}{post}Классный у Вас макрос! Но Тип границы показывает только 1 (есть) или -4142 (нет).{/post}{/quote}  
У меня всё нормально показывает. И не забывайте, что у соседних ячеек могут быть разные границы.
 
Да, спасибо, показывает разные цифры для разных цветов и типов границ ячеек.  
 
Но как их применить для решения моей задачи - сделать такие же горизонтальные границы у ячеек справа, т.е. продлить горизонтальные границы таблицы?
 
Ой, Влад, не пойму чего ты хочешь. Выдели таблицу и выполни это:  
Public Sub www()  
   With Selection.Borders(xlInsideHorizontal)  
       .LineStyle = xlContinuous  
       .Weight = xlThin  
       .ColorIndex = xlAutomatic  
   End With  
   With Selection.Borders(xlInsideVertical)  
       .LineStyle = xlContinuous  
       .Weight = xlThin  
       .ColorIndex = xlAutomatic  
   End With  
End Sub  
 
ColorIndex подставь нужный тебе. Кстати мой макрос ты впинхул в общий модуль, а надо в модуль листа.  
 
31221
Я сам - дурнее всякого примера! ...
 
{quote}{login=Vlad}{date=19.12.2010 12:43}{thema=}{post}как их применить для решения моей задачи - сделать такие же горизонтальные границы у ячеек справа, т.е. продлить горизонтальные границы таблицы?{/post}{/quote}  
Сказать макросу: сделай границы, как у ячейки слева:    
With cells(3,7).Borders(xlEdgeRight)  
       .LineStyle = cells(3,6).Borders(xlEdgeRight).LineStyle    
       .Weight = ...  
       .ColorIndex = ...  
End With  
Или сначала считать с "левой" ячейки эти значения в переменную, а потом "правой" присвоить эти значения.
 
Спасибо, Сергей и Юрий!  
Узнал много нового и полезного благодаря вашим ответам.  
Буду причёсывать и применять.
Страницы: 1
Читают тему
Наверх