1

我正在扫描一个包含表格内外列表元素的 word 文档。找到列表元素后,我会将其层次结构编号和与之关联的文本导出到 Excel。我的扫描是基于列表元素而不是具体的表格。

在某些情况下,列表元素将出现在表格的第一列中,与之关联的文本将出现在该表格的任意数量的后续列中。在某些表格中有合并的单元格,因此我需要确定表格当前行中的列数。

我不断收到运行时错误'438':对象不支持此属性或方法就行了tCol = oLI.Range.Tables(1).Rows(oCurrentRow).Columns.Count,我不知道为什么。

Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlWB = xlApp.Workbooks.Add ' create a new workbook
With xlWB.Worksheets(1)
    For Each oList In ActiveDocument.Lists
        For Each oLI In oList.ListParagraphs
            .Cells(i, 1) = oLI.Range.ListFormat.ListString
            If oLI.Range.Information(wdWithInTable) = True Then
                '#DETERMINE WHICH TABLE TO LOOK IN
                oCurrentRow = oLI.Range.Cells(1).RowIndex
                    'Determine which Row in the Table to look in
                tCol = oLI.Range.Tables(1).Rows(oCurrentRow).Columns.Count
                    'Determine how many Columns the Table contains
                Debug.Print tCol
                For j = 2 To tCol
                    .Cells(i, j) = oLI.Range.Tables(1).Cell(oCurrentRow, j)
                Next j
            Else
                .Cells(i, 2) = oLI.Range.Text
            End If
            i = i + 1
        Next oLI
    Next oList
End With
4

1 回答 1

0

没有对象ColumnsRow您可以使用

...Rows(oCurrentRow).Cells.Count

获取行中的单元格数。或者,更好的是,您可以使用 For Each 循环遍历单元格,而无需费心计算它们。

Sub LoopCells()

    Dim tbl As Table
    Dim tCell As Cell

    Set tbl = ThisDocument.Tables(1)

    For Each tCell In tbl.Rows(1).Cells
        Debug.Print tCell.Range.Text
    Next tCell

End Sub
于 2013-04-23T15:20:41.777 回答