我目前正在努力解决一个非常简单的问题。对于宏,我想知道我的光标是否在空行上。我想使用Len()orCount但它们总是返回1(即使当前行有更多字符)。
我认为使用 aRange而不是Selection可以有所帮助,但我不知道该怎么做(我对 vba-word 不是很熟练)。我想我可以选择整条线(如何?),但if Selection.Characters.Count > 1 Then [...]它看起来丑陋且效率低下。
预先感谢您的任何帮助或建议,
您询问空行...Word 中“空段落”和“空行”之间存在重要区别。大多数人在使用术语“行”时指的是段落,但段落以 ANSI 13 结尾,而行以 ANSI 11 (Shift+Enter) 结尾。假设你的意思是段落...
有很多方法可以实现这一点,但有一种简单的方法可以测试段落中有多少个字符。空段落只有 1 个字符,ANSI 13:
If Selection.Paragraphs(1).Range.Characters.Count = 1 Then
'Only a paragraph mark - the paragraph (line) is empty
End If
Run Code Online (Sandbox Code Playgroud)
如果你真正指的是“线”,那就有点复杂了。一行可以是空的,而段落可以在其他行上包含附加内容。这是一个例子
此外,选择可能不是单个点,当询问选择是否位于空行/段落中时,这一点很重要。
以下过程首先检查Selection.Type,如果不是 IP,则不会发生任何情况。然后它检查所选内容是否位于空段落中(如上所述)。如果段落包含多个内容,则有必要确定紧邻所选内容之前和之后的内容。ANSI 13 或 ANSI 11 可能位于这些位置,除此之外别无其他。
选择范围已扩展为搜索 ANSI 11 和 ANSI 13,但搜索仅限于一个字符。如果搜索成功,将返回 1 和 -1,否则返回 0。如果 1 和 -1 为一,则所选内容位于空行中,即使该段落包含多行,如图所示。
在图像中,第一“行”是一个空段落;第二个不为空;第三个是空行;第四个不为空;第五个是空行。
Sub EmptyLineOrPara()
Dim nrChars As Long
Dim rng As Word.Range
Dim nrCharsMovedForward As Long
Dim nrCharsMovedBackward As Long
If Selection.Type = wdSelectionIP Then
Set rng = Selection.paragraphs(1).Range
nrChars = rng.Characters.Count
If nrChars = 1 Then
Debug.Print "Empty paragraph"
ElseIf nrChars > 1 Then
nrCharsMovedForward = Selection.MoveEndUntil(Chr(11) & Chr(13), 1)
nrCharsMovedBackward = Selection.MoveStartUntil(CSet:=Chr(11) & Chr(13), Count:=-2)
If nrCharsMovedForward = 1 And nrCharsMovedBackward = -1 Then
Debug.Print "Empty line"
ElseIf Selection.Fields.Count > 0 Then
Debug.Print "Selection contains fields!"
Else
Debug.Print "Not empty"
End If
End If
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2529 次 |
| 最近记录: |