VBA 如何实现让所有图片刚好适应所在单元格大小与表框

摘要:
工作量繁重而乏味。有什么办法解决这个问题吗?

Excel疑难千寻千解丛书(三)Excel2010 VBA编程与实践.pdf

VBA 如何实现让所有图片刚好适应所在单元格大小与表框第1张

VBA 如何实现让所有图片刚好适应所在单元格大小与表框第2张

VBA 如何实现让所有图片刚好适应所在单元格大小与表框第3张

VBA 如何实现让所有图片刚好适应所在单元格大小与表框第4张

VBA 如何实现让所有图片刚好适应所在单元格大小与表框第5张

Sub 让图片适应单元格()
    Dim sh As Shape
    Dim sSheet As Worksheet '源工作表
Set sSheet = Worksheets("Sheet1")
    
    For Each sh In sSheet.Shapes
        sh.LockAspectRatio =False
        sh.Left =sh.TopLeftCell.Left
        sh.Top =sh.TopLeftCell.Top
        sh.Width =sh.TopLeftCell.Width
        sh.Height =sh.TopLeftCell.Height
        
    Next sh

End Sub

Sub setpic1()
    Dim p As Shape, d$
    Dim sSheet As Worksheet '源工作表
    Set sSheet = Worksheets("Sheet1")

    For Each p In sSheet.Shapes
        p.LockAspectRatio =msoFalse
        d =p.TopLeftCell.Address
        p.Height =Range(d).Height
        p.Width =Range(d).Width
        p.Top =Range(d).Top
        p.Left =Range(d).Left
    Next
End Sub

缺陷:VBA代码多次运行时,图片会移动到其他单元格,不推荐使用


二、插入指定图片到选中的单元格并适应大小

推荐使用

Sub 插入指定图片到选中的单元格并适应大小()
    Dim filenames As String
    Dim filefilter1 As String

    filefilter1 = ("所有图片文件(*.jpg;*.bmp;*.png;*.gif),*.jpg;*.bmp;*.png;*.gif")
    filenames = Application.GetOpenFilename(filefilter1, , "请选择一个图片文件", , MultiSelect:=False)
    
    '没有选中文件时,做容错处理
    If filenames = "False"Then
        Exit Sub
    End If
    
    '插入图片到指定的单元格
Sheet1.Pictures.Insert(filenames).Select

    '图片自适应单元格大小
On Error Resume Next
    Dim picW As Single, picH As Single
    Dim cellW As Single, cellH As Single
    Dim rtoW As Single, rtoH As Single
    
    cellW =ActiveCell.Width
    cellH =ActiveCell.Height
    picW =Selection.ShapeRange.Width
    picH =Selection.ShapeRange.Height
    rtoW = cellW / picW * 0.95rtoH = cellH / picH * 0.95
    If rtoW <rtoH Then
        Selection.ShapeRange.ScaleWidth rtoW, msoFalse, msoScaleFromTopLeft
    Else
        Selection.ShapeRange.ScaleHeight rtoH, msoFalse, msoScaleFromTopLeft
    End If
    
    picW =Selection.ShapeRange.Width
    picH =Selection.ShapeRange.Height
    Selection.ShapeRange.IncrementLeft (cellW - picW) / 2Selection.ShapeRange.IncrementTop (cellH - picH) / 2
End Sub

来自:

https://blog.csdn.net/yinming4u/article/details/49120933


三、excel 批量插入图片且自适应单元格(绝对有效)

https://www.jianshu.com/p/04e462ad4065

1.情景展示

工作中,我们可能会遇到这种情况,需要将拍摄的照片批量插入到excel中
,出现的问题在于:
我们不仅需要将其一个一个的插入到对应的单元格中,还需要将其缩放至合适大小。

VBA 如何实现让所有图片刚好适应所在单元格大小与表框第6张

工作量很大且繁琐,有没有办法能够解决这个问题呢?

2.解决方案

实现方式:通过宏命令实现。
第一步:先插入第一张图片(一般情况下,批量导入的图片大小是一致的);
如上图所示,将图片调整至合适大小;

VBA 如何实现让所有图片刚好适应所在单元格大小与表框第7张

第二步:按照图片将单元格调至合适大小,删除该图片;
选中要插入图片的单元格,将其大小调整至和刚才图片的大小一致。

VBA 如何实现让所有图片刚好适应所在单元格大小与表框第8张

第三步:鼠标选中要插入第一张图片的单元格;

VBA 如何实现让所有图片刚好适应所在单元格大小与表框第9张

第四步:ALT+F11-->打开VBA编辑器-->插入-->模块;

VBA 如何实现让所有图片刚好适应所在单元格大小与表框第10张

将下列代码拷贝至弹出的窗口:

Sub 批量插入图片且自适应单元格()

    Dim fileNames As Variant
    Dim fileName As Variant
    Dim fileFilter As String

    '所有图片文件后面的括号为中文括号
    fileFilter = ("所有图片文件(*.jpg;*.bmp;*.png;*.gif),*.jpg;*.bmp;*.png;*.gif")
    fileNames = Application.GetOpenFilename(fileFilter, , "请选择要插入的图片", , MultiSelect:=True)

    '循环次数
Dim i As Single
    i = 0
    '忽略错误继续执行VBA代码,避免出现错误消息(数组fileNames为空时,会报错)
On Error Resume Next
    '循环插入
