英文:
Microsoft Word VBA - how to condense fragmented paragraphs that are highlighted?
问题
我正在尝试创建一个宏,用于在我的Word文档中查找没有段落完整性的高亮文本并删除换行符以压缩文本。
例如,在下面的图片中,我需要宏将这个文本转换为:
我对Word VBA相当新手,所以我尝试编写它。
Sub CondenseZap()
Dim rngTemp As Range
Set rngTemp = ActiveDocument.Range(Start:=0, End:=0)
With rngTemp.Find
.ClearFormatting
.Highlight = True
' 下面是你尝试查找和替换换行符的代码
' ...
End With
End Sub
这段代码没有执行,并且我不确定如何编写退出条件。我尝试了一下,并成功使程序识别出所有高亮显示的单词,只是不确定如何替换每个单词的换行符。
注意:我不想干扰其他加粗文本之间的换行符(BFS '9不应与"solvency."合并。只有高亮显示的部分应该合并)
如果有人能帮助我组合这个,我会非常感激。
英文:
I'm trying to create a macro to find highlighted text with no paragraph integrity in my Word document and remove the linebreaks to condense the text.
For instance, in the image below, I need the macro to convert this:
To this:
I'm fairly new to Word VBA, so I tried my hand at making it.
Sub CondenseZap()
'
' CondenseZap Macro
'
'
Dim rngTemp As Range
Set rngTemp = ActiveDocument.Range(Start:=0, End:=0)
With rngTemp.Find
.ClearFormatting
.Highlight = True
With CondenseRange.Find
.Text = "^p"
.Replacement.Text = " "
.Execute Replace:=wdReplaceAll
.Text = " "
.Replacement.Text = " "
While InStr(CondenseRange.Text, " ")
.Execute Replace:=wdReplaceAll
Wend
If CondenseRange.Characters.Item(1).Text = " " And _
CondenseRange.Paragraphs.Item(1).Range.Start = CondenseRange.Start Then _
CondenseRange.Characters.Item(1).Delete
End With
End With
End With
End Sub
This code doesn't execute, and I'm not sure how to write the exit conditions. I tested out and got the program to identify all the words with highlighting, I'm just not sure how to replace the linebreak for each at the end.
NOTE: I don't want to mess with the linebreak between the other bolded text (BFS '9 shouldn't be merged with "solvency." Only the highlighted parts)
If someone could help me put this together, I'd really appreciate it.
Cheers.
答案1
得分: 0
您提供的代码有错误,请纠正!比较文本的最简单方法是使用突出显示条件:
Sub CondenseZap()
Dim rngTemp As Range, ur As UndoRecord
' 这样做时,撤销只需要一步
Set ur = Word.Application.UndoRecord
ur.StartCustomRecord "CondenseZap"
Set rngTemp = ActiveDocument.Range
With rngTemp.Find
.ClearFormatting
.Text = "^p"
.Forward = True
.Wrap = wdFindStop
Do While .Execute()
If rngTemp.Next Is Nothing Then Exit Do
' 比较文本的最简单方法是使用突出显示条件: 3 = wdTurquoise
If rngTemp.Previous.HighlightColorIndex = 3 And rngTemp.Next.HighlightColorIndex = 3 Then
rngTemp.Text = " "
End If
' 重置范围
rngTemp.SetRange rngTemp.End, rngTemp.Document.Range.End
Loop
End With
ur.EndCustomRecord
End Sub
这符合您的要求吗?
英文:
The code you gave is simply wrong, please correct it!
The easiest way to compare text is to use highlighting conditions:
Sub CondenseZap()
Dim rngTemp As Range, ur As UndoRecord
Rem do this, it only takes one step when undo
Set ur = Word.Application.UndoRecord
ur.StartCustomRecord "CondenseZap"
Set rngTemp = ActiveDocument.Range
With rngTemp.Find
.ClearFormatting
.Text = "^p"
.Forward = True
.Wrap = wdFindStop
Do While .Execute()
If rngTemp.Next Is Nothing Then Exit Do
Rem The easiest way to compare text is to use highlighting conditions: 3 = wdTurquoise
If rngTemp.Previous.HighlightColorIndex = 3 And rngTemp.Next.HighlightColorIndex = 3 Then
rngTemp.Text = " "
End If
'reset the range
rngTemp.SetRange rngTemp.End, rngTemp.Document.Range.End
Loop
End With
ur.EndCustomRecord
End Sub
Is this what you want?
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论