VBA Excel:是否可以计算命名范围内的水平分页符?

时间:2018-12-19 09:43:54

标签: excel vba

我有很多自动生成的报告,每个报告包含24个命名范围。

每个命名范围都不能通过水平分页符来中断。

我的想法是遍历所有命名范围并计算其中的分页符。

但是我找不到一种方法来计算命名范围内的分页符。

有人知道这是否完全可能吗?

编辑:感谢您的建议。希望我能在圣诞节之前找到时间进行测试,否则我会在一月份回来回答。

3 个答案:

答案 0 :(得分:1)

欢迎来到SO。可以简单地扫描命名范围,然后扫描范围内的行以查找现有的分页符。但是我担心这是一个缓慢的过程,并且可能需要很长时间才能在文件中包含许多长命名的范围。可以根据您的要求进行修改。

Sub test()
Dim Rw As Range
Dim RngStr As String, Nm As Name

    For Each Nm In ThisWorkbook.Names
    RngStr = Nm.Name
        For Each Rw In Range(RngStr).Rows
            If Rw.PageBreak <> xlNone Then
            Debug.Print RngStr & " on " & Range(RngStr).Address(, , , True) & " has a Pagebreak at Row " & Rw.Row
            End If
        Next Rw
    Next Nm

End Sub

答案 1 :(得分:1)

从我对@ VBasic2008答案的评论继续进行,并公然捏住他的Intersect想法,我发现这可行:

Sub CountBreaks()

    Dim nr As Name
    Dim Hpb As HPageBreak
    Dim Vpb As VPageBreak
    Dim h As Long, v As Long

    'May need some method to look at a select number of named ranges.
    For Each nr In ThisWorkbook.Names

        For Each Hpb In nr.RefersToRange.Parent.HPageBreaks
            If Not Intersect(Range(Hpb.Location.Address).EntireRow, _
                             Range(nr.RefersToRange.Address)) Is Nothing Then
                h = h + 1
            End If
        Next Hpb

        For Each Vpb In nr.RefersToRange.Parent.VPageBreaks
            If Not Intersect(Range(Vpb.Location.Address).EntireColumn, _
                             Range(nr.RefersToRange.Address)) Is Nothing Then
                v = v + 1
            End If
        Next Vpb

        MsgBox nr.Name & " has: " & vbCr & _
            h & " horizontal page breaks." & vbCr & _
            v & " vertical page breaks.", vbOKOnly + vbInformation

        h = 0
        v = 0

    Next nr

End Sub

我希望我的工作表资格正确无误-即我认为Range(Hpb.Location.Address)也指的是正确的工作表。

不需要注释中的.PageSetup.PrintArea = nmAddress-只是有问题,因为我的工作表上没有任何数据。

答案 2 :(得分:0)

PB地狱

我建议您首先研究一个命名范围的代码,然后轻松为所有代码创建一个循环。

data = [1,'A',2,'B',3,'C',2,'A',1,'B']

result = {}
for number, letter in zip(data[::2], data[1::2]):
    result.setdefault(letter, []).append(number)

print(result)