'MACRO/WORD-MACRO'에 해당되는 글 1건
- 2013.12.19 워드에서 폴더 단위로 파일을 열어서 특정 단어 검색하기
워드에서 폴더 단위로 파일을 열어서 특정 단어 검색하기
문서를 실행하시면 컨텐츠 사용여부를 묻는 메세지가 나옵니다.
반드시 허용하셔야 합니다.
1. 폴더 가져오기로 해당 폴더의
워드파일들을 가져옵니다.
너무 많으면 오류가 발생할 수 있으므로 적당한 수로 나누어서 하시기 바랍니다.
한 50개 정도는 문제가
없었던거 같습니다.
2. 문서 중에 검색 대상이 아닌 문서는 목록에서 선택하신 후 리스트 1건 삭제 버튼을 클릭하시면 됩니다.
3. 검색단어 에 검색할 단어를 입력하시고 하단의 자료추출 버튼을 클릭하시면됩니다.
4. 검색조건은 몇개의 파일을
하나의 결과문서에 나타낼지를 정하는 것입니다.
예를 들어 50개 문서에 검색조건 10을 선택하면 결과문서는 5개가 나옵니다.
오류가 발생하는 경우가 있습니다. 이 때는 매크로 창에서 도구->참조 창을 엽니다.
사용가능한 참조 들 중에 앞에
'누락-'으로 시작하는 항목들이 있는데 이 것들의 체크박스를 풀어주시면 정상적으로 수행될 것입니다.
한번 써보시면 쉽게 될
겁니다.
--------------------------------------------
Private Sub CommandButton1_Click()
getFolder
End Sub
Private Sub CommandButton2_Click()
getSentense
End Sub
Sub goCopy()
varCnt = ListBox1.ListCount
fileCnt = TextBox2.Value
i = 0
Do While i < varCnt
fileNum = i Mod fileCnt
If fileNum = 0 Then
If i = 0 Then
Else
ActiveDocument.Close SaveChanges:=wdSaveChanges
End If
ChangeFileOpenDirectory TextBox1.Text
Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
newFileName = "복사대상" & i + 1 & "-" & i + fileCnt & Date & Hour(Time) & Minute(Time) & Second(Time) & ".docx"
ActiveDocument.SaveAs FileName:=newFileName
End If
fileVal = ListBox1.List(i)
chkLen = InStr(fileVal, "-")
fileVal = Left(fileVal, chkLen - 1)
'복사할 대상을 열어 복사함
Documents.Open FileName:=fileVal, ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:=""
Selection.WholeStory
Selection.Copy
Documents(fileVal).Close
'새 파일을 저장한 위치로 옮김.
ChangeFileOpenDirectory TextBox1.Text
Documents(newFileName).Activate
Documents(newFileName).Select
'새파일의 맨 뒤로 이동함.
Selection.EndKey Unit:=wdStory
'붙혀넣기 전에 링크를 추가함
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
fileVal, SubAddress:="", ScreenTip:="", TextToDisplay:=fileVal
'붙여 넣기함.
Selection.PasteAndFormat (wdPasteDefault)
' 맨 뒤로 이동하여 다음 파일 붙여넣기 준비함
Selection.EndKey Unit:=wdStory
'다음 페이지로 넘어가기 ctr+enter
Selection.InsertBreak Type:=wdPageBreak
i = i + 1
Loop
ActiveDocument.Save
End Sub
Sub getFolder()
'각종 변수 선언
Dim strPath As String
Dim strNm As String
Dim i As Integer
Dim fdFolder As FileDialog
Dim lngCount As Long
' 현재 있는 데이터를 모두 삭제해야 함.
ListBox1.Clear
'서브폴더의 내용을 가져옴
Set fdFolder = Application.FileDialog(msoFileDialogFolderPicker)
With fdFolder
.Title = "검색할 폴더를 선택 하세요"
If .Show = -1 Then
folderspec = .SelectedItems(1) '선택한 폴더명을 A3 셀에 저장
getSubFolder (folderspec)
End If
End With
TextBox1.Text = folderspec
TextBox11.Text = ListBox1.ListCount
TextBox2.Text = ListBox1.ListCount
End Sub
Sub getSubFolder(folderspec)
Dim result As String
Dim strFilter As String
Dim Msg As String
Dim strDir As String
Dim r As Long
strDir = folderspec
If strDir = "" Then
MsgBox (" 선택된 폴더가 없습니다. 폴더를 선택하세요.")
Exit Sub
End If
r = 1
r = r + 1
If Trim(Right(strDir, 1)) <> "\" Then strDir = strDir & "\"
strFilter = "*.doc*"
result = sRetrieve(strDir, strFilter, r)
End Sub
Private Function sRetrieve(sPath As String, strFilter As String, r As Long) As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set dDirs = fs.getFolder(sPath)
For Each dDir In dDirs.SubFolders
sRetrieve = sRetrieve(dDir.Path, strFilter, r)
Next
For Each fFile In dDirs.Files
If fFile.Name Like strFilter Then
If Left(fFile.Name, 1) = "~" Then
Else
ListBox1.AddItem fFile.Path & "-" & fFile.Size
End If
r = r + 1
End If
Next
Set fs = Nothing
End Function
Private Sub CommandButton3_Click()
'Ensure ListBox contains list items
If ListBox1.ListCount >= 1 Then
'If no selection, choose last list item.
If ListBox1.ListIndex = -1 Then
ListBox1.ListIndex = ListBox1.ListCount - 1
End If
ListBox1.RemoveItem (ListBox1.ListIndex)
End If
TextBox11 = ListBox1.ListCount
End Sub
Private Sub ListBox1_Click()
TextBox3.Text = ListBox1
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
selName = ListBox1
docNameLen = Len(selName)
chkLen = InStr(selName, "-")
selName = Left(selName, chkLen - 1)
Documents.Open (selName)
End Sub
Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
copyName = ListBox2
Documents.Open (copyName)
End Sub
Sub getSentense()
varCnt = ListBox1.ListCount
fileCnt = TextBox2.Value
targetText = TextBox4.Value
i = 0
Do While i < varCnt
fileNum = i Mod fileCnt
If fileNum = 0 Then
If i = 0 Then
Else
ActiveDocument.Close SaveChanges:=wdSaveChanges
End If
ChangeFileOpenDirectory TextBox1.Text
Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
newFileName = "복사대상" & TextBox2.Text & i + 1 & "-" & i + fileCnt & Date & Hour(Time) & Minute(Time) & Second(Time) & ".docx"
ActiveDocument.SaveAs FileName:=newFileName
End If
fileVal = ListBox1.List(i)
chkLen = InStr(fileVal, "-")
fileVal = Left(fileVal, chkLen - 1)
sendVal = newFileName & "*" & fileVal
'복사할 대상을 열어 복사함
Documents.Open FileName:=fileVal, ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:=""
'자료찾아복사하는 함수 호출함.
chkexeval = True
Do While chkexeval = True
Selection.Find.ClearFormatting
With Selection.Find
.Text = targetText
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.CorrectHangulEndings = True
.HanjaPhoneticHangul = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
chkexeval = Selection.Find.Execute
If chkexeval = True Then
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
' Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
Selection.MoveRight Unit:=wdWord, Count:=7, Extend:=wdExtend
Selection.Copy
Selection.MoveRight Unit:=wdCharacter, Count:=1
End If
'새 파일을 저장한 위치로 옮김.
ChangeFileOpenDirectory TextBox1.Text
Documents(newFileName).Activate
Documents(newFileName).Select
'새파일의 맨 뒤로 이동함.
Selection.EndKey Unit:=wdStory
Selection.TypeParagraph
'붙혀넣기 전에 링크를 추가함
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
fileVal, SubAddress:="", ScreenTip:="", TextToDisplay:=fileVal
'붙여 넣기함.
Selection.PasteAndFormat (wdFormatPlainText)
Selection.TypeText (vbTab)
Selection.TypeText (chkexeval)
Selection.TypeText (vbTab)
Selection.EndKey Unit:=wdStory
Selection.TypeParagraph
Documents(fileVal).Activate
Loop
Documents(fileVal).Close
i = i + 1
Loop
ActiveDocument.Save
End Sub
Sub goCopyTitle(sendVal)
txtLen = Len(sendVal)
End Sub