【问题标题】:Dynamic borders in a Excel WorkbookExcel 工作簿中的动态边框
【发布时间】: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 天内,您可以接受它作为答案。

标签: vba excel


【解决方案1】:

使用以下代码解决:

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

结束子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多