weixin_46201551 2023-03-05 22:58 采纳率: 33.3%
浏览 26

电子表格中已插入了很多的对象,如何将这些对象批量导出到指定的文件夹中,用vba

电子表格中已插入了很多的对象,如何将这些对象批量导出到指定的文件夹中,用vba。
这是chatgpt写的但有问题,并且插入的对象并不一定是图片
folderPath = "C:\ExportedObjects" '设置导出文件夹路径

If Dir(folderPath, vbDirectory) = "" Then '如果文件夹不存在,则创建
MkDir folderPath
End If

i = 1
For Each obj In ActiveSheet.Shapes '遍历所有对象
If obj.Type = msoPicture Or obj.Type = msoOLEControlObject Then '如果是图片或OLE对象
obj.CopyPicture xlScreen, xlPicture '复制对象
With New Picture '创建新的Picture对象
.Paste '粘贴复制的对象
.SaveAs folderPath & "Object" & i & ".jpg" '保存为jpg文件,文件名包含序号
End With
i = i + 1 '增加序号
End If
Next obj

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-03-05 23:15
    关注

    “Devil组”引证GPT后的撰写:
    多问几次GPT.
    这段代码只能导出图片和OLE对象,无法导出其他类型的对象。如果要导出其他类型的对象,需要修改判断条件和保存方式。

    以下是修改后的代码,可以导出所有类型的对象

    folderPath = "C:\ExportedObjects" '设置导出文件夹路径
    
    If Dir(folderPath, vbDirectory) = "" Then '如果文件夹不存在,则创建
    MkDir folderPath
    End If
    
    i = 1
    For Each obj In ActiveSheet.Shapes '遍历所有对象
    If obj.Type = msoPicture Or obj.Type = msoOLEControlObject Then '如果是图片或OLE对象
    obj.CopyPicture xlScreen, xlPicture '复制对象
    With New Picture '创建新的Picture对象
    .Paste '粘贴复制的对象
    .SaveAs folderPath & "Object" & i & ".jpg" '保存为jpg文件,文件名包含序号
    End With
    i = i + 1 '增加序号
    Else '如果是其他类型的对象
    obj.Copy '复制对象
    Dim newWorkbook As Workbook
    Set newWorkbook = Workbooks.Add '创建新工作簿
    With newWorkbook.Sheets(1)
    .Paste '粘贴复制的对象
    .SaveAs folderPath & "Object" & i & ".xlsx" '保存为xlsx文件,文件名包含序号
    End With
    newWorkbook.Close False '关闭工作簿,不保存修改
    i = i + 1 '增加序号
    End If
    Next obj
    
    
    

    这段代码将图片和OLE对象保存为jpg文件,其他类型的对象保存为xlsx文件,文件名包含序号,保存到指定的文件夹中。注意要在循环内创建新的工作簿,避免粘贴的对象覆盖之前保存的对象。保存完文件后要关闭工作簿,不保存修改。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月5日