当前位置: 首页 > 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.lryc.cn/news/450872.html

相关文章:

  • 解决GitHub下载速度慢
  • 【机器学习(五)】分类和回归任务-AdaBoost算法
  • 【设计模式-模板】
  • 小程序原生-列表渲染
  • JAVA认识异常
  • 2024年10月计划(工作为主,Ue5独立游戏为辅,)
  • 并发、并行和异步设计
  • 求职Leetcode题目(12)
  • 【YashanDB知识库】如何配置jdbc驱动使getDatabaseProductName()返回Oracle
  • Hadoop三大组件之MapReduce(一)
  • SQL Server 分页查询的学习文章
  • 告别PDF大文件困扰!4款PDF在线压缩工具助你轻松优化!
  • Find My汽车钥匙|苹果Find My技术与钥匙结合,智能防丢,全球定位
  • mysql学习教程,从入门到精通,SQL UNION 运算符(27)
  • PKCE3-PKCE实现(SpringBoot3.0)
  • C++详解vector
  • Redis实战--Redis的数据持久化与搭建Redis主从复制模式和搭建Redis的哨兵模式
  • World of Warcraft [CLASSIC] Engineering 421-440
  • VUE3.5版本解读
  • spark计算引擎-架构和应用
  • VUE 开发——AJAX学习(二)
  • 机器学习-KNN分类算法
  • 云计算 Cloud Computing
  • 【算法】DFS 系列之 穷举/暴搜/深搜/回溯/剪枝(上篇)
  • 怎么绕开华为纯净模式安装软件
  • CentOS7 离线部署docker和docker-compose环境
  • Vue 自定义组件实现 v-model 的几种方式
  • Python Pandas数据处理效率提升指南
  • 最大正方形 Python题解
  • ubuntu中软件的进程管理-结束软件运行