MS Excel VBA:每个打印页面周围的边框

时间:2015-02-01 09:02:01

标签: excel excel-vba vba

我在下面的VBA代码中添加了excel(MS Excel 2013)工作表打印页面的边框,但我得到的错误代码如下:“运行时错误'1004':应用程序定义或对象定义的错误”。调试突出显示了块引号中的行。我该如何解决这个问题?

Sub Create_Borders_Around_Pages()
    Dim rngBorder As Range
    Dim lngLastRow As Long
    Dim lngLastCol As Long
    Dim lngHPBreak As Long
    Dim lngVPBreak As Long
    Dim lngRow As Long
    Dim lngCol As Long
    Dim rngAC As Range

    With ActiveSheet
        Set rngAC = ActiveCell
        lngLastRow = .UsedRange.Cells(.UsedRange.Rows.Count, 1).Row
        lngLastCol = .UsedRange.Cells(1, .UsedRange.Columns.Count).Offset(1, 0).Column
        .Cells(lngLastRow + 1, 1).Activate

        lngRow = 1
        For lngVPBreak = 1 To .VPageBreaks.Count
            lngCol = 1
            For lngHPBreak = 1 To .HPageBreaks.Count
                Set rngBorder = .Range(.Cells(lngRow, lngCol), _
                .Cells(.HPageBreaks(lngHPBreak).Location.Row - 1, .VPageBreaks(lngVPBreak).Location.Column - 1))
                rngBorder.BorderAround xlContinuous, xlThick
                lngRow = .HPageBreaks(lngHPBreak).Location.Row
            Next

            Set rngBorder = .Range(.Cells(lngRow, lngCol), .Cells(lngLastRow, .VPageBreaks(lngVPBreak).Location.Column - 1))
            rngBorder.BorderAround xlContinuous, xlThick

            lngCol = .VPageBreaks(lngVPBreak).Location.Column
        Next
        lngRow = 1
        For lngHPBreak = 1 To .HPageBreaks.Count
  

设置rngBorder = .Range(.Cells(lngRow,lngCol),_                   .Cells(.HPageBreaks(lngHPBreak).Location.Row - 1,lngLastCol))

            rngBorder.BorderAround xlContinuous, xlThick
            lngRow = .HPageBreaks(lngHPBreak).Location.Row
        Next
        Set rngBorder = .Range(.Cells(lngRow, lngCol), .Cells(lngLastRow, lngLastCol))
        rngBorder.BorderAround xlContinuous, xlThick
        rngAC.Activate
    End With
End Sub

1 个答案:

答案 0 :(得分:0)

除非工作表中没有VPageBreaks,否则代码工作正常。

变量lngCol仅在For lngVPBreak = 1 To .VPageBreaks.Count循环中设置,因此如果没有vPageBreaks,则它不会被设置。

因此,Set rngBorder行在语句的.Cells(lngRow, lngCol)部分失败,列值为0。

建议你在这个循环之外的地方设置lngCol = 1吗?