VBA 字 table 到 Excel 段落和错误
VBA Word table to Excel Paragraph and For Error
我有两个问题:
- 我需要在 .docx 中复制一个 table,它在 A 列中有段落编号。table 的第一行总是合并(A-C)。 table 可以是任意数量的行,但遵循相同的格式。
.docx table 例如:
A B C
|'title...'|
|1.| T | F |
|2.| F | T |
|3.| T | T |
我知道这段代码着眼于 (2, 1),但它不会 return table 编号“1.”。它只是 returns (2, 1) 作为一个空白单元格。
理想情况下,它会 return '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 中的最终结果应该与 .docx table 匹配,但没有 A 列句点。如果更简单,可以将 'title' 放在 A1 中,然后再放置 table 的其余部分。
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 table 的第一个单元格的文本。但是,如果该单元格包含自动编号,则不会输出自动编号。那和你自己的代码是一致的。
尝试捕获包含在自动编号中的内容的问题在于,此类编号通常后跟一个制表符,Excel 最多将其解释为列分隔符。例如:
wrdDoc.Tables(3).Range.Copy
xlWkSht.Cells(resultRow, 1).PasteSpecial xlPasteValues
resultRow = resultRow + wrdDoc.Tables(1).Range.Rows.Count
如果每行中的第一个单元格的格式为“编号列表”,那么您可以这样读取值:
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
我有两个问题:
- 我需要在 .docx 中复制一个 table,它在 A 列中有段落编号。table 的第一行总是合并(A-C)。 table 可以是任意数量的行,但遵循相同的格式。
.docx table 例如:
A B C
|'title...'|
|1.| T | F |
|2.| F | T |
|3.| T | T |
我知道这段代码着眼于 (2, 1),但它不会 return table 编号“1.”。它只是 returns (2, 1) 作为一个空白单元格。 理想情况下,它会 return '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 中的最终结果应该与 .docx table 匹配,但没有 A 列句点。如果更简单,可以将 'title' 放在 A1 中,然后再放置 table 的其余部分。
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 table 的第一个单元格的文本。但是,如果该单元格包含自动编号,则不会输出自动编号。那和你自己的代码是一致的。
尝试捕获包含在自动编号中的内容的问题在于,此类编号通常后跟一个制表符,Excel 最多将其解释为列分隔符。例如:
wrdDoc.Tables(3).Range.Copy
xlWkSht.Cells(resultRow, 1).PasteSpecial xlPasteValues
resultRow = resultRow + wrdDoc.Tables(1).Range.Rows.Count
如果每行中的第一个单元格的格式为“编号列表”,那么您可以这样读取值:
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