【问题标题】:VBA Word table to Excel Paragraph and For ErrorVBA Word 表格到 Excel 段落和错误
【发布时间】:2020-11-08 15:12:03
【问题描述】:

我有两个问题:

  1. 我需要在 .docx 中复制一个表格,该表格在 A 列中有段落编号。表格的第一行是始终合并的 (A-C)。表格可以是任意数量的行,但格式相同。

.docx 表格例:

 A   B   C
|'title...'|
|1.| T | F |
|2.| F | T |
|3.| T | T |

我知道这段代码查看的是 (2, 1),但它没有返回编号为“1”的表。它只是将 (2, 1) 作为空白单元格返回。 理想情况下,它会返回“1”的值(没有句点)。

  1. 当我运行完整代码时,它第一次传递到“Next iCol”,然后在“Cells(resultRow, iCol)...”出现错误:“请求的集合成员不存在”。我认为这与合并的第一行有关,因此 Cell(1,2) 不存在,但我不确定解决方案。

有问题的代码:

ElseIf .Found = True Then
        For iRow = 1 To wrdDoc.Tables(3).Rows.Count
        For iCol = 1 To wrdDoc.Tables(3).Columns.Count
            Cells(resultRow, iCol) = WorksheetFunction.Clean(wrdDoc.Tables(3).Cell(iRow, iCol).Range.Text)
        Next iCol
            resultRow = resultRow + 1
        Next iRow
            resultRow = resultRow + 1
    End If

excel 中的最终结果应该与没有列 A 句点的 .docx 表匹配。如果更简单,可以将“标题”放在 A1 中,然后将表格的其余部分放在后面。

 A   B   C
|'title..'|
|1| T | F |
|2| F | T |
|3| T | T |

OR

 A    B   C
|tle|   |   | 
|1  | T | F |
|2  | F | T |
|3  | T | T |

感谢您的帮助和时间。

【问题讨论】:

    标签: excel vba ms-word


    【解决方案1】:

    如果每行中的第一个单元格被格式化为“编号列表”,那么您可以像这样读取值:

    Dim r As Long
    With wrdDoc.Tables(3)
        For r=2 to .Rows.Count
            Debug.Print .Cell(r, 1).Range.ListFormat.ListValue
        Next r
    End with
    

    如果列表使用(例如)A、B、C、...,则使用 ListFormat.ListString

    【讨论】:

      【解决方案2】:

      尝试以下方式:

      Dim i as long
        With wrdDoc.Tables(3).Range
          For i = 1 To .Cells.Count
            If .Cells(i).RowIndex > iRow Then resultRow = resultRow + 1
            iRow = .Cells(i).RowIndex: iCol = .Cells(i).ColumnIndex
              ActiveSheet.Cells(resultRow, iCol) = WorksheetFunction.Clean(.Cells(i).Range.Text)
          Next
        End With
      

      请注意在代码中包含工作表引用 - 您可能需要以不同方式定义。

      【讨论】:

      • 谢谢!这解决了问题 2。但是从第 1 行(A2、A3、A4)返回文本后,A 列仍然是空白的。
      • 我还没有找到让 A 列返回表中的段落编号的解决方案。我在想我可以在(resultRow,1)中返回“i”值,但它会被单元格(resultRow,iCol)覆盖。我遗漏的一件事可能可以解决我自己的问题,具体取决于修复是什么——虽然第 1 行始终是合并单元格,但第 2 行也包含标题单元格,因此编号直到第 3 行才开始。所有 Cells(3,1) 的含义始终为“1”。并且 Cells(4,1) 是“2”。等等。
      【解决方案3】:

      发布的代码对我来说很好 - Excel 中的第一个输出单元格包含 Word 表中第一个单元格的文本。但是,如果该单元格包含自动编号,则不会输出自动编号。这和你自己的代码是一致的。

      尝试捕获包含在自动编号中的内容的问题在于,此类编号通常后跟一个制表符,Excel 最多会将其解释为列分隔符。例如:

      wrdDoc.Tables(3).Range.Copy
      xlWkSht.Cells(resultRow, 1).PasteSpecial xlPasteValues
      resultRow = resultRow + wrdDoc.Tables(1).Range.Rows.Count
      

      【讨论】:

        猜你喜欢
        • 2017-03-06
        • 2023-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-20
        相关资源
        最近更新 更多