VBA常用代码(EXCEL文件中图片提取)

还记得《python常用代码(EXCEL文件中图片提取)》中提到的:如何使用python获取EXCEL文件中的图片吗?
今天这篇则是用VBA的方式获取EXCEL中的图片,不着急写代码,咱们先梳理一下做这个事儿的思路:
1、打开EXCEL文件
2、找到工作表中的图片
3、将图片提取出来,并导出到指定文件夹中

整体思路就是这样。那么如果用自然语言写出做这个事儿的逻辑,应该是怎样的?
咱们一起尝试下:

1
2
3
4
5
6
7
8
9
For 循环'此处的循环时用于遍历所有需要处理的EXCEL文件

打开EXCEL文件
循环'此处的循环是遍历所有工作表(当然,如果仅想提取其中某张工作表中图片,也可通过Iputbox()函数实现,具体见代码实例)
遍历工作表中的所有图片
获取图片
结束循环

结束循环

好了,以上就是咱们“纸上谈兵”的结果,接下来要做的就是把这些自然语言翻译成VBA语言。
以下是代码,可以对照着自然语言,看看翻译的效果如何,同时体会下VBA的这种实现方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

Sub sitepicget() '提取照片
Dim str
Dim wb, wb1 As Workbook
Dim i As Integer
Dim j, k As Long
Dim shp As Shape
Dim shtname As String
shtname = InputBox("请输入待提取照片所在的表的名称。比如:关键点拍照 注意:每次只能输入一个")
On Error Resume Next
str = Application.GetOpenFilename(",*.*", , , , True)
For i = LBound(str) To UBound(str)
Set wb = Workbooks.Open(str(i))
For j = 1 To Sheets(shtname).Shapes.Count

Set shp = Sheets(shtname).Shapes(j)
shp.CopyPicture Appearance:=xlScreen, Format:=xlPicture
With Sheets(shtname).ChartObjects.Add(shp.Left, shp.Top, shp.Width, shp.Height)
.Activate
End With
ActiveChart.Paste
ActiveChart.Export ("D:\picture\" & Left(wb.name, InStr(wb.name, ".") - 1) & "-" & shtname & "-" & j & ".png")
ActiveChart.Parent.Delete
Next

Application.DisplayAlerts = False
'wb.Save
wb.Close
Next
End Sub

看到这里,有没有一种还不错的感觉:编程也就这样嘛,其实就是个翻译工作。这样的自信非常好,它是你持续学习向前的动力和源泉。
还有很多好玩,有意思的,可以通过编程实现的东西,等着咱们慢慢去发掘呢。

OK,准备好了,那咱们继续上路,前排乘客请系好安全带,出发!!!