2014-12-16 4 views
0

"프레임"에있는 데이터로 구성된 큰 MS Word 2010 문서가 있습니다. Screenshot of frameVBA를 통해 MS Word 문서에서 텍스트 프레임을 얻는 방법

내가 그것을 접근이 시도 : 여기에 스크린 샷입니다

Sub test() 
Dim s As Shape 
Dim i As Integer 
Dim str As String 
For Each s In ActiveDocument.Shapes 
    i = i + 1 
    If s.TextFrame.HasText Then 
     Application.StatusBar = i 
    End If 
Next s 
MsgBox ("done") 
End Sub 

그러나이 날 잡으려고하지 않을 것입니다. 나는이 모든 "프레임"을 통과해야하지만, 다시 무엇인지는 모르겠다. Excel로 넘겨 준다. 어떤 포인터? xml을 추출하여 파싱 할 수 있지만 조금 과장된 것 같습니다. (+ 나는 아직 파싱에 익숙하지 않다.)

+0

Application.StatusBar 대신 Debug.print를 사용하는 경우 VBA 디버거에 숫자 목록이 표시됩니까? 당신이 바라는대로 상태 표시 줄을 항상 업데이트한다고 나는 믿지 않을 것입니다. – Christina

+0

안녕하세요 @Christina - 아니요, if 조건이 절대로 맞지 않는 것 같습니다. 이상하게 들리지만,이 "상자"또는 "프레임"이 셰이프 컬렉션의 일부라고 가정 할 때만입니다. 여기 나쁜 부분은 내가 무엇인지 말할 수 없다는 것입니다. 그것은 프레임이 이전 버전의 Word에서 유물의 일종 인 것 같아요. 그리고 왜 사람들이 그들을 사용할 지 모르겠습니다. 나는 내가 사용하고있는 파일이 오래된 시스템의 데이터 덤프라고 생각한다. – PBD10017

+0

콘텐츠 컨트롤 일 수 있습니까? docx에 문서를 저장하고 XML을 추출하는 것이 가치가있을 수 있습니다. 어쩌면 당신은 당신이 상대하고있는 것을 말할 수 있습니다. – Christina

답변

0

Oracle Reports의 프레임이있는 * .rtf 파일이 있습니다. 내 매크로를 사용해보십시오.

Sub test() 
Dim TabHourFrames() As Variant 
numb_frames = ActiveDocument.Frames.Count 
    ReDim TabHourFrames(1 To numb_frames) 
    counter = numb_frames 
    For i = 1 To counter 
     Set myRange = ActiveDocument.Frames.Item(i).Range 
     t = myRange.Text 
     TabHourFrames(i) = t 
    Next i 
Documents.Add DocumentType:=wdNewBlankDocument 
     For q = 1 To counter 
     last_par = ActiveDocument.Paragraphs.Count 
     Set rngLastParagraph = ActiveDocument.Paragraphs(last_par).Range 
      With rngLastParagraph 
        .InsertAfter Text:=TabHourFrames(q) 
        .InsertParagraphAfter 
      End With 
     Next q 
ActiveDocument.Range(0, 0).Select 
End Sub 
관련 문제