ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBA图片写入问题请教老师,谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-6 22:50 | 显示全部楼层 |阅读模式
各位老师大家好!
写入图片问题
我想在K2单元格中输入319655312890,图片自动写入A2,F2,A11,F114个框中,随着K2单元格中号码更换这4个框中的图片也自动更换,(删除旧图片更换新图片)如果换号码不能实现清除旧图片,我在上面用了个“删除图片”按纽,删除后在K2中输入号码又能写入新图片,我的VBA写得差不多了,就是图片同时写入4个框中或清除实现不了!谢谢大家!
我的旧VBA就是在A2, a11中输放319655312890会有图片,请老师试试

Option Explicit

Private Sub Worksheet_Change(ByVal T As Range)
    Dim URow&, myPath$, Pic As Object
    myPath = ThisWorkbook.Path
    URow = Range("b65536").End(xlUp).Row
    On Error Resume Next
   
    If T.Column = 1 And T.Count = 1 _
        And T.Row Mod 9.15 = 2 Then
     Pic.Delete
        Application.EnableEvents = False
        
        ' Me.Unprotect '鎖定代碼
        Me.Shapes("Picture" & T.Row).Delete
        T.Offset(, 0).Select
        Set Pic = ActiveSheet.Pictures.Insert(myPath & "\图片\" & T.Value & ".jpg")
        Pic.ShapeRange.LockAspectRatio = True
        Pic.Name = Split(Pic.Name)(0) & T.Row
        
        With Pic.ShapeRange
            '如果图片高宽比比单元格大,说明图片太高,只需调整图片高度
            If .Height / .Width > T.Offset(, 0).MergeArea.Height / T.Offset(, 0).MergeArea.Width Then
                .Height = T.Offset(, 0).MergeArea.Height
                '调整位置
                .Top = T.Offset(, 0).MergeArea.Top
                .Left = T.Offset(, 0).MergeArea.Left + (T.Offset(, 0).MergeArea.Width - .Width) / 2
            '如果图片高宽比比单元格小,说明图片太宽,只需调整图片宽度
            Else
            .Width = T.Offset(, 0).MergeArea.Width
                '调整位置
                .Left = T.Offset(, 0).MergeArea.Left
                .Top = T.Offset(, 0).MergeArea.Top + (T.Offset(, 0).MergeArea.Height - .Height) / 2
            End If
        End With
        Me.Shapes("Picture" & T.Row).Placement = xlMoveAndSize
        'Me.Protect '鎖定代碼
        
        
        Application.EnableEvents = True
    End If
End Sub



QQ图片20240706224914.png

2024 ZD肖.rar

255.75 KB, 下载次数: 13

图片问题

TA的精华主题

TA的得分主题

发表于 2024-7-7 08:42 | 显示全部楼层
供参考,删除、插入一次完成。
Sub test()
Dim Pic, t, shp As Object
Dim trr, i, ss
Application.ScreenUpdating = False
ss = ActiveSheet.[k2].Value   '编码
trr = Array("A2", "F2", "A11", "F11")
For i = 0 To UBound(trr)
    Set t = ActiveSheet.Range(trr(i))
    For Each shp In ActiveSheet.Shapes
            If shp.Name = "Picture" & t.Row & t.Column Then shp.Delete
    Next
    t.Select
    Set Pic = ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\图片\" & ss & ".jpg")
    Pic.ShapeRange.LockAspectRatio = True
    Pic.Name = Split(Pic.Name)(0) & t.Row & t.Column
   
    With Pic.ShapeRange
        '如果图片高宽比比单元格大,说明图片太高,只需调整图片高度
        If .Height / .Width > t.MergeArea.Height / t.MergeArea.Width Then
            .Height = t.MergeArea.Height
            '调整位置
            .Top = t.MergeArea.Top
            .Left = t.MergeArea.Left + (t.MergeArea.Width - .Width) / 2
        '如果图片高宽比比单元格小,说明图片太宽,只需调整图片宽度
        Else
        .Width = t.MergeArea.Width
            '调整位置
            .Left = t.MergeArea.Left
            .Top = t.MergeArea.Top + (t.MergeArea.Height - .Height) / 2
        End If
    End With
    ActiveSheet.Shapes("Picture" & t.Row & t.Column).Placement = xlMoveAndSize
Next
Application.ScreenUpdating = True
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-7 09:15 | 显示全部楼层
附件忘记了,可以自动改,也可以按按钮。

2024 ZD陈.zip

24.87 KB, 下载次数: 15

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-7 11:09 | 显示全部楼层
圖片帶入指定單元格範圍..by,准提部林
2024 ZD_v01.rar (360.9 KB, 下载次数: 14)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-8 19:48 | 显示全部楼层
longwin 发表于 2024-7-7 09:15
附件忘记了,可以自动改,也可以按按钮。

longwin老师您好

感谢您的帮助,现在实现一大半,就是有时候不灵,还好您做了个临时替补,不然有点慌!非常感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-8 19:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
准提部林 发表于 2024-7-7 11:09
圖片帶入指定單元格範圍..by,准提部林

感谢准提部林领导
您这个图片抽非常灵活,非常好!谢谢!
维一的就是"A2", "F2", "A11", "F11"的图,我加了个黑框图片可能会压到,您感觉不美观,就给我固定大小缩在框内,我想请您帮我变回原来的,随图的比例不变形写满"A2", "F2", "A11", "F11"框中,高达到了就随高,宽达到了就随宽,因为这个框有时会调大小的,黑框我可以去掉的!谢谢!

应该是这段!
With Pic.ShapeRange
        '如果图片高宽比比单元格大,说明图片太高,只需调整图片高度
        If .Height / .Width > t.MergeArea.Height / t.MergeArea.Width Then
            .Height = t.MergeArea.Height
            '调整位置
            .Top = t.MergeArea.Top
            .Left = t.MergeArea.Left + (t.MergeArea.Width - .Width) / 2
        '如果图片高宽比比单元格小,说明图片太宽,只需调整图片宽度
        Else
        .Width = t.MergeArea.Width
            '调整位置
            .Left = t.MergeArea.Left
            .Top = t.MergeArea.Top + (t.MergeArea.Height - .Height) / 2
        End If
    End With

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-9 15:54 | 显示全部楼层
请有空的大师也帮我看看,沉底了

TA的精华主题

TA的得分主题

发表于 2024-7-9 16:37 | 显示全部楼层
东方胜 发表于 2024-7-8 19:58
感谢准提部林领导
您这个图片抽非常灵活,非常好!谢谢!
维一的就是"A2", "F2", "A11", "F11"的图,我 ...

自行調試吧!!!
             If .Width > .Height Then
                If .Width > xA.Width Then .Width = xA.Width
             End If
             If .Height > .Width Then
                 If .Height > xA.Height Then .Height = xA.Height
             End If

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-9 17:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
准提部林 发表于 2024-7-9 16:37
自行調試吧!!!
             If .Width > .Height Then
                If .Width > xA.Width Then .W ...

老师您好!

我加进去试了一下,我把框加大,没效果呀!没有随我框自动放大呀!这个应该是以宽到位的!
微信图片_20240709165756.png

2024 ZD_v011.rar

251.87 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2024-7-10 11:32 | 显示全部楼层
只能選一邊//同寬或同高
2024 ZD_v02.rar (509.82 KB, 下载次数: 10)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 01:26 , Processed in 0.052890 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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