需要VBA脚本来连接MS Word中的2行

时间:2014-03-16 04:22:38

标签: vba ms-word word-vba

每周我都会收到一个需要一些简单格式的大型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

1 个答案:

答案 0 :(得分:0)

您实际上可能不需要任何VBA。尝试寻找" Gen. ^ p"并替换为" Gen。 &#34 ;.这应该工作。如果Gen. line包含Gen. +" " (空间)你可能需要找到" Gen。 ^ P&#34 ;. ^ p是回车符。我放了引号""让你了解确切的字符串。在执行查找替换时,您将需要将其删除。