如何使用VBA将合并表从Word导出到Excel

科尔

我无法将合并的单词表导出到excel。

这是我当前未合并表的代码。

Sub ImportWordTable()
Dim wdDoc As Object
Dim wdFileName As Variant
Dim TableNo As Integer 'table number in Word
Dim iRow As Long 'row index in Excel
Dim iCol As Integer 'column index in Excel

wdFileName = Application.GetOpenFilename("Word files (*.docm),*.docm", , _
"Browse for file containing table to be imported")

If wdFileName = False Then Exit Sub '(user cancelled import file browser)

  Set wdDoc = GetObject(wdFileName) 'open Word file

  With wdDoc
    TableNo = wdDoc.Tables.Count
    If TableNo = 0 Then
        MsgBox "This document contains no tables", _
        vbExclamation, "Import Word Table"
    ElseIf TableNo > 1 Then
        TableNo = InputBox("This Word document contains " & TableNo & " tables." & vbCrLf & _
        "Enter table number of table to import", "Import Word Table", "1")
    End If
    With .Tables(TableNo)
        'copy cell contents from Word table cells to Excel cells
        For iRow = 1 To .Rows.Count
            For iCol = 1 To .Columns.Count
                Cells(iRow, iCol) = WorksheetFunction.Clean(.Cell(iRow, iCol).Range.Text)
            Next iCol
        Next iRow
    End With
  End With
End If
Set wdDoc = Nothing

End Sub

这不适用于合并的单元格;当我运行此脚本时,找到合并的单元格会出错:

运行时错误'5941':所请求的集合成员不存在。

当我调试时,这是产生问题的行:Cells(iRow,iCol)= WorksheetFunction.Clean(.Cell(iRow,iCol).Range.Text)

如果我在不合并单元格的情况下打开word doc,则可以很好地提取数据。我需要从合并单元格的Word文档中提取数据。可以更改代码来做到这一点吗?

戴维·泽门斯

合并单元格的问题是,您最终遇到的情况.Columns.Count是该行中的单元格数量更多,因此会出现类似以下错误:

在此处输入图片说明

这应该可以工作并处理垂直合并,水平合并或垂直合并和水平合并,请考虑以下单词表:

在此处输入图片说明

该代码可以非常简化,并且不会在行/列/单元格上循环,只需使用(记录不良)CommandBars.ExecuteMso方法复制并粘贴表即可

    .Tables(TableNo).Range.Copy
    Range("A1").Activate
    Application.DisplayAlerts = False
    Application.CommandBars.ExecuteMso "PasteDestinationFormatting"
    Application.DisplayAlerts = True

这基本上是该相似答案的简化版本,但不幸的是它没有保留合并的单元格:

在此处输入图片说明

如果您想保留Word的格式,请执行以下操作:

.Tables(TableNo).Range.Copy
Range("A1").Activate
Application.CommandBars.ExecuteMso "PasteSourceFormatting"

并且它应该复制格式/等:

在此处输入图片说明

如果您需要保留合并区域而不是Word格式,则只需将"Normal"样式应用于Excel中的结果范围即可:

.Tables(TableNo).Range.Copy
Range("A1").Activate
Application.CommandBars.ExecuteMso "PasteSourceFormatting"
Range("A1").CurrentRegion.Style = "Normal"

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Java脚本将HTML表导出到Excel

将HTML表导出到Excel-使用jQuery或Java

将MS Access表拆分为多个部分,然后使用VBA导出到Excel

如何使用jQuery将数据从表导出到CSV文件

使用VBA将Excel工作表(的一部分)导出到CSV的范围

如何使用Laravel将(Oracle)数据库表导出到Excel工作表

将表数据导出到Excel文件

使用VBA将Excel表导出到不带BOM的.csv UTF8时如何维护字符集?

如何使用Access VBA定义要从Excel导出到MS Access表的列数?

将复杂的HTML表导出到Excel

使用VBA将参数化查询导出到Excel

使用JavaScript将HTML表导出到Excel

如何使用Java将表内容导出到CSV?

使用VBA将Excel表导出到SQL

如何使用angularjs将数据从HTML表导出到Excel

如何将多个数据框合并到一个表中并导出到Excel?

将数据导出到Excel工作表

如何使用ASP.NET MVC将数据从数据库导出到Excel工作表?

使用宏将Office Excel表导出到csv

如何将MS SQL表架构导出到Excel

使用.withButtons将角度数据表导出到Excel:如何维护备用行样式

MS Access,VBA-将交叉表导出到Excel

VBA 宏 - 将表格数据从 Excel 文件导出到 Word 并为每个工作表创建一个部分

VBA 将 Access DB 导出到 Excel

将数据框导出到 Excel 表

如何使用反应库将数据导出到 excel

使用 C# 中的 Spire.Office 将 Excel 工作表导出到 Word 维护合并的单元格

如何使用 Pandas 将字典导出到 excel

如何使用基于类别的分组将数据框导出到 Excel 工作表