当前位置: 首页 > news >正文

使用VBA快速生成Excel工作表非连续列图片快照

Excel中示例数据如下图所示。

在这里插入图片描述

现在需要拷贝A2:A15,D2:D15,J2:J15,L2:L15,R2:R15为图片,然后粘贴到A18单元格,如下图所示。

在这里插入图片描述

大家都知道VBA中Range对象有CopyPicture方法可以拷贝为图片,但是如果Range对象为非连续区域,那么将产生1004错误,例如:Range("A2:A15,D2:D15").CopyPicture

示例代码如下。

Sub CopyMultiAreasRange()Dim sRng As Range, firstC As Range, lastC As RangeWith ThisWorkbook.Sheets(2)Set sRng = .Range("A2:A15,D2:D15,J2:J15,L2:L15,R2:R15")Set firstC = sRng.Areas(1).Cells(1)With sRng.Areas(sRng.Areas.Count)Set lastC = .Cells(.Cells.Count)End WithFor i = firstC.Column To lastC.ColumnIf Intersect(sRng, .Columns(i)) Is Nothing Then.Columns(i).Hidden = TrueEnd IfNextRange(firstC, lastC).CopyPicture xlPrinter, xlPicture.Range("A18").Select.Paste.Columns.Hidden = FalseEnd With
End Sub

【代码解析】
第4行代码获取指定单元格范围(一些简称为源数据)。
第5行代码获取源数据的第一个单元格。
第6~8行代码获取源数据的最后一个单元格。
第9~13行代码循环遍历列。
第10行代码判断该列是否与源数据有交叉,如果不存在交叉,那么第11行代码隐藏列。
第14行代码拷贝源数据区域为图片,Range(firstC, lastC)为扩展的连续单元格区域。
第15行代码选中目标单元格。
第16行代码粘贴图片。
第17行代码取消隐藏列。


注意:本示例代码仅适用于多个单列非连续区域,并且每个单元格子区域起始行和结束行都相同的场景,如果非连续区域是其他形式的,大家可以修改代码使用类似的思路实现。


http://www.mrgr.cn/news/38250.html

相关文章:

  • 网页篡改防御方法
  • element-plus中el-table固定列fixed失效问题
  • 在LLMs模型中发现人类的记忆特征
  • nodejs 016: javascript语法——解构赋值({ a, b, c } = {})=>{console.log(“Hello“);}
  • linux编辑文件保存退出的实操讲解
  • 基于SpringCloud的微服务架构下安全开发运维准则
  • 微服务Redis解析部署使用全流程
  • Meta Sapiens 人体AI模型
  • 【设计模式】精通高级行为模式:揭秘状态、中介者及其它模式的深层机制
  • 【宝藏妙招,轻松拿捏!】如何防止U盘资料被复制?U盘文件防拷贝的五种措施!
  • Sharding-JDBC笔记03-分库分表代码示例
  • 【无人机设计与控制】基于蚁群算法的三维无人机航迹规划+无人机路径规划
  • 要想不被控制,就的金钱来买账,老板不是每个人能当的!
  • 2024版最新Wireshark安装使用教程(非常详细)零基础入门到精通,收藏这一篇就够了_wireshark 4.4.0安装要求
  • 【笔记】X射线的衍射方向
  • 98问答网是一个怎样的平台?它主要提供哪些服务?
  • 反转整数。
  • VS开发C++项目常用基础属性配置
  • 自建 Tailscale 的 DERP 节点
  • S2B2C商城对新兴产业的赋能