|
这段代码有几个问题需要解决,以确保它能够正确导出表格为图片:
1.Shape 对象的 Type 属性不会返回 msoTable,而是返回 msoTextBox、msoPicture 等。表格在 Word 中通常是 Range 对象的一部分,而不是 Shape 对象。
2.shp.Table 不是有效的属性。你应该直接处理文档中的表格。
3.InputBox 是在每次循环中调用,这样会多次提示输入文件夹名称,而实际上只需要一次。
表格导出为图片的实现方式不正确,需要改用 Range.ExportAsFixedFormat 方法或使用 Copy 和 PasteSpecial 方法来处理。
4.导出表格后,删除表格的部分逻辑也需要调整。
以下是经过修改的代码,已经能实现功能:
Sub ExportSelectedTablesToImages()
Dim doc As Document
Dim tbl As Table
Dim rng As Range
Dim imgPath As String
Dim folderPath As String
Dim fileName As String
Dim i As Integer
Dim tableIndex As Integer
' 选择要保存的文件夹
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "请选择保存图片的文件夹"
If .Show <> -1 Then
MsgBox "未选择文件夹", vbExclamation
Exit Sub
End If
folderPath = .SelectedItems(1)
End With
' 为图片文件命名
fileName = InputBox("请输入文件夹名称", "文件夹命名", "TableImages")
If fileName = "" Then
MsgBox "文件夹名称不能为空", vbExclamation
Exit Sub
End If
imgPath = folderPath & "\" & fileName & "\"
' 创建文件夹
If Len(Dir(imgPath, vbDirectory)) = 0 Then
MkDir imgPath
End If
' 获取文档中的表格
Set doc = ActiveDocument
tableIndex = 1
For Each tbl In doc.Tables
' 复制表格
tbl.Range.Copy
' 创建临时文档来粘贴表格
Dim tempDoc As Document
Set tempDoc = Documents.Add
tempDoc.Content.PasteSpecial DataType:=wdPasteEnhancedMetafile
' 导出为图片
tempDoc.ExportAsFixedFormat OutputFileName:=imgPath & "Table_" & tableIndex & ".pdf", _
ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=False, _
OptimizeFor:=wdExportOptimizeForPrint, _
Range:=wdExportAllDocument, _
Item:=wdExportDocumentContent, _
IncludeDocProps:=False, _
KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, _
DocStructureTags:=False, _
BitmapMissingFonts:=True, _
UseISO19005_1:=False
' 关闭临时文档
tempDoc.Close SaveChanges:=False
tableIndex = tableIndex + 1
Next tbl
MsgBox "表格已成功导出为图片!", vbInformation, "完成"
End Sub |
|