ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 373|回复: 2

[求助] 出现方法和数据成员未找到

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-6 08:50 | 显示全部楼层 |阅读模式
老师,这段代码运行后出现错误,这是一段将选中表格导出为图片的代码,请问怎么修改,谢谢

验收标准.rar

127.83 KB, 下载次数: 16

TA的精华主题

TA的得分主题

发表于 2024-5-23 18:25 | 显示全部楼层
Shape 对象的 Type 属性不会返回 msoTable,而是返回 msoTextBox、msoPicture 等。表格在 Word 中通常是 Range 对象的一部分,而不是 Shape 对象。
shp.Table 不是有效的属性。你应该直接处理文档中的表格。
InputBox 是在每次循环中调用,这样会多次提示输入文件夹名称,而实际上只需要一次。
表格导出为图片的实现方式不正确,需要改用 Range.ExportAsFixedFormat 方法或使用 Copy 和 PasteSpecial 方法来处理。
导出表格后,删除表格的部分逻辑也需要调整。

TA的精华主题

TA的得分主题

发表于 2024-5-23 18:35 | 显示全部楼层
这段代码有几个问题需要解决,以确保它能够正确导出表格为图片:

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
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 00:56 , Processed in 0.042433 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表