|
本帖最后由 joforn 于 2020-12-2 14:02 编辑
先上测试代码:
- Sub TestSaveRangeToPictrue()
- Dim PathName As String
- Dim FileNames() As String
- Dim FileName As String
- Dim I As Long
-
- PathName = "T:\测试目录"
- PathName = ThisWorkbook.Path & Application.PathSeparator
- Debug.Print "=============开始测试文件输出==================="
-
-
- FileNames = Split("WMF,EMF,PDF,XPS", ",")
- For I = 0 To UBound(FileNames)
- FileName = PathName & "SaveRangeTo" & FileNames(I) & "(矢量)." & FileNames(I)
- Debug.Print "[" & IIf(SaveRangeToPictrue(Range("L1:R21"), FileName), "成功", "失败") & "]:保存" & FileNames(I) & "文件""" & FileName & """"
- FileName = PathName & "Pictures.ZIP>矢量\SaveRangeTo" & FileNames(I) & "." & FileNames(I)
- Debug.Print "[" & IIf(SaveRangeToPictrue(Range("L1:R21"), FileName), "成功", "失败") & "]:添加" & FileNames(I) & "文件到""Pictures.ZIP"""
- Next
-
- FileNames = Split("BMP,PNG,ICO,JPG,TIF,TGA,SVG,GIF", ",")
- For I = 0 To UBound(FileNames)
- FileName = PathName & "SaveRangeTo" & FileNames(I) & "(无透明)." & FileNames(I)
- Debug.Print "[" & IIf(SaveRangeToPictrue(Range("L1:R21"), FileName), "成功", "失败") & "]:保存" & FileNames(I) & "文件""" & FileName & """"
- FileName = PathName & "Pictures.ZIP>无透明\SaveRangeTo" & FileNames(I) & "." & FileNames(I)
- Debug.Print "[" & IIf(SaveRangeToPictrue(Range("L1:R21"), FileName), "成功", "失败") & "]:添加" & FileNames(I) & "图片到""Pictures.ZIP"""
- Next
-
- FileNames = Split("PNG,ICO,TGA,SVG", ",")
- For I = 0 To UBound(FileNames)
- FileName = PathName & "SaveRangeTo" & FileNames(I) & "(背景全透)." & FileNames(I)
- Debug.Print "[" & IIf(SaveRangeToPictrue(Range("L1:R21"), FileName, -1), "成功", "失败") & "]:保存" & FileNames(I) & "文件""" & FileName & """"
- FileName = PathName & "Pictures.ZIP>透明\背景全透\SaveRangeTo" & FileNames(I) & "." & FileNames(I)
- Debug.Print "[" & IIf(SaveRangeToPictrue(Range("L1:R21"), FileName, -1), "成功", "失败") & "]:添加" & FileNames(I) & "背景全透明图片到""Pictures.ZIP"""
- FileName = PathName & "SaveRangeTo" & FileNames(I) & "(背景半透)." & FileNames(I)
- Debug.Print "[" & IIf(SaveRangeToPictrue(Range("L1:R21"), FileName, -1, 128), "成功", "失败") & "]:保存" & FileNames(I) & "文件""" & FileName & """"
- FileName = PathName & "Pictures.ZIP>透明\背景半透\SaveRangeTo" & FileNames(I) & "." & FileNames(I)
- Debug.Print "[" & IIf(SaveRangeToPictrue(Range("L1:R21"), FileName, -1, 128), "成功", "失败") & "]:添加" & FileNames(I) & "背景半透明图片到""Pictures.ZIP"""
- FileName = PathName & "SaveRangeTo" & FileNames(I) & "(整体半透)." & FileNames(I)
- Debug.Print "[" & IIf(SaveRangeToPictrue(Range("L1:R21"), FileName, -2, 128), "成功", "失败") & "]:保存" & FileNames(I) & "文件""" & FileName & """"
- FileName = PathName & "Pictures.ZIP>透明\整体半透\SaveRangeTo" & FileNames(I) & "." & FileNames(I)
- Debug.Print "[" & IIf(SaveRangeToPictrue(Range("L1:R21"), FileName, -2, 128), "成功", "失败") & "]:添加" & FileNames(I) & "整体半透明图片到""Pictures.ZIP"""
- Next
- Debug.Print "============= 测试结束 ==================="
- End Sub
- Sub TestSaveImageMso()
- Dim PathName As String
- Dim FileNames() As String
- Dim FileName As String
- Dim I As Long
-
- On Error Resume Next
-
- PathName = ThisWorkbook.Path & Application.PathSeparator
- PathName = "T:\测试目录"
-
- FileNames = Split("About,AccessRecycleBin,BlogHomePage,ClearGrid,Folder", ",")
- For I = 0 To UBound(FileNames)
- FileName = PathName & FileNames(I)
- With CommandBars.GetImageMso(FileNames(I), 32, 32)
- Debug.Print "[" & IIf(SaveBitmapToFile(.Handle, FileName & ".PNG", &HFFFFFF), "成功", "失败") & "]:保存""" & FileNames(I) & """图标到文件""" & FileName & ".PNG""文件"
- Debug.Print "[" & IIf(SaveBitmapToFile(.Handle, FileName & ".ICO", &HFFFFFF, , 32), "成功", "失败") & "]:保存""" & FileNames(I) & """图标到文件""" & FileName & ".ICO""文件"
- End With
- Next
- End Sub
复制代码 测试效果(本模块已完美通过XP+Office2007、Win7+Office2010(64位)、Win7+Office2007(32位)、Win10+Office2019(64位)测试):
测试视频
本模块支持生成的文件格式:
1、BMP图片格式:32位位图文件 ,不支持透明;
2、PNG图片格式:生成32位带透明通道无损压缩图片;
3、ICO图片格式:生成Windows XP透明图标(注:VBA窗体中可能不能直接使用,不被VBA支持),要注意的是,如果没有为图标对应指定尺寸,那么生成的图标和Range区域大小相同,也就是说生成的图标并不是常见32×32或256×256之类的正方型图标;
4、TGA图片格式:生成32位带透明通道lwz无损压缩的TGA图片,由于TGA图片可被OpenGL直接调用做为3D贴图,故而常见于十多年前的老游戏素材中,但是要注意的是如果使用PS打开TGA文件的话,PS会忽略掉透明通道(包括PS自己生成的透明TGA图),但其它软件正常;
5、JPG/JPEG图片格式:最常见的有损压缩图片格式,不支持透明;
6、TIFF图片格式:不支持透明
7、GIF图片格式:不支持背景透明的GIF图片格式(注意:GIF格式本身是支持透明的,但本人偷懒,没去由自己生成二进制的GIF文件,所以本模块保存的GIF文件不支持背景透明);
8、SVG图片格式: 矢量图,可以使用主流网页浏览器直接打开查看些类图片。
9、WMF图片格式:矢量图
10、EMF图片格式:矢量图
11、PDF文件格式:呃……
12、XPS文件格式:建议使用XPS Viewer查看(Win10自带,但需手动在组件中添加)
13、ZIP文件格式:这货只是为了帮助我们把上面生成的文件打包成一个文件。直接调用Shell32生成,无需第三方库支持,但是要注意的是如果使用的Ghost版XP系统的话,有些Ghost系统会把zipfldr.dll文件精减删除了,需要自己再去重新下载一个注册重启后才能成功生成Zip文件。
源码在这里:
如果只需要用到里面的功能的话,只需要把basSaveRangeToPictrue这个模块直接导出到其它的文件中,然后按上面的测试代码调用SaveRangeToPictrue就行了,里面还有SaveClipboardToPictrue、SaveBitmapToFile可以自己参照原代码中的格式和说明结合自己的情况调用,比如如果想将Excel中的Ribbon图标导出到ICO或是PNG,只要自己参照SaveBitmapToFile使用方法就可以直接导出到磁盘文件(上面的测试代码里也有演示)。
最后使用说明:
我TM忘了自己想说什么,算了,不打字了,吃饭去………… |
图片, 透明, ICO, 格式, ZIP, ICO, ICO, ZIP, ZIP, ICO, ZIP, ICO, ZIP, ICO, ZIP
评分
-
33
查看全部评分
-
|