如何用vba遍历含有合并单元格的word表格?

在用vba处理word的表格时,经常会遇到word表格中的合并单元格。

它不同于excel的合并单元格,word vba表格中没有属性可以判断单元格是否是合并单元格。

当遇到word表格中有合并单元格时,如果用逐个单元格遍历的方式,往往会弹出错误的提示。

如下图所示

如果要用vba将word表格中除了序号以外的所有数字设置为两位小数,用如下的代码:

Sub QQ1722187970()
     Dim oCell As Cell
    Dim oTable As Table
    Dim iCol
    For Each oTable In ActiveDocument.Tables
        With oTable
                For Each oCell In .Range.Cells
                    If oCell.Column > 1 Then
                        With oCell
                            sText = oCell.Range.Text
                            sText = Replace(sText, Chr(13) & Chr(7), "")
                            If IsNumeric(sText) Then
                                sText = VBA.Format(sText, "##0.00")
                                oCell.Range = sText
                            End If
                        End With
                    End If
                Next
        End With
    Next
End Sub

因为word的表格中含有合并单元格,导致单元格的宽度不一致,所以无法用遍历的方式访问。

如何用vba选中word表格中行、列、单元格?一文中,我们介绍了通过用Selection对象的SelectCellSelectRowSelectColumn方法可以选中word表格中的行、列、单元格对象。

通过选中word表格行、列后再遍历的方式可以绕开合并单元格的坑,比如上述的案例可以通过如下的代码来解决:

Sub QQ1722187970()
    Dim oCell As Cell
    Dim oTable As Table
    Dim iCol
    For Each oTable In ActiveDocument.Tables
        With oTable
            iCol = .Columns.Count
            For i = 2 To iCol
                '先选中单个单元格
                .Cell(1, i).Select
                '再选中整列
                Word.Selection.SelectColumn
                '然后遍历
                For Each oCell In Word.Selection.Cells
                    With oCell
                        sText = oCell.Range.Text
                        sText = Replace(sText, Chr(13) & Chr(7), "")
                        If IsNumeric(sText) Then
                            sText = VBA.Format(sText, "##0.00"): oCell.Range = sText
                        End If
                    End With
                Next
            Next i
        End With
    Next
End Sub
       

发表评论