办公门户网站模板下载,上海商城网站制作公司,简述网站建设的,查公司备案网站备案信息VBA应用程序开发过程中#xff0c;经常需要处理用户选中的单元格区域#xff0c;有的应用场景中#xff0c;需要限制用户选中区域位于同一页中#xff08;以打印预览显示的分页划分#xff09;#xff0c;但是VBA对象模型中并没有提供相应的接口#xff0c;用于快速查询…VBA应用程序开发过程中经常需要处理用户选中的单元格区域有的应用场景中需要限制用户选中区域位于同一页中以打印预览显示的分页划分但是VBA对象模型中并没有提供相应的接口用于快速查询单元格位于哪个打印页面中那么只能自己动手丰衣足食了。
示例代码如下。
Function IsOnMultiPg(ByRef rRng As Range)Dim rData As Range, HPB As HPageBreakDim beforeC As Range, afterC As RangeIsOnMultiPg FalseIf rRng.Cells.Count 1 Then Exit FunctionSet rData rRng.EntireRowFor Each HPB In ActiveSheet.HPageBreaksSet afterC HPB.LocationSet beforeC afterC.Offset(-1, 0)If Not ((Intersect(afterC, rData) Is Nothing) Or (Intersect(beforeC, rData) Is Nothing)) ThenIsOnMultiPg TrueExit ForEnd IfNext
End Function【代码解析】 第4行代码设置函数默认返回值为False即没有跨页。 第5行代码判断参数rRng包含的单元格个数如果是单个单元格那么退出函数函数返回值为False。 第6行代码获取指定单元格区域所在的行区域。 注意为了简化示例代码本过程仅仅检测单元格区域是否跨越行分页符使用类似的方法可以实现检测单元格区域是否跨越列分页符。 第7~14行代码循环遍历行分页符。 第8行代码获取行分页符之下的单元格例如我的电脑打开示例文件其第一个分页符位于54行和55行之间各位读者系统默认打印机的设置将影响分页符的位置可能与我的并不相同那么HPB.Location返回值为A55。 第9行代码获取行分页符之上的单元格。 第10行代码判断afterC和beforeC是否和rData单元格区域都有交集。 如果满足上述条件第11行代码设置返回值为True。 第12行代码退出循环过程。
测试代码如下。
Sub Demo()Dim r As RangeFor Each r In Range(A50:D54,A50:D66).AreasIf IsOnMultiPg(r) ThenDebug.Print r.Address(0, 0) : 跨页ElseDebug.Print r.Address(0, 0) : 没有跨页End IfNext
End Sub【立即窗口】中输出结果如下
A50:D54: 没有跨页
A50:D66: 跨页