Выбор и форматирование границ в VBA - PullRequest
0 голосов
/ 07 января 2020

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

Мой код добавляет только границы для первой и второй строк.

Я дважды использую следующую строку:

Range(Selection, Selection.End(xlDown)).Select 

Вот как выглядит часть таблицы. Обратите внимание, что первая строка является объединенной ячейкой, а во второй строке находятся заголовки таблицы.

Result of code

Application.DisplayAlerts = False
Dim lastCol As Integer
lastCol = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column

For i = 2 To lastCol Step 5

    Range(Cells(1, i), Cells(1, i + 4)).Select

    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent1
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With

    'Add thick borders
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select 'here's where I'm struggling
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThick
    End With
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThick
    End With
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Next i

Application.DisplayAlerts = True

1 Ответ

1 голос
/ 07 января 2020

Изображение выглядит как объект списка (структурированная таблица в Excel). Если это так, вы можете работать непосредственно с табличным объектом в VBA и избежать тонны написания кода и построения логики c.

Dim t as ListObject
Set t = ws.ListObjects("myTable")

Dim i as Long
For i = 1 to t.ListColumns.Count Step 5

    With t.ListColumns(i).Range.Resize(t.ListRows.Count,5).Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThick
    End With

    'same for right border

Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...