2009-07-22 4 views
0

내가워드 VBA 탭 위치 잘못된 행동

Private Sub CreateQuery_Click() 

    Dim doc As Document 
    Dim i As Integer 

    Set doc = ActiveDocument 
    i = doc.Paragraphs.Count 

    doc.Paragraphs(i).Range.InsertParagraphAfter 
    i = i + 1 

    For j = 0 To 1000 
     doc.Paragraphs(i).Range.InsertParagraphAfter 
     i = i + 1 
     doc.Paragraphs(i).Range.InsertParagraphAfter 
     i = i + 1 
     With doc.Paragraphs(i) 
      .Range.Font.Italic = True 
      .Range.ListFormat.ApplyBulletDefault 
      .Indent 
      .Indent 
      .TabStops.Add Position:=CentimetersToPoints(3.14) 
      .TabStops.Add Position:=CentimetersToPoints(10) 
      .TabStops.Add Position:=CentimetersToPoints(11) 
     End With 
     For k = 0 To 10 
      With doc.Paragraphs(i) 
       .Range.InsertAfter "testState" & vbTab & CStr(doc.Paragraphs(i).Range.ListFormat.CountNumberedItems) & vbTab & CStr(doc.Paragraphs.Count) 
       .Range.InsertParagraphAfter 
      End With 
      i = i + 1 
     Next 
     i = doc.Paragraphs.Count 
     With doc.Paragraphs(i) 
      .Range.ListFormat.ApplyBulletDefault 
      .TabStops.ClearAll 
      .Outdent 
      .Outdent 
     End With 
    Next 

    i = doc.Paragraphs.Count 

    doc.Paragraphs(i).Range.InsertParagraphAfter 
    i = i + 1 

End Sub 

는 기본적으로이 코드는 단지 특정 형식의 라인 n 개의 번호를 인쇄 다음 VBA 코드를 가지고있다.

  • 글 머리 기호 목록
  • 들여
  • 및 tab stop로

alt text http://files.lans-msp.de/vbscript_tabstops.png

코드 라인의 임의의 수를 완벽하게 작동,하지만 어느 시점에서 말씀이 바로이 tab stop을 적용 중지 .

10 줄마다 형식을 재설정하지 않으면 코드가 영원히 작동한다는 것을 알고 있습니다 (실제로?!). 그러나 매 10 라인 브레이크는 필수품입니다.

모든 것이 다운되는 정확한 행 번호는 RAM의 양에 따라 다릅니다. 1GB의 제 작업 컴퓨터에서는 800 번 라인까지만 작동합니다 (보시다시피). 집에서 4GB를 사용하는 컴퓨터는이 동작을 나타내지 않았습니다. 그러나 내 생산 코드 (조금 더 복잡함)에서 내 가정용 컴퓨터가 문제를 잘 나타내주기 때문에 충분히 오래 실행하면 좋을 것이라고 확신 할 수 있습니다.

메모리 누출 같은 것이 있습니까? 나는 무엇을 잘못 했는가? 어쩌면, 신 - 금지, VBA 그 자체가 범인인가?

답변

3

정의 된 스타일을 사용하여 서식을 적용하십시오. 차이가 있는지 확인하십시오.

+0

나는 지구상의 사람들이 형식이 전혀 다르지 않을 때 왜 모든 단일 라인을 직접 포맷할지 궁금해하고있다. – Tomalak

+0

모든 줄이 아닙니다. 나는 단지 10 줄의 모든 블록을 다시 적용한다. 실제 스크립트에서는 블록 사이에서 더 많은 일이 진행됩니다. – eric

+0

이 문제가 해결되었습니다. 나는 이것이 더 깨끗한 방법임을 알 수있다. 그러나 나는 아직도 Word가 어떤 종류의 메모리 누수가 있다고 생각한다. 어쩌면이 '수정'이 조금 더 경계를 밀어 냈을 것입니다 ... 어쨌든 고마워요, 제 문제는 없어졌고 가장 중요한 것이 있습니다! – eric

0

선을 추가하는 동안 자동 페이지 매김을 끄고 도움이되는지 확인해보십시오.

Application.Options.Pagination = False 
+0

아니요, 불행히도이 방법은 작동하지 않지만 올바른 형식의 블록 하나가 추가로 제공됩니다. 그 후 여전히 깨져있다. – eric