ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 用野路子做了个图片复制并存为图片的函数,但图片质量不高,求大侠拔剑

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-7 18:41 | 显示全部楼层 |阅读模式
本帖最后由 andyleeq 于 2018-9-7 18:45 编辑


用野路子做了个图片复制并存为图片的函数,但图片质量不高,怎么破

以下同代码,能运行,但请大侠指定














Function mycopypict(copyrng As Range, Optional targetrng, Optional pictname As String = "N")
'
' 参数:copyrng 要复制的区域range  ; targetrng 要粘贴到的目标区域 ;range,pictname 要保存的文件名
'
'






Dim mytest, mytt, fd, Xfd As Byte












On Error GoTo err_go1   '判断copyrng是否存在单元格,报错就是没有,野路子
mytest = copyrng.Address




On Error GoTo err_go4
        mytt = Sheets("TOPshow").Range("AJ3").Value    'AJ3 是一个单元格,上面可以写入文件路径到mytt





          If Dir(mytt & "\") = "" Then


               MsgBox (mytt & "\" & "不存在,请检查网络,或重新选择文件夹")



              Set fd = Application.FileDialog(msoFileDialogFolderPicker)    '允许用户选择一个文件夹



                    If fd.Show = -1 Then


                      'On Error Resume Next
                       MsgBox fd.SelectedItems(1)


                        mytt = fd.SelectedItems(1)     '选择之后就记录这个文件夹名称



                    Else



                       Application.EnableEvents = True

                       Application.ScreenUpdating = True



                        Exit Function '否则就退出程序
                    End If

          End If



On Error GoTo err_go2 '判断targetrng是否存在单元格,报错就是没有,野路子

If Not IsMissing(targetrng) Then



     mytest = targetrng.Address

End If




On Error GoTo err_go3



'MsgBox VarType(pictname)


'On Error Resume Next


    Dim ls, ts, w, h As Single

     w = copyrng.Width: h = copyrng.Height


     If pictname = "N" Then pictname = Format(Now(), "yyyymmddhhmm")  '判断pictname 缺省时,用时间为文件名




    With copyrng          '复制区域

        .Parent.Activate

        .CopyPicture



    End With





    'a = Format(Now(), "yyyymmddhhmm")

    If IsMissing(targetrng) Then   '没有粘贴目标区域时,就将左上边界设为0

        ls = 0
        ts = 0

        'Range("zz1").Select

        'MsgBox "no"


       Else

        'MsgBox "tar yes"

                With targetrng         '有粘贴目标区域时,就将左上边界设为区域边界

                   ls = .Left
                   ts = .top

                   .Parent.Activate
                   .Select
                End With



             'delect pict________________________________________将粘贴区域上的现存的图片删除

                For Each shp In ActiveSheet.Shapes
                    Set theCell = shp.TopLeftCell

                    'a1 = shp.Name

                    'a2 = "Rectangle"

                    'a3 = InStr(a1, a2)



                    'If a3 = 1 Then shp.Delete

                    If Not Intersect(targetrng, theCell) Is Nothing Then shp.Delete


                Next shp

           'copy pict________________________________________

                Set theCell = Nothing


    End If

   Set ownshp = ActiveSheet.Pictures.Paste    '在目标区域粘贴第一个图片

   With ActiveSheet.ChartObjects.Add(ls, ts, w, h).Chart   '临时加一个绘图对象并复制,导出,并删除

       .Paste





       .Export mytt & "\" & pictname & ".jpg"


       .Parent.Delete
   End With


If IsMissing(targetrng) Then ownshp.Delete    '如果没有目标对象参数,就将第一个图片也删除


If Not Dir(mytt & "\" & pictname & ".jpg") = "" Then

    MsgBox "成功保存到:" & mytt & "\" & pictname & ".jpg"

   Else

    MsgBox "未保存成功"

End If


Exit Function

err_go1:
MsgBox ("复制区域参数不是RANGE对象")

Exit Function

err_go2:
MsgBox ("粘贴区域参数不是RANGE对象")

Exit Function


err_go3:
MsgBox ("不知名错误")

Exit Function


err_go4:
MsgBox ("文件保存问题")

Exit Function




Exit Function


err_go6:
MsgBox ("not here 6")

Exit Function

End Function

TA的精华主题

TA的得分主题

发表于 2018-9-10 10:40 | 显示全部楼层
这种方式导出的图片质量不会高,如果是2007以上版本的话,修改文件扩展名为.zip,打开修改后的压缩文件,\xl\media\路径下就是工作薄中所有媒体的原始文件

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-10 19:50 | 显示全部楼层
wpxxsyzx 发表于 2018-9-10 10:40
这种方式导出的图片质量不会高,如果是2007以上版本的话,修改文件扩展名为.zip,打开修改后的压缩文件,\x ...

试下,谢谢

TA的精华主题

TA的得分主题

发表于 2018-9-10 20:06 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
andyleeq 发表于 2018-9-10 19:50
试下,谢谢

还有一种思路,把表格另存为html文件,出来的图片和表中图片像素一致!

TA的精华主题

TA的得分主题

发表于 2018-9-10 20:27 | 显示全部楼层
新图片 刚插入文档 是原像素,分辨率支持放大、缩小,
但是保存文档后 图片被压缩,显示多大就是多大。 像素就缩水了 。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-14 03:40 , Processed in 0.020813 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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