2015-08-17 2 views
3

Я пытаюсь уменьшить количество строк, необходимых для добавления границ (и другого форматирования) в ячейку.Уменьшить количество строк кода, необходимых для форматирования ячеек?

Вот код, который создает границу вокруг ячейки A1:

Sub test2() 
Dim cel As Range 


Set cel = Range("A1") 
With cel.Borders(xlEdgeTop) 
    .LineStyle = xlContinuous 
    .ColorIndex = 0 
    .TintAndShade = 0 
    .Weight = xlThin 
End With 
With cel.Borders(xlEdgeBottom) 
    .LineStyle = xlContinuous 
    .ColorIndex = 0 
    .TintAndShade = 0 
    .Weight = xlThin 
End With 
With cel.Borders(xlEdgeRight) 
    .LineStyle = xlContinuous 
    .ColorIndex = 0 
    .TintAndShade = 0 
    .Weight = xlThin 
End With 
With cel.Borders(xlEdgeLeft) 
    .LineStyle = xlContinuous 
    .ColorIndex = 0 
    .TintAndShade = 0 
    .Weight = xlThin 
End With 
End Sub 

Как вы можете видеть, эти With блоки занимают некоторое пространство. По какой-то другой причине, кроме того, что мой код «жесткий», и поэтому мне не нужно так много прокручивать, мне было интересно, могу ли я сделать это более компактным. Я думал, используя массив, но он не работает:

Sub test() 
Dim arr() 
Dim i As Integer 
ReDim arr(1 To 4) 
Dim cel As Range 

Set cel = Range("A1") 
arr = Array("xlEdgeTop", "xlEdgeBottom", "xlEdgeRight", "xlEdgeLeft") 
For i = LBound(arr) To UBound(arr) 
With cel.Borders(arr(i)) 
    .LineStyle = xlContinuous 
    .ColorIndex = 0 
    .TintAndShade = 0 
    .Weight = xlThin 
End With 

Next i 
End Sub 

(Примечание: ошибка происходит на линии With cel.Borders(arr(i)), "Run-Time Error '13': Несоответствие типов".)

Anyone есть идеи по сокращению вышеупомянутого, или это то, с чем мне придется жить?

+0

Я не могу думать ничего от моей головы. Для форматирования всегда было много строк кода. – MatthewD

+2

@cyboashu имеет ответ, но FYI 'Array (« xlEdgeTop »,« xlEdgeBottom »,« xlEdgeRight »,« xlEdgeLeft »)' должен быть 'Array (xlEdgeTop, xlEdgeBottom, xlEdgeRight, xlEdgeLeft)' Это числовые константы, а не строки , –

+0

@TimWilliams - ага! Это делает: D Я предполагаю, что такие вещи, как 'xlEnd' и т. Д., Также являются константами и могут использоваться одинаково? – BruceWayne

ответ

1
  1. граничные имена являются константами, просто определяют массив без апострофов.
  2. вы можете обратиться к коллекции целых границ, как один, не указываем границы, так что просто использовать with Selection.borders... (https://msdn.microsoft.com/en-us/library/office/ff837809.aspx)

(два предложения работают независимо друг от друга)

+0

Это ключ, «Пограничные имена - это константы, просто определяйте массив без апострофов». Благодаря! – BruceWayne

3

Если вы просто хотите, черная окантовка (обычно по умолчанию цветовой схемы) это много кода будет делать:

With Selection.Borders() 
.LineStyle = xlContinuous 
End With 

В Selection.Borders() все, что вам нужно это пропустить перечисление. Его дефолт для всех четырех сторон. Остальные свойства, которые вы можете изменить по мере необходимости.

+0

Спасибо за это - я понимаю, что сейчас, но главным образом мой вопрос касался использования массивов с разными константами Excel. Но опять же, это помогает! – BruceWayne

+1

cheers! .......... – cyboashu

Смежные вопросы