我目前正在努力解决一个非常简单的问题。
对于宏,我想知道我的光标是否在空行上。我以为使用Len()
或Count
,但它们总是返回1
(即使当前行上有更多字符)。
我认为使用Range
而不是Selection
可能会有所帮助,但我不知道该怎么做(我对vba字不是很熟练)。
我想我可以选择整行(如何?),然后选择if Selection.Characters.Count > 1 Then [...]
,但这似乎很丑陋且效率低下。
在此先感谢您的帮助或建议
答案 0 :(得分:2)
您询问的是空行... 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
如果您真的要说“线”,那就有点复杂了。一行可能为空,而段落可能在其他行上包含其他内容。这是一个例子
此外,选择项可能不是单个点,这在询问选择项是否在空行/段落中时很重要。
以下过程首先检查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
答案 1 :(得分:1)
尝试一下...
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<table class="table">
<thead>
<tr>
<th>To Do List</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<div class="checkbox">
<input type="checkbox" id="checkbox1" /><label>Task 1</label><label class="glyphicon glyphicon-trash"></label>
</div>
</td>
</tr>
<tr>
<td>
<div class="checkbox">
<input type="checkbox" id="checkbox2" /><label>Task 2</label><label class="glyphicon glyphicon-trash"></label>
</div>
</td>
</tr>
<tr>
<td>
<div class="checkbox">
<input type="checkbox" id="checkbox3" /><label>Task 3</label><label class="glyphicon glyphicon-trash" id="3"></label>
</div>
</td>
</tr>
</tbody>
</table>
</div>
If Asc(ThisDocument.Characters(Selection.Start)) = 13 And Asc(ThisDocument.Characters(Selection.Start + 1)) = 13 Then
MsgBox "y"
End If
包含文档中的所有文本,并分成单个字符(例如字母/数字/空格/等)
ThisDocument.Characters
获取特定字符的字符代码
Asc(...)
是回车(换行)的代码
13
是指插入符号/光标之前的字符
Selection.Start
是指插入符号后面的字符
如@Ezor所建议,这可能不适用于所有版本的Word VBA,因此一种替代方法是使用Selection.Start + 1
而不是ActiveDocument
,例如
ThisDocument