VBA применяет границу вокруг ячейки, содержащей значение/текст

Мне просто интересно, может ли кто-нибудь помочь мне адаптировать этот код, пожалуйста?

Dim border As Range
Dim brng As Range

Set border = ThisWorkbook.ActiveSheet.UsedRange

For Each brng In border
If Not IsEmpty(brng) Then
brng.BorderAround _
        LineStyle:=xlContinuous, _
        Weight:=xlThin
End If
Next brng

Пожалуйста, посмотрите на картинку ниже, чтобы увидеть, чего я пытаюсь достичь.

Левый снимок экрана — это то, что я сейчас получаю, но я бы хотел, чтобы граница также закрывала пустую ячейку.

Вы говорите, что я хотел бы, чтобы рамка включала пустую ячейку, а ваш код включает If Not IsEmpty(brng) Then. Вы видите связь?

chris neilsen 30.03.2023 11:26

@chrisneilsen Я просто новичок в этом VBA, спасибо, что заметили.

TK4795 30.03.2023 11:33
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
2
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете попробовать что-то вроде этого:

Sub test()
Dim rng As Range

Set rng = ThisWorkbook.ActiveSheet.UsedRange

With rng.Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .Weight = xlThin
End With

With rng.Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .Weight = xlThin
End With

With rng.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .Weight = xlThin
End With

With rng.Borders(xlEdgeRight)
    .LineStyle = xlContinuous
    .Weight = xlThin
End With

With rng.Borders(xlInsideVertical)
    .LineStyle = xlContinuous
    .Weight = xlThin
End With

With rng.Borders(xlInsideHorizontal)
    .LineStyle = xlContinuous
    .Weight = xlThin
End With

End Sub

Более короткая версия кода с числовым индексом констант, показанная в документации по перечислению:

Sub Macro2()
Dim rng As Range
Dim i As Byte

Set rng = ThisWorkbook.ActiveSheet.UsedRange

'enumeration code here: https://learn.microsoft.com/en-us/office/vba/api/excel.xlbordersindex

For i = 7 To 12 Step 1
    With rng.Borders(i)
        .LineStyle = xlContinuous
        .Weight = xlThin
    End With
Next i

End Sub

Хотя с кодом все в порядке. Я столкнулся с другой проблемой, когда у меня 2 таблицы с пустой строкой.

TK4795 30.03.2023 11:50

@ TK4795 Это другой вопрос. Вы никогда не должны заменять свой первоначальный вопрос другим, потому что теперь ответ не имеет смысла. Откройте новый вопрос с этой проблемой и оставьте вопрос таким, каким он был изначально.

Foxfire And Burns And Burns 30.03.2023 12:21

Вы можете протестировать логику, как показано ниже, которая использует свойство CurrentRegion для Range для определения данных смежных ячеек.

Sub ApplyRegionBorders()
    Dim Rg As Range
    '\\ Loop through all cells
    For Each Rg In ActiveSheet.UsedRange
        If Len(Rg.Value) > 0 Then
            '\\ Apply on each separate region
            With Rg.CurrentRegion.Borders
                .LineStyle = xlContinuous
                .Weight = xlThin
            End With
        End If
    Next Rg
End Sub

Другие вопросы по теме