vba - 如何在段落中搜索多个字符串(列表中的任何一个字符串)(使用输入和输出图像更新)
问题描述
我的目标是根据预定义的字符串(在一个数组中)合并多个段落,例如句点 (.) 或问号 (?)
我的例句如下(请参考图片):
预期的结果将是这样的。
///////////////////////////////////////// //////
///////////////////////////////////////// //////
在下面的代码中,我可以使用句点 (.) 来实现它,但是对于每个其他结束字符串,我都有单独的宏。取决于结束字符串,我运行不同的宏。有没有办法将所有这些搜索字符串 (. / ? / ;) 放在一个数组中,并要求代码运行,直到找到它们中的任何一个并退出循环并进行合并?
块引用
Sub FindDotToJoinParagraph()
Dim xRange As Range
Dim Srt As Variant
Dim Endee As Variant
Dim currentPosition As Range
Selection.HomeKey Unit:=wdLine, Extend:=wdMove
ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="Srt" 'Bookmark
With Selection.Find
.Text = "." 'Here not just period alone, but others too
.Replacement.Text = ""
.Forward = True
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.EndKey Unit:=wdLine, Extend:=wdMove
ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="Ends" 'Bookmark
ActiveDocument.Range( _
ActiveDocument.Bookmarks("Srt").Range.Start, _
ActiveDocument.Bookmarks("Ends").Range.Start) _
.Select
call MergeParaAndLineBreaks() 'An another sub-routine to merge
End Sub
//////////////////////////// 子 MergeParaAndLineBreaks()
Dim oRng As Range
Set oRng = Selection.Range
Dim oFind As Range
Set oFind = Selection.Range
With oFind.Find
Do While .Execute(findtext:="[^13^l]{1,}", MatchWildcards:=True)
If oFind.InRange(oRng) Then
oFind.Text = ""
End If
Loop
End With
Set oFind = oRng
With oFind.Find
Do While .Execute(findtext:="[ ]{2,}", MatchWildcards:=True)
If oFind.InRange(oRng) Then
oFind.Text = Chr(32)
oFind.Collapse 0
End If
Loop
End With
lbl_Exit:
Set oRng = Nothing
Set oFind = Nothing
Exit Sub
End Sub
块引用
有人可以帮我吗,拜托!
解决方案
正如我在评论中指出的那样,段落不一定以标点符号结尾。也就是说,实现您所描述的结果的粗略但有效的解决方案是使用通配符查找/替换,其中:
Find = ([!.\!\?;:])^13
Replace = ^32\1
IOW,您甚至不需要宏。由于我们不知道源文本中的段落分隔符之前是否有空格,因此您最终可能会得到一些额外的空格 - 您可以使用另一个 Find/Replace 来清理这些空格(或者您可以从 Replace 表达式中省略 ^32 )。
推荐阅读
- optaplanner - Optaplanner ScoreDirector 持续规划 DayOff 请求
- image-processing - 我们如何在 CNN 中选择内核?(卷积神经网络)
- ajax - 将 2 个表单放在同一页面上的最佳方法是什么?
- android - 广播接收器未收到 USB 权限
- r - 绘制 PCA,autoplot() 不会按组变量分隔颜色
- url - url中的“?ac_id = 2”是什么意思?
- c# - 在每个派生类构造函数之后调用方法
- java - 尝试解析 JSONArray 时出现 ClassCastException
- python - 为循环中的数据绘制箱线图
- javascript - 使用 REST API 将图像从服务器发送到客户端