判断用户选择的Excel单元格区域是否跨页?

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: 跨页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

题解:洛谷 CF2091E Interesting Ratio

思路推导 我们先对 32 32 32 和 96 96 96 进行二进制拆分。 相同部分(用 α \alpha α 表示): 5 5 5 个 2 2 2。 不同部分(用 β \beta β 表示): 1 1 1 和 3 3 3。 gcd ⁡ ( 32 , 96 ) \gcd(32,9…

linux安装配置PostgreSQL

环境:centos7、SpringBoot、PostgreSQL15 PostgreSQL: Linux downloads (Red Hat family) PostgreSQL安装 1.安装 PostgreSQL Yum 仓库 RPM 包 sudo rpm -ivh https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noar…

docker安装jenkins v2.504.1集群

1 概述 Jenkins是一款开源的、基于Java开发的持续集成(CI)与持续交付(CD)工具,旨在通过自动化构建、测试和部署流程,提升软件开发效率与质量。 ‌ 1.1 核心功能与特点 持续集成与交付‌ Jenkins支持自动化…

5月2日日记

今天看了爸爸推荐的书,叫:“高效能人士的七个习惯” 现在刚看完50页,感觉确实有点东西, 七个习惯分别是: 个人层面1积极主动 2要事第一 3以终为始 社交层面 4知彼解己5 统效综合 6双赢思维 7不断更新 目前还没有…

Aws S3上传优化

上传大约 3.4GB 的 JSON 文件,zip算法压缩后约为 395MB,上传至 S3 效率优化,有一些优化方案可以提高上传速率。下面是几种可能的优化方式,包括选择压缩算法、调整上传方式、以及其他可能的方案。 方案 1. 选择更好的压缩算法 压…

CAD(计算机辅助设计)基础知识点整理

以下是CAD(计算机辅助设计)的基础知识点整理,涵盖核心概念、操作技巧和行业规范,适合新手学习和参考: 一、CAD基本概念 什么是CAD • 利用计算机技术进行设计和绘图的工具,广泛应用于机械、建筑、电子等领…

重构之道:识别并替换不合适使用的箭头函数

1、引言 JavaScript 自 ES6 引入了箭头函数(Arrow Function)后,因其简洁的语法和对 this 的词法绑定机制,迅速成为开发者喜爱的写法之一。然而,并不是所有场景都适合使用箭头函数。 在实际开发中,我们常常会因为追求代码简洁而忽视其潜在问题,例如: this 指向错误不适…

[英语单词] from under

最近在看RCU的资料,读到下面的一句,感觉总是特别怪怪的,就是从单词的组合角度,记录一下。 Use rcu_read_lock() and rcu_read_unlock() to ensure that the structure does not get deleted out from under us。 意思是我们还在使…

Python 中 DAO 层使用泛型的探索

方法一: from types import UnionType from typing import TypeVar, Generic, TypeModelT TypeVar(ModelT)def _new_cls_with_grm_generic_args(cls, __item):new_cls type(f"{cls.__name__}[{__item.__name__}]", (cls,), {})new_cls._grm_generic_ar…

Cesium 环境搭建

一、前提条件 1. **安装 Node.js** - 访问 [Node.js 官方网站](https://nodejs.org/),下载并安装适合你操作系统的版本。Node.js 用于运行本地开发服务器和安装依赖。 2. **安装 Vue CLI** - Vue CLI 是一个用于快速开发 Vue.js 项目的工具。在终端中运行以下…

DarkGS:论文解读与全流程环境配置及数据集测试【基于Ubuntu20.04 】【2025最新实战无坑版!!】

一、背景及意义 DarkGS是一个创新性的研究项目,旨在解决机器人在黑暗或低光照环境中探索的问题。传统的3D重建和视觉定位系统在光照条件不佳时表现不佳,这严重限制了机器人在黑暗环境中的应用,如夜间救援、深海探索或洞穴勘测等场景。 这项工…

(八)RestAPI 毛子(Unit Testing/Integration)

文章目录 项目地址一、Unit Testing1.1 创建X unit 测试项目1. 创建项目目录2. 管理包1.2 创建CreateEntryDtoValidator测试1.3 创建CreateEntryDtoValidator测试二、Integration test2.1 创建Integration test环境1. 安装所需要的包2.2 配置基础设置1. 数据库链接DevHabitWebA…

设计模式--桥接模式详解

桥接模式(bridge pattern) 桥接模式时将抽象部分与它的实现部分分离,使他们可以独立的变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或者接口(interface)模式&…

关于 live555延迟优化之缓存区优化“StreamParser::afterGettingBytes() warning: read”” 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/146354088 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

Vite 动态导入静态资源与自动依赖发现实战解析

一、Vite 动态导入静态资源的实现方案 在 Vite 中,动态加载图片、JSON 等静态资源是高频需求,但动态路径拼接可能导致构建失败或资源未识别。以下结合示例代码,分析三种实现方案: 1. 方案一:new URL 动态路径转换 通…

在matlab中使用UAV123官方toolkits测试自己的数据集

一、前言 最近需要将自己的跟踪代码在自己拍摄的数据集上进行测试,这里我选择使用 UAV123 官方 toolkits 进行配置。首先需要搞清楚这部分代码是如何运行的,精度图和成功率图是如何绘制出来的,然后再将自己的数据集加进去进行测试。 二、UA…

9.idea中创建springboot项目_jdk1.8

9. idea中创建springboot项目_jdk1.8 步骤 1:打开 IntelliJ IDEA 并创建新项目 启动 IntelliJ IDEA。在欢迎界面,点击 New Project(或通过菜单栏 File > New > Project)。 步骤 2:选择 Maven 项目类型 在左侧…

SpringAI实现AI应用-搭建知识库

SpringAI实战链接 1.SpringAl实现AI应用-快速搭建-CSDN博客 2.SpringAI实现AI应用-搭建知识库-CSDN博客 概述 想要使用SpringAI搭建知识库,就要使用SpringAI中的TikaDocumentReader,它属于ETL(提取、转换、加载)框架中的提取&…

内网服务器映射到公网上怎么做?网络将内网服务转换到公网上

如何将内网映射到公网?本地局域网的网络下部署的内网服务地址转换到公网上连接访问是大家比较关注的问题,特别是在无公网IP使用的情况下,很多人不知道怎么做。 在没有公网 IP 的情况下,要将内网映射到公网,以便外网能…

intellij idea最新版git开启Local Changes

习惯了在idea的git插件里,查看项目已修改的文件,但是新版idea默认不展示了,用起来很难受。 参考网上教程开启方法如下: 1. 确保安装Git Modal Commit Interface插件并开启该插件 2. 在Advanced Settings开启Use Modal Commit In…