Excel VBA для изменения цвета границ - только видимые границы - PullRequest
2 голосов
/ 23 июня 2019

У меня есть форма Excel, границы которой выделены черным цветом. Я хотел бы изменить его на другой цвет. Я попробовал следующий код:

ActiveSheet.UsedRange.Borders.Color = RGB(255, 0, 0)

Он изменил границы всех ячеек, включая те, у которых не было границ, на красный. Это не то, что я хочу. Я хочу, чтобы эти границы черного цвета стали красными, а невидимые границы - невидимыми. Есть ли способ сделать это?

Ответы [ 3 ]

2 голосов
/ 23 июня 2019

Просто еще один способ ведения дел с использованием свойств FindFormat и ReplaceFormat.

Sub BordersReplace()

With ThisWorkbook.Sheets(1)
    For X = xlEdgeLeft To xlEdgeRight
        With Application.FindFormat.Borders(X)
            .Color = 0
        End With
        With Application.ReplaceFormat.Borders(X)
            .Color = 255
        End With
        .Cells.Replace What:="", Replacement:="", searchformat:=True, ReplaceFormat:=True
        Application.FindFormat.Clear
        Application.ReplaceFormat.Clear
    Next X
End With

End Sub

Небольшой цикл, необходимый для прохождения соответствующего перечисления XLBordersIndex.

Примечание. Если не очистить FindFormat и ReplaceFormat, Excel продолжит работус первым используемым форматом, следовательно, почему .Clear является необязательным.

Я сам немного озадачен тем, почему он не будет работать с ячейками со всеми ребрами на его границах.Для этого используйте Application.FindFormat.Borders()

1 голос
/ 23 июня 2019

Спасибо за ввод Mikku, я получил следующий код для работы.

Sub change_border_color()

'change the color of existing borders
Dim cell As Range

Application.ScreenUpdating = False

For Each cell In ActiveSheet.UsedRange

If cell.Borders(xlEdgeLeft).LineStyle = 1 Then
    cell.Borders(xlEdgeLeft).Color = RGB(0, 0, 255)
End If

If cell.Borders(xlEdgeTop).LineStyle = 1 Then
    cell.Borders(xlEdgeTop).Color = RGB(0, 0, 255)
End If

If cell.Borders(xlEdgeBottom).LineStyle = 1 Then
    cell.Borders(xlEdgeBottom).Color = RGB(0, 0, 255)
End If

If cell.Borders(xlEdgeRight).LineStyle = 1 Then
    cell.Borders(xlEdgeRight).Color = RGB(0, 0, 255)
End If

Next

Application.ScreenUpdating = True

End Sub
0 голосов
/ 23 июня 2019

Используйте это:

Цикл будет работать нормально. В настоящее время вы устанавливаете полный диапазон и изменяете его границу, это нужно делать только с ячейками, имеющими любое значение.

Этот цикл будет окрашивать Border Red, если ячейка в данный момент имеет какую-либо границу.

For Each cel In ActiveSheet.UsedRange

    If Not cel.Borders(xlEdgeLeft).LineStyle = 0 Then

        cel.Borders.Color = RGB(255, 0, 0)

    End If

Next

Этот цикл закрашивает границы, где у cel есть какое-то значение.

For Each cel In ActiveSheet.UsedRange

    If Not cel.Value = "" Then
        cel.Borders.Color = RGB(255, 0, 0)
    End If

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