首页 > 解决方案 > VBA 字。如何在Word表格中找到第一个空单元格?

问题描述

我一直在尝试使用 VBA 在 Word 表中找到第一个空单元格。

在单词表中查找单元格

我放在下面的代码找到了所有空单元格,而不是我想在填充一个之后找到第一个。如何解决这个问题呢?

For Each oRow In Selection.Tables(1).Rows
For Each oCell In oRow.Cells
    If Selection.Text = Chr(13) & Chr(7) Then
    oCell.Select
    'Selection.PasteSpecial DataType:=wdPasteText
        MsgBox oCell.RowIndex & " " & oCell.ColumnIndex & " is empty."
    End If

Next oCell
Next oRow

标签: vbams-word

解决方案


您可能已经发现,在 Word 中确定一个空单元格并不像看起来那么简单。下面的代码在删除任何空格、制表符和 vbCr 后查找单元格中文本长度为 1 的第一个单元格。您可以扩展它以查找 vbLF、手动换行符和其他可能在单元格中但在关闭查看文本标记时不可见的字符。

表格范围的 .Cells 方法是最适合在此处使用的工具,因为即使表格已合并单元格,它也可以工作。如果表格中有合并的单元格,则使用单元格坐标搜索表格将失败。使用 .Cells 方法从左上角到右下角(逐列)搜索表格。

Option Explicit

Sub Test()

    Dim myCell As Word.Range
    Set myCell = FirstEmptyCell(ActiveDocument.Tables(1).Range)
    myCell.Select

End Sub

' Returns the first cell that has a text length of 1
' after removing spaces and tab characters from the cell text
Public Function FirstEmptyCell(ByVal TableRange As Word.Range) As Word.Range

    Dim myCell As Word.Cell
    For Each myCell In TableRange.Tables(1).Range.Cells

        Dim CellText As String
        CellText = myCell.Range.Text
        CellText = Replace(CellText, vbTab, vbNullString)
        CellText = Replace(CellText, " ", vbNullString)
        CellText = Replace(CellText, vbCr, vbNullString)

        If Len(CellText) = 1 Then

            Set FirstEmptyCell = myCell.Range
            Exit Function

        End If

    Next

End Function

推荐阅读