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

使用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 Range
    With 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 With
        For i = firstC.Column To lastC.Column
            If Intersect(sRng, .Columns(i)) Is Nothing Then
                .Columns(i).Hidden = True
            End If
        Next
        Range(firstC, lastC).CopyPicture xlPrinter, xlPicture
        .Range("A18").Select
        .Paste
        .Columns.Hidden = False
    End With
End Sub

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


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


http://www.kler.cn/a/329328.html

相关文章:

  • 软件授权产品介绍
  • (undone) 并行计算学习 (Day2: 什么是 “伪共享” ?)
  • 学习ASP.NET Core的身份认证(基于JwtBearer的身份认证6)
  • python学opencv|读取图像(三十九 )阈值处理Otsu方法
  • 第14篇:从入门到精通:掌握python上下文管理器
  • 我在广州学Mysql 系列——触发器的使用
  • 二、创建drf纯净项目
  • LeetCode 152. 乘积最大子数组
  • TIM(Timer)定时器的原理
  • 深入浅出SpringBoot框架
  • Python 在区块链智能合约开发中的应用与实践
  • 土地规划与区域经济发展:筑基均衡未来的战略经纬
  • MongoDB 工具包安装(mongodb-database-tools)
  • (27)oracle镜像启动
  • 【更新】红色文化之红色博物馆数据集(经纬度+地址)
  • 用Promise实现前端并发请求
  • Win10鼠标总是频繁自动失去焦点-非常有效-重启之后立竿见影
  • Bigemap Pro首发(一款真正全面替代Arcgis的国产基础软件)
  • Linux Mint急救模式
  • 英伟达Ampere架构和Hopper架构技术解析
  • C++(Qt)软件调试---内存调试器Dr.Memory(21)
  • 模拟实战数据落地:MSsql通过存储过程获得销售数据视图
  • Ubuntu20.04中ros2 foxy版本安装gazebo,并运行小车运动demo
  • Java中使用接口实现回调函数的详解与示例
  • C语言、Eazy_X——五子棋
  • 零知识证明在BSV网络上的应用