每周我都会收到一个需要一些简单格式的大型MS Word文件。我需要在一条线上单独寻找一本圣经书名,它以回车符结束,然后将这一行与下一行连接起来。像这样:
我需要把光标放在“Gen.”的末尾。添加一个空格并点击删除键使其如下所示:
如果“Gen.”出现在文档中的任何其他位置(除了行上的唯一文本)我需要不管它。我需要搜索整个文档的每一行,寻找5本书,“Gen。”,“Exo。”,“Lev。”,“Num。”,“Deut”。 (最后我需要找66本书)。我一直在研究VBA脚本(从这个站点获得帮助),但没有成功。它似乎应该相对简单,但我无法让它工作。我的糟糕尝试在下面。任何帮助将不胜感激。
Public Sub ConCatVerses()
Selection.HomeKey Unit:=wdStory
For Each line_in_para In ActiveDocument.Paragraphs
text_in_line = line_in_para.Range.Text
If InStr(text_in_line, "Gen.") Then
Selection.HomeKey Unit:=wdLine
Selection.EndKey Unit:=wdLine
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.TypeText Text:=" "
Selection.MoveDown Unit:=wdLine, Count:=1
End If
Next line_in_para
End Sub
感谢您的帮助。我接受了你的建议并添加了我需要的其他元素。希望有人能从这个工作代码中获得一些帮助。现在,这个VBA脚本将遍历整个文档并进行必要的更改。
Sub ConCatVerses1()
'
' Concatenate 2 lines
'
'
Dim myArray1, myArray2 As Variant
Dim x As Integer
myArray1 = Array("Gen.^p", "Exo.^p", "Lev.^p", "Num.^p", "Deut.^p")
myArray2 = Array("Gen. ", "Exo. ", "Lev. ", "Num. ", "Deut. ")
For x = LBound(myArray1) To UBound(myArray1)
BKNAMEF = myArray1(x)
BKNAMER = myArray2(x)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = BKNAMEF
.Replacement.Text = BKNAMER
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next x
End Sub
答案 0 :(得分:0)
您实际上可能不需要任何VBA。尝试寻找" Gen. ^ p"并替换为" Gen。 &#34 ;.这应该工作。如果Gen. line包含Gen. +" " (空间)你可能需要找到" Gen。 ^ P&#34 ;. ^ p是回车符。我放了引号""让你了解确切的字符串。在执行查找替换时,您将需要将其删除。