ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 截屏后保存为图片的VBA语句

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2015-4-3 14:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
yf_home 发表于 2015-4-1 21:04
有没有办法解决?

如果事先知道是复制单元格区域的话,可以将剪贴板里颜色数据导出后更改边框颜色再保存为文件。

TA的精华主题

TA的得分主题

发表于 2015-4-3 14:21 | 显示全部楼层
wcymiss 发表于 2015-4-3 14:10
如果事先知道是复制单元格区域的话,可以将剪贴板里颜色数据导出后更改边框颜色再保存为文件。

刚刚试了一下,Excel本身自带的粘贴为图片,不会有缺少边框的效果。

TA的精华主题

TA的得分主题

发表于 2015-4-6 19:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 wcymiss 于 2015-4-6 19:22 编辑
yf_home 发表于 2015-4-3 14:21
刚刚试了一下,Excel本身自带的粘贴为图片,不会有缺少边框的效果。


嗯,发现excel自带粘贴的是metafile格式的图片。不过这个效果会在右边和下边多出空白边。。

将3楼代码修改如下(红色部分是修改的地方):

'剪贴板函数
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal Format As Long) As Long

'OLE函数
Private Type Clsid
   Data1 As Long
   Data2 As Integer
   Data3 As Integer
   Data4(0 To 7) As Byte
End Type

Private Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As Long, pclsid As Clsid) As Long

'GDI函数
Private Type GdiplusStartupInput
   GdiplusVersion As Long
   DebugEventCallback As Long
   SuppressBackgroundThread As Long
   SuppressExternalCodecs As Long
End Type

Private Type EncoderParameter
   Guid As Clsid
   NumberOfValues As Long
   type As Long
   value As Long
End Type

Private Type EncoderParameters
   count As Long
   Parameter As EncoderParameter
End Type

Private Const CLSID_JPG As String = "{557CF401-1A04-11D3-9A73-0000F81EF32E}"
Private Const EncoderQuality As String = "{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"

Private Declare Function GdiplusStartup Lib "gdiplus" (token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As Long
Private Declare Function GdiplusShutdown Lib "gdiplus" (ByVal token As Long) As Long
Private Declare Function GdipCreateMetafileFromEmf Lib "gdiplus" (ByVal hEmf As Long, ByVal deleteEmf As Boolean, metafile As Long) As Long
Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal Image As Long) As Long
Private Declare Function GdipSaveImageToFile Lib "gdiplus" (ByVal Image As Long, ByVal filename As Long, clsidEncoder As Clsid, encoderParams As Any) As Long

Sub ClipboardMetafileToJPGFile() '剪贴板中metafile格式图片保存为JPG文件
    Dim hMem As Long
    Dim metafile As Long
    Dim GDI_Token As Long
    Dim GpInput As GdiplusStartupInput
    Dim ReturnValue As Long
    Dim Params As EncoderParameters
    Dim Quality As Long
   
    '获取剪贴板BMP数据的Handle
    OpenClipboard 0&
    hMem = GetClipboardData(14) '获取hemf
    CloseClipboard
    If hMem = 0 Then MsgBox "未找到剪贴板中metafile格式数据": Exit Sub
   
    '初始化GDI+
    GpInput.GdiplusVersion = 1
    ReturnValue = GdiplusStartup(GDI_Token, GpInput)
    If ReturnValue <> 0 Then MsgBox "初始化GDI+失败!": Exit Sub
   
   '创建GDI+的metafile对象
    GdipCreateMetafileFromEmf hMem, False, metafile

   
    'JPG压缩参数设置
    Quality = 50
    With Params
        .count = 1
        With .Parameter
            .Guid = GetEncoderClsid(EncoderQuality)
            .NumberOfValues = 1
            .type = 4
            .value = VarPtr(Quality)
        End With
    End With
    GdipSaveImageToFile metafile, StrPtr("D:\Test\2.jpg"), GetEncoderClsid(CLSID_JPG), Params
   
    GdipDisposeImage metafile
    GdiplusShutdown GDI_Token
End Sub

Private Function GetEncoderClsid(CLSIDString As String) As Clsid
    CLSIDFromString StrPtr(CLSIDString), GetEncoderClsid
End Function

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-4-7 07:57 | 显示全部楼层
wcymiss 发表于 2015-4-6 19:21
嗯,发现excel自带粘贴的是metafile格式的图片。不过这个效果会在右边和下边多出空白边。。

将3楼代 ...

测试了一下,13楼代码确实弥补了左边与上边缺少边框的异常。
但也正如你所说,右边和下边的边框确实是粗了一些,不过应该没关系了。

想问一下吴姐,只能保存为JPG图片格式吗?
如果可以在保存对话框选项中,自定义格式就最好了。
比如:png,GIF,bmp,TIF,JPG,JPEG ..... 等等.

.

TA的精华主题

TA的得分主题

发表于 2015-4-7 11:49 | 显示全部楼层
本帖最后由 wcymiss 于 2015-4-7 12:06 编辑
yf_home 发表于 2015-4-7 07:57
测试了一下,13楼代码确实弥补了左边与上边缺少边框的异常。
但也正如你所说,右边和下边的边框确实是粗 ...


楼主要求的是jpg,所以我只写了jpg图片的保存。事实上,BMP、GIF、PNG图片的保存比JGP要简单,TIFF格式要复杂些。

TA的精华主题

TA的得分主题

发表于 2015-4-7 12:35 | 显示全部楼层
wcymiss 发表于 2015-4-7 11:49
楼主要求的是jpg,所以我只写了jpg图片的保存。事实上,BMP、GIF、PNG图片的保存比JGP要简单,TIFF格式 ...

有空的时候能否增加上BMP、GIF、PNG图片的保存格式,谢谢!

.

TA的精华主题

TA的得分主题

发表于 2015-4-7 12:36 | 显示全部楼层
wcymiss 发表于 2015-4-7 11:49
楼主要求的是jpg,所以我只写了jpg图片的保存。事实上,BMP、GIF、PNG图片的保存比JGP要简单,TIFF格式 ...

再把路径与名称灵活性,就可以做成一个标准型的加载宏了。

.

TA的精华主题

TA的得分主题

发表于 2015-4-7 14:12 | 显示全部楼层
yf_home 发表于 2015-4-7 12:35
有空的时候能否增加上BMP、GIF、PNG图片的保存格式,谢谢!

.

网上有现成的代码:
http://home.eeworld.com.cn/my/space-uid-256707-blogid-38411.html

请注意:
1、并不是每次复制图片后,剪贴板内都有metafile格式的图片数据的。(比如按PrScrn键截屏后剪贴板就没有metafile数据。)要根据剪贴板现有的数据选取其中一种图片格式进行保存。(bmp格式一般都会有)

2、jpeg格式和tiff格式在保存的时候,涉及到各种参数的选择,比如jpeg格式涉及质量、亮度、色度等等,tiff格式涉及色深、压缩、保存等参数。在保存时,可选择只设置一个参数,也可设置多个参数。上面链接的代码中jpeg格式设置了一个质量参数,tiff格式设置了色深压缩两个参数。

3、jpg、jpeg是同一种格式图片,仅仅是扩展名不同。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-22 07:54 | 显示全部楼层
我的要求简单些,就是把整个屏幕截图,导出为D:\2.jpg即可。
截图的语言我已经写好了,就差导出的语言了。

TA的精华主题

TA的得分主题

发表于 2015-8-30 16:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
收藏,好好学习学习......
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-1 10:38 , Processed in 0.047248 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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