【发布时间】:2022-11-01 16:23:06
【问题描述】:
我只是在学习,还不太了解。 我写了错误的代码
Sub sierotkiTXT_select()
Do
Selection.EndKey Unit:=wdLine
Selection.MoveLeft Unit:=wdCharacter, Count:=3, Extend:=wdExtend
If Selection.Text Like "* [aAwWzZiIoOuUVQ] *" Or Selection.Text Like "*[A-Z]. *" Or Selection.Text Like "* [a-z]. *" Or Selection.Text Like "*z. *" Or Selection.Text Like "*:] *" Then
Result = MsgBox("OK?", vbYesNoCancel + vbQuestion)
If Result = vbYes Then
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.Delete
Selection.InsertAfter Text:=ChrW(160)
End If
If Result = vbCancel Then
Exit Sub
End If
End If
Selection.MoveRight Unit:=wdCharacter, Count:=3
Loop Until Selection.Text = ActiveDocument.Range.Characters.Last
End Sub
并且不知道如何在文档末尾停止这样的宏(打破循环)而不使用
Loop Until Selection.Text = ActiveDocument.Range.Characters.Last
这不是问题,但宏有时会停在段落结尾字符处,将它们解释为文档的结尾。 [编辑] Ok-ActiveDocument.Range.Characters.Last 仍然返回空 - 这就是它停止的原因。我不应该使用这个。
示例(正文): before
运行宏后: after
【问题讨论】:
-
试图用你的代码实现什么。
-
我正在尝试在每行末尾的某些字符中添加不间断空格。我不想在整个文本中这样做,因为它破坏了文本的正当性。所以使用宏我移动了一些字符,但只在行尾。
-
就像在您的上一篇文章中一样:使用 .Find-Object 等内置工具或其他工具。如果您使用 Selection 和 Loop/For,您必须自己检查,何时停止。在这种情况下,您必须定义一个最大值(就像所有可能检查的字符一样)并设置一个为每个循环实例增加的计数器。
-
这就是您的解决方案,添加不间断空格。您想通过添加不间断空格来做什么。
-
通过将元音(和其他符号)移动到下一行来改善文档的外观。在 2 个地方——正文和尾注。