在 Word 中自动化 LEN() 函数

Automate a LEN() function in Word

美好的一天,

我正在尝试在 Word 中复制 Excel 中的 LEN() 函数,并使其尽可能自动化。

我已经成功地创建了一个简短的模块,它计算某个销售的字符数,然后将结果发布到右侧的单元格中:

Sub NumChars()
With Selection.Paragraphs(1)
    .Next.Range.Text = .Range.Characters.Count
End With
End Sub

这是结果:

现在,不便之处在于,如果我有多行,那么我必须对每一行都这样做,因此问题是,如何才能 VBA已修改,以便它重复该功能,直到到达最后一行? 因此,例如,我一次按下位于第一行的“运行”按钮,它(重新)计算了所有数量该列中每个单元格的字符,直到到达最后一行。

我们将不胜感激。

你的想法是对的,但你需要将它与遍历 table 的每一行相结合,如本例所示:

Option Explicit

Sub test()
    Dim mydoc As Document
    Set mydoc = ThisDocument
    
    Dim tbl As Table
    For Each tbl In mydoc.Tables
        CountMyChars tbl
    Next tbl
End Sub

Sub CountMyChars(ByRef tbl As Table)
    Const CHAR_COL As Long = 2
    Const COUNT_COL As Long = 3
    
    Dim row As Long
    Dim col As Long
    For row = 1 To tbl.Rows.Count
        '--- assumes the characters to count are in Column 2
        '    and the cell to hold the count is Column 3
        tbl.Cell(row, COUNT_COL).Range.Text = tbl.Cell(row, CHAR_COL).Range.Characters.Count
    Next row
End Sub

您可以使用以下代码做得更好:

Sub Demo()
Application.ScreenUpdating = False
Dim r As Long
With Selection
  If .Information(wdWithInTable) = False Then Exit Sub
  With .Tables(1)
    For r = 1 To .Rows.Count
      .Cell(r, 3).Range.Text = Len(.Cell(r, 2).Range.Text) - 2
    Next
  End With
End With
Application.ScreenUpdating = True
End Sub

以上代码仅在选定的 table 上运行,而不是在文档中的所有 table 上运行(这可能会危及其他 table),并且排除 end-of-cell 字符数中的标记(计为 2 个字符)。按照编码,该过程从顶行开始;如果该行包含标题,请将 'r = 1' 更改为 'r = 2'。