我有很多自动生成的报告,每个报告包含24个命名范围。
每个命名范围都不能通过水平分页符来中断。
我的想法是遍历所有命名范围并计算其中的分页符。
但是我找不到一种方法来计算命名范围内的分页符。
有人知道这是否完全可能吗?
编辑:感谢您的建议。希望我能在圣诞节之前找到时间进行测试,否则我会在一月份回来回答。
答案 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)
我建议您首先研究一个命名范围的代码,然后轻松为所有代码创建一个循环。
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)