我试图实现我为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
希望有人在这里建议如何修改代码以避免这些问题,并帮助它按照预期的方式运行!
提前致谢!
答案 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
请注意,我将,
,.
和:
硬编码为分隔符,随时可以更改