Microsoft Word句子长度检查器

时间:2018-05-18 19:25:07

标签: vba ms-word

我试图实现我为Word找到的代码,如果超过25个单词(不等于,或超过 - 只是超过,那么应标记26个或更多单词),将检查句子并将其标记为红色。

我对此代码的问题在于,如果您在句子中包含逗号,它会标记短于25个单词的句子 - 这也可能与其他标点符号一起发生,但到目前为止,我还经历过它特别用逗号。

以下是代码:

Sub AutoExec()
    ‘ The AutoExec is a special name meaning that the code will run automatically when Word starts
    CustomizationContext = NormalTemplate
    ‘ Create key binding to change the function of the spacebar so that it calls the macro Check_Sentence
    ‘ each time the spacebar is pressed
    KeyBindings.Add KeyCode:=BuildKeyCode(wdKeySpacebar), _
    KeyCategory:=wdKeyCategoryMacro, _
        Command:=”Check_Sentence”
    ‘ It will be useful to be able to turn the checking on and off manually
    ‘ so allocate ctrl-shift-spacebar to turn the checking off
    KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeyShift, wdKeySpacebar), _
        KeyCategory:=wdKeyCategoryMacro, _
        Command:=”SetSpaceBarOff”
    ‘ and allocate ctrl-spacebar to turn the checking back on
    KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeySpacebar), _
        KeyCategory:=wdKeyCategoryMacro, _
        Command:=”SetSpaceBarOn”
End Sub

Sub SetSpaceBarOn()
    KeyBindings.Add KeyCode:=BuildKeyCode(wdKeySpacebar), _
        KeyCategory:=wdKeyCategoryMacro, _
        Command:=”Check_Sentence”
    MsgBox (“sentence length checking turned on”)
End Sub

Sub SetSpaceBarOff()
    With FindKey(BuildKeyCode(wdKeySpacebar))
        .Disable
    End With
    MsgBox (“sentence length checking turned off”)
End Sub

Sub Check_Sentence()
    Dim long_sentence As Integer
    ‘ pressing the spacebar calls this macro so have to assume the user wanted a space to appear
    ‘ in the text. Therefore put a space character into the document
    Selection.TypeText (” “)
    ‘Set number of words to be a long sentence
    long_sentence = 25
    For Each Test_Sentence In ActiveDocument.Sentences ‘ check each sentence in the document
        If Test_Sentence.Words.Count > long_sentence Then ‘ if it longer than our limit
            Test_Sentence.Font.Color = wdColorRed ‘ turn the font for the sentence red
            ‘ Test_Sentence.Font.Underline = wdUnderlineDotted ‘ show long sentences with a dotted underline
        Else
            Test_Sentence.Font.Color = wdColorBlack ‘ if less than our limit make the font black
            ‘ Test_Sentence.Font.Underline = wdUnderlineNone ‘ turn of the underline
        End If
    Next ‘ next sentence
End Sub

希望有人在这里建议如何修改代码以避免这些问题,并帮助它按照预期的方式运行!

提前致谢!

1 个答案:

答案 0 :(得分:2)

我会自己分割句子,并计算单词的数量。

如果句子True有25个字或更多

,则此函数返回s
Function IsMoreThan25Words(ByVal s As String) As Boolean
    Dim words() As String, i As Long, WordCount As Long
    s = Replace(s, ".", " ")
    s = Replace(s, ",", " ")
    s = Replace(s, ":", " ")
    words = Split(s, " ")
    For i = LBound(words) To UBound(words)
        If Len(Trim(words(i))) > 0 Then WordCount = WordCount + 1
    Next
    IsMoreThan25Words = WordCount >= 25
End Function

请注意,我将,.:硬编码为分隔符,随时可以更改