For Each fileName In fileNames

        '将图片插入到活动的工作表中&选中该图片
With ActiveSheet.Pictures.Insert(fileName).Select

            '图片自适应单元格大小
Dim picW As Single, picH As Single
            Dim cellW As Single, cellH As Single
            Dim rtoW As Single, rtoH As Single
            '鼠标所在单元格的宽度
            cellW =ActiveCell.Width
            '鼠标所在单元格的高度
            cellH =ActiveCell.Height
            '图片宽度
            picW =Selection.ShapeRange.Width
            '图片高度
            picH =Selection.ShapeRange.Height
            '重设图片的宽和高
            rtoW = cellW / picW * 0.95rtoH = cellH / picH * 0.95If rtoW <rtoH Then
                Selection.ShapeRange.ScaleWidth rtoW, msoFalse, msoScaleFromTopLeft
            Else
                Selection.ShapeRange.ScaleHeight rtoH, msoFalse, msoScaleFromTopLeft
            End If
            picW =Selection.ShapeRange.Width
            picH =Selection.ShapeRange.Height
            '锁定图片锁定纵横比
            Selection.ShapeRange.LockAspectRatio =msoTrue
            '图片的位置与大小随单元格变化而变化
            Selection.Placement =xlMoveAndSize
            '设置该图片的所在位置
            Selection.ShapeRange.IncrementLeft (cellW - picW) / 2 + cellW *i
            Selection.ShapeRange.IncrementTop (cellH - picH) / 2End With
        i = i + 1
    '下一个
Next fileName

End Sub

第五步:按F5运行;
选中你要插入的图片--》打开;

VBA 如何实现让所有图片刚好适应所在单元格大小与表框第11张

3.效果展示

VBA 如何实现让所有图片刚好适应所在单元格大小与表框第12张

4.扩展说明

4.1 代码说明

VBA 如何实现让所有图片刚好适应所在单元格大小与表框第13张

将图片设置为横向排列,代码如下:

'设置该图片的所在位置(图片横向排列)
Selection.ShapeRange.IncrementLeft (cellW - picW) / 2 + cellW * i
Selection.ShapeRange.IncrementTop (cellH - picH) / 2

将图片设置为纵向排列,代码如下:

'设置该图片的所在位置(图片纵向排列)
Selection.ShapeRange.IncrementLeft (cellW - picW) / 2
Selection.ShapeRange.IncrementTop (cellH - picH) / 2 + cellH * i

将图片插入到同一位置,代码如下:

'设置该图片的所在位置(图片位于同一位置)
Selection.ShapeRange.IncrementLeft (cellW - picW) / 2
Selection.ShapeRange.IncrementTop (cellH - picH) / 2

4.2 技巧说明
选中图片,同时按住Shift键和方向键,可以实现对图片的缩小、放大;
选中图片,同时按住Ctrl键和方向键,可以实现对图片的位置的进行微调。

免责声明:文章转载自《VBA 如何实现让所有图片刚好适应所在单元格大小与表框》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CVE20211732 LPE漏洞分析Assimp里的一些知识(1)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Navicat 11.2最新功能,你都get了吗?

Navicat 是一套数据数据库管理工具,最近Navicat升级了新版本,最新版本为11.2,对11.1 版本存在的 bug 进行了优化。Navicat 11 版本新增 100 多个功能,是致力于数据库管理的专业级别软件,使工作更有效率、更容易。 Navicat Cloud Navicat for MySQL 提供 Navicat Cloud 云服务,可以...

vba遍历指定的文件夹

Sub filelist() Dim MyName, Dic, Did, i, t, F, TT, MyFileName 'On Error Resume Next Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseF...

python操作Excel模块openpyxl

1、 安装 pip install openpyxl 想要在文件中插入图片文件,需要安装pillow,安装文件:PIL-fork-1.1.7.win-amd64-py2.7.exe · font(字体类):字号、字体颜色、下划线等 · fill(填充类):颜色等 · border(边框类):设置单元格边框 · alignment(位置类):对齐方式 · ...

Jquery实现鼠标双击Table单元格变成文本框,输入内容并更新到数据库

JS鼠标双击事件 onDblClick  <td width="10%" title="双击修改" ondblclick="ShowElement(this,<%#Eval("id") %></td>  这里的本人用绑定的值是传的当前行对应的ID号, function ShowElement(element, prod...

报表工具怎么制作带有时间轴的记录表?

想要制作一个时间轴记录事件的报表,通过报表工具要怎么制作呢?该怎么制作时间轴呢?下面我们就以润乾报表为例制作两种类型的时间轴记录表,具体看下如何实现。 简洁版时间轴 1. 增加数据集,将需要记录的时间和事件取到。 时间和事件数据我从 EXCEL 文件中读取,数据如下图所示: 报表设计器下新建一张报表,然后在“报表”菜单——数据集,中增加文件数据集。...

VBA二次学习笔记(3)——批量合并单元格

说明(2018-9-16 22:17:49): 1. 昨天运动会,100米八个人跑了第五,400米五个人跑了第三,得了个榨汁机。终于结束了哈哈哈!之前一个星期紧张的天天拉肚子,真是没出息。。不过养成了每天跑步的习惯,早上跑个1000米美滋滋~心率也从100多降到了60多,不过这也降得太快了吧,才跑了三个礼拜。。 2. 代码: Sub text()...