使用VBA获取图片信息
1、打开Excel表格之后,按下【Alt+F11】组合键打开VBA编辑器。
2、在VBA编辑器的菜单栏上面点击【插入】、【模块】。
3、在“模块”的代码窗口里边输入以下VBA程序,然后按下【F5】键运行程序。Sub GetPicturesInfo()Dim fs, fo, fi, str, i, pictureApplication.ScreenUpdating = False '关闭屏幕更新以提高宏的运行速度On Error Resume Next '忽略运行过程中可能出现的错误i = 1 'i初始化,从第二行开始Set mysheet1 = ThisWorkbook.Worksheets("Sheet1") '定义Sheet1工作表Set mysheet2 = ThisWorkbook.Worksheets("Sheet2") '定义Sheet1工作表Set fs = CreateObject("Scripting.FileSystemObject") '创建并返回对计算机系统文件的访问Set fo = fs.Getfolder("D:\ABC\") '定义文件夹,“ABC”为D盘下边的文件夹Set fi = fo.Files '定义文件夹下边所有文件集For Each picture In fi '获取文件夹里面所有的文件 i = i + 1 '每执行一次循环递增1行 mysheet1.Cells(i, 1) = picture.Name '图片名称 mysheet1.Cells(i, 2) = picture.Type '图片类型 mysheet1.Cells(i, 3) = Application.WorksheetFunction.RoundUp((picture.Size) / 1024, 0) & " KB" '图片大小,把字节转换成k并向上舍入并保留整数 mysheet1.Cells(i, 5) = picture.DateLastModified '最后的图片更改日期 mysheet1.Cells(i, 6) = picture.DateCreated '图片的创建时间 mysheet2.Pictures.Delete '删除Sheet2上面所有的图片 str = "D:\ABC\" & picture.Name '图片文件路径 mysheet2.Pictures.Insert (str) '插入图片 mysheet2.Pictures.ShapeRange.ScaleHeight 1, msoTrue, msoScaleFromTopLeft '对插入的图片100%按照原图放大 If picture.Type = "PNG 文件" Or picture.Type = "GIF 图像" Then '如果是"PNG 文件"或 "GIF 图像"文件,则需要除以0.75,以免像素对不上 mysheet1.Cells(i, 4) = Round(mysheet2.Pictures.Width / 0.75) & _ " x " & Round(mysheet2.Pictures.Height / 0.75) Else mysheet1.Cells(i, 4) = Round(mysheet2.Pictures.Width) & _ " x " & Round(mysheet2.Pictures.Height) End If mysheet2.Pictures.DeleteNextApplication.ScreenUpdating = True '恢复屏幕更新End Sub
4、程序的运行结果如下图所示。
5、程序函数、思路解读:(1)使用VBA访问计算机文件系统信息,需要用到“CreateObject("Scripting.FileSystemObject")”,然后逐层去查找、访问。(2)“For Each picture In fi”是对文件夹里边的每一个文件逐一扫描,然后再获取相关的信息。(picture代表fi文件集里边的其中一员)(3)Size获取的图片大小是字节(Byte),此时需要把它除以1024转换成KB,再使用“ROUNDUP”向上取整才能接近于电脑上面显示的图像大小。(4)由于没法直接从电脑上面获取图片的像素信息,只能把它插入Excel表格,按原图100%放大之后获取它的像素信息。(Sheet2是临时使用的表格,里边不要放有图片文件,以免全部被删除)(5)获取的像素信息可能不是整数,所以就通过“Int”取整函数进行取整。
6、程序运行调试:程序调试是写程序时不可或缺的一步,对程序代码不熟悉,可以边写边调试,发现错虱忪招莫误的同时也能够加深印象。(1)调试程序时,先把“Application.ScreenUpdating = False”、“On Error Resume Next”等可能影响程序调试的屏蔽掉;(2)点击VBA编辑器菜单栏上面的【视图】,【本地窗口】,然后按下【F8】键逐一运行程序,在“本地窗口”及工作表上面查看执行的结果,更正程序中存在的不足。