Мне просто интересно, может ли кто-нибудь помочь мне адаптировать этот код, пожалуйста?
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
Пожалуйста, посмотрите на картинку ниже, чтобы увидеть, чего я пытаюсь достичь.
Левый снимок экрана — это то, что я сейчас получаю, но я бы хотел, чтобы граница также закрывала пустую ячейку.
@chrisneilsen Я просто новичок в этом VBA, спасибо, что заметили.
Вы можете попробовать что-то вроде этого:
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 Это другой вопрос. Вы никогда не должны заменять свой первоначальный вопрос другим, потому что теперь ответ не имеет смысла. Откройте новый вопрос с этой проблемой и оставьте вопрос таким, каким он был изначально.
Вы можете протестировать логику, как показано ниже, которая использует свойство 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
Вы говорите, что я хотел бы, чтобы рамка включала пустую ячейку, а ваш код включает
If Not IsEmpty(brng) Then
. Вы видите связь?