2013-04-16 2 views
1

이 절차를 통해 과도한 단락 간격을 이동하려고 시도합니다.VBA 단어 : 두 단락 기호 제거

Sub RemoveGaps() 
    wrdDoc.Content.Select 

    Selection.Find.ClearFormatting 
    Selection.Find.Replacement.ClearFormatting 

    With Selection.Find 
     .Text = "^13^13" 
     .Replacement.Text = "^p" 

     .Forward = True 
     .Wrap = wdFindContinue 
     .Format = False 
     .MatchCase = False 
     .MatchWholeWord = True 
     .MatchWildcards = True 
    End With 

    Selection.Find.Execute Replace:=wdReplaceAll 
    If Selection.Find.Found = True Then 
     Call RemoveGaps 
    End If 

End Sub 

루프를 끝내면 문서 맨 아래에 이런 종류의 형성이 끝납니다. 그것은 조금은 작동하지 않습니다 그럼 붙어옵니다.

enter image description here

편집 : 나는 마지막 두 문단 나누기를 가지고 그들은 단지 다른 두 사람과 함께 교체합니다. 나는 수동으로 그들을 선택하고 대체하려고 노력했다. 그리고 같은 물건, 그들은 단지 웬일인지 여분의 하나와 바꾸게된다. 그게 뭔지 모르겠다. 어쩌면 다른 특수 문자 일까?

+0

하나의 팁이 이상 할 수 있습니다. 나는 당신을 복사했고 작동하지 않았습니다. 그런 다음 Siddharth가 didn 일하지 마라. 그런 다음 나는 일한 것을 만들었습니다. 나는 다른 것들을하고 응용 프로그램을 끄고 모든 잠수함을 다시 시도했습니다. 모든 서브 루틴은 예상대로 작동하기 시작했는데, Siddhard와 나의 것입니다 ... 이유가 없습니다. –

+0

좋은 팁! 일하고있는 것 같습니다. 나는 그 이상한 문자열의 단락 기호를 가지고있다. 그러나 그들은 단지 끝단에 있고 루프는 붙어 있지 않다. 그래서 여기에 여기! – JoshDG

+0

지금은 내 인라인 사진을 어떤 이유로 든 제거하는 것처럼 보이지만!? 그게 뭔데? – JoshDG

답변

1

Sub RemoveGaps() 
    wrdDoc.Content.Select 

    Selection.Find.ClearFormatting 
    Selection.Find.Replacement.ClearFormatting 

    With Selection.Find 
     .Text = "^p^p" '<~~~ See this 
     .Replacement.Text = "^p" 

     .Forward = True 
     .Wrap = wdFindContinue 
     .Format = False 
     .MatchCase = False 
     .MatchWholeWord = True 
     .MatchWildcards = False '<~~ Set this to false 
    End With 

    Selection.Find.Execute Replace:=wdReplaceAll 

    If Selection.Find.Execute = True Then 
     Call RemoveGaps 
    End If 
End Sub 
+0

didnt work :(같은 문제 나는 끝에 두 단락 나누기가 있고 다른 두 개로 바꾼다. 실제로 수동으로 선택하여 바꾸려고했다. 그리고 똑같은 이유로, 그들은 어떤 이유로 든 여분의 것으로 바꾼다. 그게 뭔데? – JoshDG

1

당신은이 같은 다시 몇 줄의 전체 하위 화재하지만 갈 필요가 없습니다 시도 :

Sub RemoveGaps() 
Dim wrdDoc As Document 
Set wrdDoc = ActiveDocument 
    wrdDoc.Content.Select 

    Selection.Find.ClearFormatting 
    Selection.Find.Replacement.ClearFormatting 

    With Selection.Find 
     'oryginal 
     .Text = "^13^13" 
     .Replacement.Text = "^p" 
     .Forward = True 

    End With 

GoHere: 
    Selection.Find.Execute Replace:=wdReplaceAll 

    If Selection.Find.Execute = True Then 
     GoTo GoHere 
    End If 

End Sub 

나는 그것을 테스트하고 내 워드 2010

와 함께 잘 작동
2
Sub RemoveGaps() 

    Dim oFnd As Find 

    Set oFnd = ThisDocument.Content.Find 
    oFnd.ClearFormatting 
    oFnd.Replacement.ClearFormatting 

    With oFnd 
     .Text = "^13^13" 
     .Replacement.Text = "^p" 

     .Forward = True 
     .Wrap = wdFindContinue 
     .Format = False 
     .MatchCase = False 
     .MatchWholeWord = True 
     .MatchWildcards = True 
    End With 

    Do 
     oFnd.Execute Replace:=wdReplaceAll 
    Loop Until Not oFnd.Execute Or oFnd.Parent.End = ThisDocument.Content.End 

End Sub 

KazJaw가 왜 작동하는지 잘 모르겠다. 결국 두 개의 단락 기호가 남지만, Execute는 False를 반환한다. 마지막 GoTo로 이동하면 직접 실행 창에 표시됩니다.

?selection.Find.Execute 
False 
?selection = string(2,chr$(13)) 
True 

왜 그럴 때 두 개의 캐리지 리턴을 찾지 못합니까? 이상한. 어쨌든 선택 항목이나 GoTo를 변경하는 것이 싫어서 내 버전이 포함되었습니다. 찾기가 아무 것도 찾을 수 없거나 문서 끝에있을 때 종료됩니다.

단락 수의 상한값을 알면 다른 방식으로 처리 할 수 ​​있습니다. 예를 들어 빈 단락이 10 개를 넘지 않는다는 것을 알고 있다면 다음과 같이 할 수 있습니다.

Sub RemoveGaps2() 

    Dim i As Long 

    For i = 10 To 2 Step -1 
     With ThisDocument.Content.Find 
      .Text = "[^13]{" & i & ",}" 
      .Replacement.Text = Chr$(13) 
      .MatchWildcards = True 
      .Execute , , , , , , , , , , wdReplaceAll 
     End With 
    Next i 

End Sub