2017-11-01 1 views
0

나는 vba를 처음 사용하며 질문이 있습니다. 활성 문서에 포함 된 문서를 열고 저장하기 위해 매크로로 작성했습니다. 내가 쓴 코드는 다음과 같습니다 : 내가하고 싶은 무엇폴더의 모든 단어 문서에서 포함 된 문서 추출

Sub Extract() 

    Dim num As Integer 
    Dim AD As Document 
    Set AD = ActiveDocument 

    Dim numObjects As Integer 
    numObjects = AD.InlineShapes.Count 

    'MsgBox numObjects ' prints "11" 

    For num = 1 To numObjects 
     If AD.InlineShapes(num).Type = 1 Then 
      'it's an embedded OLE type so open it. 
      AD.InlineShapes(num).OLEFormat.Open 
      AD.InlineShapes(num).OLEFormat.Object.SaveAs FileName:="C:\Users\Ankita\Desktop\New folder\x.xlsx", FileFormat:=51 


     End If 
    Next num 

End Sub 

는 소스 폴더에있는 모든 단어 문서에 포함 된 모든 문서를 추출하여 대상 폴더에 모두 저장됩니다.

나는 docs라는 단어에 액세스하여 루프를 거쳐야하고 위 코드와 동일한 코드 조각을 가져야한다는 것을 이해합니다.하지만 정확히 어떻게 작성합니까?

도움을 주시면 감사하겠습니다.

답변

0

첫 번째 단계는 추출하려는 소스 폴더의 모든 파일 목록을 가져 오는 것입니다.

Sub GetAllFiles(Folder As String, StrArray() As String) 
    'Stores all file names from a folder into a string array. 
    Dim objFSO As Object 
    Dim objFolder As Object 
    Dim objFile As Object 
    Dim i As Integer 

    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set objFolder = objFSO.GetFolder(Folder) 
    i = 1 
    'loops through each file in the directory and prints their names and path 
    For Each objFile In objFolder.Files 
     ReDim Preserve StrArray(i) 
     StrArray(i) = objFile.Name 
     i = i + 1 
    Next objFile 

    If i = 1 Then 
     ReDim Preserve StrArray(1) 
    End If 
End Sub 

다음 단계는 Word 문서 파일을 제외하고 모두 필터링하는 것입니다.

Dim FileSpec(1) As String 
FileSpec(0) = Source & "\*.doc" 
FileSpec(1) = Source & "\*.docx" 

Sub GetFileList(ByRef FileSpec() As String, objDict As Object) 
    Dim FileName As String 
    objDict.RemoveAll 
    On Error GoTo NoFilesFound 
    For i = LBound(FileSpec) + 1 To UBound(FileSpec) 
     FileName = Dir(FileSpec(i)) 
'  Loop until no more matching files are found 
     Do While FileName <> "" 
      If Not objDict.Exists(FileName) Then objDict.Add FileName, 0 
      FileName = Dir() 
     Loop 
    Next i 
    If objDict.count = 0 Then GoTo NoFilesFound 
Exit Sub 

'Error Handler 
NoFilesFound: 
'ERROR HANDLING 
End Sub 

, 당신은 파일 이름과 데이터가 어떤 수의 열쇠가 될 주위 변경할 수 .DOC 또는 키와 같은 사전에 .DOCX 확장과 0의 값으로 모든 파일을 추가하지만, 그것은 당신의 선택입니다.

여기에서 사전을 열고 각 항목에 대해 Sub를 호출해야합니다.

Sub OpenAndExtract() 
Dim AD As Document 
    Documents(ActiveDocument.FullName).Close SaveChanges:=wdDoNotSaveChanges 
    For each Key in objDict 
     Set Ad = Documents.Open(Source & "\" & Key).Activate 
     Call Extract 
    Next 
End Sub 

대략적인 내용입니다. 매개 변수를 취하거나 전역 변수를 설정하는 등 대상 폴더를 선택하는 방법을 변경해야 할 것입니다. 나는 당신이 일하고있는 프로젝트의 조직을 알지 못한다. 그래서 당신은이 부분에 대해 가야만 할 것이고, 한 부분은 천천히 일하게 될 것이다. 또한, 여기 거의 모든 것을 편집기로 작성 했으므로 어딘가에서 구문이 틀릴 수도 있습니다. 신의 말로 받아들이지 마라. 그러나 목표로가는 길에 너를 잘 잡아야한다.

관련 문제