我在 Excel 中嵌入了 500 个图像,需要将它们全部保存为原始大小的 jpg(嵌入并调整每个单元格内的图像),并将文件名放在同一行。
第一张图片在 C1 中,文件名在 D1 中
第二张图片在 C2 中,文件名在 D2 中
找到下面的代码,但有两处需要修改:
- 此代码将图像作为缩略图保存在单元格中,从而产生非常小的图像。
- 它保存为“Image01”,“Image01”,但我需要将文件名作为 D 列中的单元格值
谢谢!任何帮助我都感激不尽!
Sub ExportAllPictures()
Dim MyChart As Chart
Dim n As Long, shCount As Long
Dim Sht As Worksheet
Dim pictureNumber As Integer
Application.ScreenUpdating = False
pictureNumber = 1
For Each Sht In ActiveWorkbook.Sheets
shCount = Sht.Shapes.Count
If Not shCount > 0 Then Exit Sub
For n = 1 To shCount
If InStr(Sht.Shapes(n).Name, "Picture") > 0 Then
'create chart as a canvas for saving this picture
Set MyChart = Charts.Add
MyChart.Name = "TemporaryPictureChart"
'move chart to the sheet where the picture is
Set MyChart = MyChart.Location(Where:=xlLocationAsObject, Name:=Sht.Name)
'resize chart to picture size
MyChart.ChartArea.Width = Sht.Shapes(n).Width
MyChart.ChartArea.Height = Sht.Shapes(n).Height
MyChart.Parent.Border.LineStyle = 0 'remove shape container border
'copy picture
Sht.Shapes(n).Copy
'paste picture into chart
MyChart.ChartArea.Select
MyChart.Paste
'save chart as jpg
MyChart.Export Filename:=Sht.Parent.Path & "\Picture-" & pictureNumber & ".jpg", FilterName:="jpg"
pictureNumber = pictureNumber + 1
'delete chart
Sht.Cells(1, 1).Activate
Sht.ChartObjects(Sht.ChartObjects.Count).Delete
End If
Next
Next Sht
Application.ScreenUpdating = True
End Sub
答案1
试试这个...可能会让你使用工作表的第一列作为你想要的名称,第二列是嵌入的图像。
Sub ExportImages_ExtendOffice()
'Updated by Extendoffice 20220308
Dim xStrPath As String
Dim xStrImgName As String
Dim xImg As Shape
Dim xObjChar As ChartObject
Dim xFD As FileDialog
Set xFD = Application.FileDialog(msoFileDialogFolderPicker)
xFD.Title = "Please select a folder to save the pictures" & " - ExtendOffice"
If xFD.Show = -1 Then
xStrPath = xFD.SelectedItems.Item(1) & "\"
Else
Exit Sub
End If
On Error Resume Next
For Each xImg In ActiveSheet.Shapes
If xImg.TopLeftCell.Column = 2 Then
xStrImgName = xImg.TopLeftCell.Offset(0, -1).Value
If xStrImgName <> "" Then
xImg.Select
Selection.Copy
Set xObjChar = ActiveSheet.ChartObjects.Add(0, 0, xImg.Width, xImg.Height)
With xObjChar
.Border.LineStyle = xlLineStyleNone
.Activate
ActiveChart.Paste
.Chart.Export xStrPath & xStrImgName & ".png"
.Delete
End With
End If
End If
Next
End Sub