在 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'。
美好的一天,
我正在尝试在 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'。