ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 335|回复: 12

[求助] 实现放大缩小图片

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-12-1 15:18 | 显示全部楼层 |阅读模式
点击图片自动实现放大缩小,谢谢
微信截图_20241201151305.png

xiugai.zip

545.24 KB, 下载次数: 27

TA的精华主题

TA的得分主题

发表于 2024-12-1 16:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. ' 以下代码放置在ThisWorkbook模块中
  2. Private Sub Workbook_Open()
  3.     Dim ws As Worksheet
  4.     For Each ws In ThisWorkbook.Worksheets
  5.         Call AdjustPictures(ws)
  6.     Next ws
  7. End Sub

  8. ' 以下代码放置在标准模块中
  9. Sub AdjustPictures(ws As Worksheet)
  10.     Dim shp As Shape
  11.     For Each shp In ws.Shapes
  12.         If shp.Type = msoPicture Then
  13.             ' 4. 图片自动缩放,保持原有比例,自适应单元格大小
  14.             shp.Placement = xlMoveAndSize
  15.             shp.LockAspectRatio = msoTrue
  16.         End If
  17.     Next shp
  18. End Sub

  19. Sub ZoomInPicture()
  20.     Dim shp As Shape
  21.     Set shp = ActiveSheet.Shapes(Application.Caller)
  22.     If shp.Type = msoPicture Then
  23.         ' 获取图片当前的宽度
  24.         Dim currentWidth As Double
  25.         currentWidth = shp.Width
  26.         ' 5. 单击图片,可放大(默认20倍,图片放大最大宽度300磅,避免放大太大不便查看)
  27.         If currentWidth < 300 Then
  28.             shp.Width = currentWidth * 20
  29.         End If
  30.     End If
  31. End Sub

  32. Sub ZoomOutPicture()
  33.     Dim shp As Shape
  34.     Set shp = ActiveSheet.Shapes(Application.Caller)
  35.     If shp.Type = msoPicture Then
  36.         ' 获取图片当前的宽度
  37.         Dim currentWidth As Double
  38.         currentWidth = shp.Width
  39.         ' 6. 再单击放大图片,自动恢复小图
  40.         shp.Width = currentWidth / 20
  41.     End If
  42. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-1 16:34 来自手机 | 显示全部楼层
本帖最后由 朱付安 于 2024-12-1 16:45 编辑
过客fppt 发表于 2024-12-1 16:29


好的,老师我试试,还是出现运行错误

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-1 16:40 来自手机 | 显示全部楼层
朱付安 发表于 2024-12-1 16:34
好的,老师我试试

还是不行,运行错误啊

TA的精华主题

TA的得分主题

发表于 2024-12-1 17:44 | 显示全部楼层
朱付安 发表于 2024-12-1 16:40
还是不行,运行错误啊

何必用代码,图片嵌入单元格之后,双击图片本身就会自动放大了呀

TA的精华主题

TA的得分主题

发表于 2024-12-1 17:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub 图片点击缩放()

    Dim shp As shape
    Dim LastShp As Object
   
    On Error Resume Next

    ' 遍历当前工作表的所有形状
    For Each shp In ActiveSheet.Shapes

        ' 检查形状是否为OLE对象或图片
        If shp.Type = msoLinkedOLEObject Or shp.Type = msoPicture Then
            
            ' 如果形状的OnAction属性为空,则设置为"图片点击缩放"
            If shp.OnAction = vbNullString Then
                shp.OnAction = "图片点击缩放"
            End If

            ' 如果形状的名称与调用者(即当前活动单元格)的形状名称相同
            If shp.Name = ActiveSheet.Shapes(Application.Caller).Name Then
               
                ' 如果形状的AlternativeText为空,则记录其原始高度和宽度
                If shp.AlternativeText = vbNullString Then
                    If Not LastShp Is Nothing Then
                        ' 还原上一个图片的大小
                        LastShp.Height = Split(LastShp.AlternativeText, Chr(28))(0)
                        LastShp.Width = Split(LastShp.AlternativeText, Chr(28))(1)
                        LastShp.AlternativeText = vbNullString
                    End If
                    
                    ' 锁定纵横比并记录图片的原始尺寸
                    shp.LockAspectRatio = msoTrue
                    shp.AlternativeText = shp.Height & Chr(28) & shp.Width
                    
                    ' 缩放图片
                    shp.Height = shp.Height * 1.8 ' 调整此处的倍数以改变缩放比例
                    shp.Width = shp.Width * 1.8
                    shp.ZOrder msoBringToFront
                    
                    ' 记录当前图片作为上一个图片
                    Set LastShp = shp
                Else
                    ' 如果已经记录了图片的原始尺寸,则还原图片大小
                    shp.Height = Split(shp.AlternativeText, Chr(28))(0)
                    shp.Width = Split(shp.AlternativeText, Chr(28))(1)
                    shp.AlternativeText = vbNullString
                End If
            End If
        End If
    Next shp

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-1 18:20 来自手机 | 显示全部楼层
过客fppt 发表于 2024-12-1 17:44
何必用代码,图片嵌入单元格之后,双击图片本身就会自动放大了呀

试了一下,双击图片并不能放大图片

TA的精华主题

TA的得分主题

发表于 2024-12-1 18:24 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lss001 于 2024-12-1 18:26 编辑
朱付安 发表于 2024-12-1 18:20
试了一下,双击图片并不能放大图片

点击放,再点缩
参考一下附件代码!
xiugai.zip (376.41 KB, 下载次数: 39)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-1 18:29 来自手机 | 显示全部楼层
lss001 发表于 2024-12-1 18:24
点击放,再点缩
参考一下附件代码!

好啦老师,谢谢

TA的精华主题

TA的得分主题

发表于 2024-12-1 19:07 | 显示全部楼层
朱付安 发表于 2024-12-1 18:20
试了一下,双击图片并不能放大图片

记错了,但是嵌入后点加号也是放大图片啊
GIF.gif
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-12 05:17 , Processed in 0.061018 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表