Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA Word表格到Excel段落和查找错误_Excel_Vba_Ms Word - Fatal编程技术网

VBA Word表格到Excel段落和查找错误

VBA Word表格到Excel段落和查找错误,excel,vba,ms-word,Excel,Vba,Ms Word,我有两个问题: 我需要在.docx中复制一个表,该表在a列中有段落编号。该表的第一行是“始终合并”(a-C)。该表可以是任意数量的行,但格式相同 .docx表格示例: A B C |'title...'| |1.| T | F | |2.| F | T | |3.| T | T | 我知道这段代码会查看(2,1),但它不会返回编号为“1”的表。它只是以空白单元格的形式返回(2,1)。 理想情况下,它将返回“1”的值(不带句点) 当我运行完整的代码时,它会第一次传递到“Next iCo

我有两个问题:

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

     A   B   C
    |'title...'|
    |1.| T | F |
    |2.| F | T |
    |3.| T | T |
    
    我知道这段代码会查看(2,1),但它不会返回编号为“1”的表。它只是以空白单元格的形式返回(2,1)。 理想情况下,它将返回“1”的值(不带句点)

  • 当我运行完整的代码时,它会第一次传递到“Next iCol”,然后在“Cells(resultRow,iCol)…”处出现错误:“请求的集合成员不存在”。我认为这与合并第一行有关,因此单元格(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中的最终结果应与.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 |
    

    感谢您的帮助和时间。

    尝试以下内容:

    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
    

    请注意,代码中包含了工作表引用-您可能需要进行不同的定义。

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

    尝试捕获自动编号包含的内容的问题在于,此类编号后面通常有一个选项卡,Excel最多只能将其解释为列分隔符。例如:

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

    如果每行中的第一个单元格格式为“编号列表”,则可以如下读取值:

    Dim r尽可能长
    带wrdDoc.表格(3)
    对于r=2到.Rows.Count
    Debug.Print.Cell(r,1).Range.ListFormat.ListValue
    下一个r
    以
    

    或者使用
    ListFormat.ListString
    如果列表使用(例如)A、B、C、…

    谢谢!这就解决了问题2。但是从第1行(A2、A3、A4)返回文本后,A列始终为空。我还没有找到让A列返回表中段落编号的解决方案。我想我可以在(resultRow,1)中返回'I'值,但它会被单元格(resultRow,iCol)覆盖。我遗漏了一件事,也许可以根据修复的内容自行解决—虽然第1行始终是一个合并单元格,但第2行也包含标题单元格,因此直到第3行才开始编号。所有单元格(3,1)的含义始终为“1”,单元格(4,1)的含义始终为“2”,依此类推。