배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Word 버전:   공통
검색어:   Word VBA
제목:   미안합니다. Word VBA!
     
 

새 페이지 4

  STEP> 살펴보기


Word를 자주 사용하지는 않지만 종종 Word의 기능 중에는 불편한 점이 하나 있더군요. 그림파일을 문서에 삽입할 때 그림의 경로명과 그림파일을 바로 밑에 표시해주었으면 하는 바람이 생기더군요.

특히 수 십장의 그림파일을 넣고 이를 문서와 그림파일을 관리하려면 그러한 정보는 필요합니다. “필요는 발명의 엄마!”라는 말처럼 제가 필요해서 VBA도움말도 보고 매크로 기록기의 도움을 받아 만들어 보았습니다.

프로그램을 어떻게 구성할까 구상해 보았는데, 다음과 같습니다.
1. 대화상자를 열어 그림을 선택하도록 합니다.
2. 그림을 문서에 삽입합니다.
3. 그림하단에 “그림번호+파일명”에 출력합니다.

즉 다음과 같은 결과를 원하는 것입니다. 아래의 그림을 보면 워드문서 속에 그림이 하나 있고 그 밑에 그림경로명과 그림 파일명이 표시됩니다.

소스는 다음과 같습니다. 예전과 마찬가지로 설명은 프로그램 소스에 주석으로 달아 두었습니다.

Sub InsertPicture()   
    Dim dlgInsPic       As FileDialog
    Dim shpPic          As InlineShape
    Dim vrtSelectedItem   

    // FileDialog개체는 2002버전부터 제공되는 개체로 알고
   
// 있습니다. 아마 2000이하 버전은 사용하시는 분은
    // 해당되지 않을 것 같습니다.
    // 이것은 파일을 선택하는 대화상자를 만드는 개체입니다.   

    // Application.FileDialog(FileDialogType)   

    // FileDialogType에는 다음과 같은 상수를 사용합니다.
   
//     msoFileDialogFilePicker - 파일선택
    //     msoFileDialogFolderPicker - 폴더선택
    //     msoFileDialogOpen - 열기
    //     msoFileDialogSaveAs- 다른이름으로 저장 

    Set dlgInsPic = Application. _
        FileDialog(FileDialogType:=msoFileDialogFilePicker) 

    With dlgInsPic
        // Flters 프로퍼티
        // 선택하거나 보여주는 파일의 종류를 지정합니다.
        // 그림파일을 읽어 들일 목적이므로 당연히 추가하는
        // 파일의 종류는 BMP, GIF, JPG 등등입니다. 
        .Filters.Add "그림포맷", "*.gif; *.jpg; *.bmp", 1       

        // Show 메소드
        // 대화상자를 보여주는 메소드입니다.
        // Show 메소드는 Long값을 돌려주는 메소드입니다.
        // 대화상자를 취소하면 0을 돌려주고
        // 해당 동작(열기, 저장하기 등등)을 선택하면 -1을 돌려줍니다.
       
        // 돌려주는 값이 -이면 작업을 하게됩니다.
        If .Show = -1 Then       

            // SelectedItems 프로퍼티
            // SelectedItems 프로퍼티는 대화상자에서
            // 선택한 항목을 돌려줍니다. 컬렉션의 형태로 말이죠.
          
            // For Each문을 사용하여 선택한 파일명을 얻습니다.
            For Each vrtSelectedItem In .SelectedItems
           
                // shpPic는 InlineShape개체변수입니다.
               
// InlineShape개체변수는 문서내의 Shape개체(도형,그림)
                // 나타내는 개체입니다.               

                // Selection개체는 선택한 범위나 삽입 포인터 위치
 
              // 나타내는 개체입니다.               

                // 현재 삽입위치에서 InlineShapes(여기에선 그림파일)
                // 를 추가합니다.
                Set shpPic = Selection.InlineShapes. _

                    AddPicture(FileName:=vrtSelectedItem, _
                    LinkToFile:=False, SaveWithDocument:=True)
                   
                // 그림서식중 [웹]탭의 [대체 텍스트]문자열을
                // 지정합니다
                With shpPic
                    .AlternativeText = vrtSelectedItem
                End With               

                // Paragraph란 하나 이상의 문장이 모인 것을 말하죠
                // InsertParagraph 메소드는 새 단락을 만드는 것입니다
                Selection.InsertParagraph
              
                // 현재 입력포인터 바로 밑에 캡션을 삽입합니다
                // 캡션의 이름은 "그림" + 파일명의 형태입니다.
                // 즉 문서에 삽입한 그림의 위치와 이름을 붙여
                // 두는 것입니다.
                Selection.InsertCaption Label:="그림", _
                    TitleAutoText:=vrtSelectedItem, _
                    Title:=" > " & vrtSelectedItem, _
                    Position:=wdCaptionPositionBelow                   

                Selection.InsertParagraph
            Next vrtSelectedItem 

        End If
    End With   

    // 다 쓴 개체는 버려야 겠죠
    Set dlgInsPic = Nothing
    Set shpPic = Nothing

End Sub

 
  참고>
다음은 현재 문서 내 그림 또는 도형의 크기를 절반으로 줄이는 예입니다,
     For Each img In ActiveDocument.InlineShapes
          img.Width = img.Width * 0.5
          img.Height = img.Height * 0.5
     Next