2014-04-17 3 views
1

Word 문서에서 일부 정보를 가져 오기 위해 Excel에서 실행되는 VBA 매크로가 있습니다. 구문 분석을 시작하기 전에 목차 및 기타 필드를 제거하고 싶습니다. 아래 코드는 Office 2010에서 작동하지만 Office 2013에서는 작동하지 않습니다. "개체 필드에서 메서드 삭제가 실패했습니다" 오류 메시지가 표시되지만 이유를 이해할 수 없습니다.Word 필드 삭제 Word 2010에서 작동하는 Word 2013에서 VBA가 작동하지 않습니다.

팁 주셔서 감사합니다! 대신 인덱스를 삭제 시도에

Sub ImportBOD() 

    Dim wdFileName As Variant 
    Dim WordApp As Object 

    Dim wdDoc As Word.Document 

    Dim fld As Word.Field 


    wdFileName = Application.GetOpenFilename("Word files (*.docx),*.docx", ,"Choose the Word document") 

    If wdFileName = False Then Exit Sub '(user cancelled import file browser) 

    Set WordApp = CreateObject("Word.Application") 

    Set wdDoc = WordApp.Documents.Open(wdFileName, ReadOnly:=True) 

    'Get rid of table of contents and other fields 
    For Each fld In wdDoc.ActiveWindow.Document.Fields 
     fld.Delete 
    Next 


    wdDoc.Close SaveChanges:=wdDoNotSaveChanges 

End Sub 
+0

지난 루핑 코멘트를 기준으로합니다. 아래에서 답변 + 내 의견을 참조하십시오. –

답변

1

가 있나요?

For i = 1 to wdDoc.ActiveWindow.Document.Fields.Count 
    wdDoc.ActiveWindow.Document.Fields.Item(i).Delete 
Next i 

나는이 경우 fld에 활성 개체를 제거 루프에 성공하고 VBA 오류 메시지가 특정 미만 항상 아니라는 것을 가끔 발견했다. 또한 SEQ (Sequence Fields)와 같고 XE (IndexEntry Fields)는 Unlink ed가 될 수 없습니다. 이는 Delete이 실패 할 수도 있음을 나타냅니다. Microsoft가이를 지정하지는 않았지만.

편집

처음으로 컬렉션의 마지막 항목에서 이동해야 삭제할 때 처음

For i = wdDoc.ActiveWindow.Document.Fields.Count To 1 Step -1 
    wdDoc.ActiveWindow.Document.Fields.Item(i).Delete 
Next i 
+0

좋은 생각이지만 삭제할 때 마지막 항목부터 마지막 ​​항목까지 루프를 실행하십시오 ... –

+0

@KazJaw가 마지막 루프로 마지막으로 업데이트되었습니다. – engineersmnky

+0

불편을 끼쳐 드려 죄송합니다. 동일한 오류가 발생합니다. 그러나 나는 임시 해결 방법을 생각해 냈습니다. Delete 대신 Unlink를 사용했는데, 이는 제 목적으로는 괜찮습니다. 필드를 없애고 싶었던 이유는 단락별로 문서를 처리하려고 할 때 문제가 발생했기 때문입니다. 즉, 단락별로 문서 단락을 반복합니다. 필드가 어떻게 든 처리를 방해했지만 연결 해제를 사용하여 텍스트로 변환하면 트릭을 수행합니다. – bbSTO

관련 문제