Сократить строки кода, необходимые для форматирования ячеек?

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

Вот код, который создаст границу вокруг ячейки 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)) , «Ошибка времени выполнения 13: несоответствие типов».)

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

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

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

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

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

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

  • Доступ к столбцу в массиве VBA
  • Как работать с массивами и отображать их в MsgBox VBA
  • Добавление двух 2D-массивов в Excel VBA
  • Сдвинуть массив на один в vba
  • Лучший способ игнорировать пустые массивы в Python?
  • Избегайте зацикливания через массивы VBA
  • VBA Почему Application.Countif возвращает массив или ошибку 424
  • VBA Хранение нескольких столбцов в массиве во время цикла, а затем возвращаемое значение
  • VBA: автофильтр для строк с частичной структурой
  • Программирование Excel VBA с помощью массивов: передать их или не передавать?
  • Laravel / PHP Excel получает строки до тех пор, пока не вернет пустой массив
  • Давайте будем гением компьютера.