【发布时间】:2018-05-16 21:19:00
【问题描述】:
我的工作簿中有 50 张工作表。表头范围是 A:Z。数据范围因工作表而异。我得到了 VBA 代码,它在非空单元格上设置了边框,但数据中的某些字段为空白。有人可以帮忙写剧本吗?
以下是我尝试修改以应用于所有工作表的代码,但徒劳无功:
Sub testborder()
Dim rRng As Range
Set rRng = Sheet1.Range("A14:K14" & endrow)
'Clear existing
rRng.Borders.LineStyle = xlNone
'Apply new borders
rRng.BorderAround xlContinuous
rRng.Borders(xlInsideHorizontal).LineStyle = xlContinuous
rRng.Borders(xlInsideVertical).LineStyle = xlContinuous
End Sub
使用以下代码解决:
Sub AllWorksheetBorders()
Application.ScreenUpdating = False 'Prevents screen refreshing
Dim lngLstCol As Long, lngLstRow As Long, ws As Worksheet
Dim rngCell As Range, r As Long, c As Long
For Each ws In ActiveWorkbook.Worksheets
lngLstRow = ws.UsedRange.Rows.Count
lngLstCol = ws.UsedRange.Columns.Count
For Each rngCell In ws.Range("A21:A" & lngLstRow)
If rngCell.Value <> "" Then
r = rngCell.Row
c = rngCell.Column
With ws.Range(ws.Cells(r, c), ws.Cells(r, lngLstCol)).Borders
.LineStyle = xlContinuous 'Setting style of border line
.Weight = xlThin 'Setting weight of border line
.ColorIndex = xlAutomatic 'Setting colour of border line
End With
End If
Next
Next
Application.ScreenUpdating = True 'Enables screen refreshing
End Sub
【问题讨论】:
-
您说“所有工作表”,但您的代码没有尝试循环所有工作表。并且代码中没有引用一些正在使用的变量。需要更多代码。您的“问题”非常简单,只需一个简单的 For 循环即可获取所有工作表、获取最后使用的行并应用边框。我强烈建议您花一些时间学习 VBA for Excel 的基础知识,它将教您如何循环工作表,并且您的问题的答案将很清楚。
-
阅读“尝试修改”,我没有包含我工作的代码。它现在包括在内。我能够解决这个问题。 P.S - 请询问缺失的信息,而不是对问题投反对票;)
-
很好的编辑,我很高兴你找到了答案。你好像弄错了。在编辑之前阅读您的第一篇文章,您会明白,如果没有稍后添加丢失的数据,感觉就像您要求有人为您编写整个解决方案。因此最初的反对票。
-
是的,对不起。我意识到我的问题没有包括我的努力。
-
发布您对问题的答案也可能对其他有类似问题的人有用,即不作为对问题的编辑。在 2 天内,您可以接受它作为答案。