Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

냥집사의 개발일지

VBA - VBA로 표 2개 이상 생성하기 (from Excel to Word) 본문

VBA

VBA - VBA로 표 2개 이상 생성하기 (from Excel to Word)

깅햄찌 2022. 8. 30. 20:46
반응형

2022.08.29 - [VBA] - VBA - VBA로 표 생성하기 (from Excel to Word)

 

VBA - VBA로 표 생성하기 (from Excel to Word)

안녕하세요~ 오늘은 VBA로 Word에서 표를 생성해볼 겁니다. 사실 Excel에서는 Excel 자체가 거대한 표이기 때문에 각 셀에 접근해서 데이터를 입력하면 그 자체가 표라고 할 수 있는데요. 그 방법도

leggo-fire.tistory.com

이전 포스팅에 이어 오늘은 VBA로 표 2개 이상 생성을 해보겠습니다.

Word에서는 Range를 특정하기 쉽지 않아 표 2개 생성하는데 의외로 어려움을 겪었는데요.

같이 예제를 보면서 살펴보겠습니다!

Sub add_table()

    'Declare part
    Dim wd_app As Word.Application
    Dim wd_doc As Word.Document
    Dim wd_range
    Dim wd_table
      
    'Creating a new instance of word only if there no other instances
    Set wd_app = New Word.Application
    
    'Make word window visible on monitor
    wd_app.Visible = True

    'Creating a new document
    Set wd_doc = wd_app.Documents.Add()

    Set wd_range = wd_doc.Range(0, 0)
    wd_doc.Tables.Add Range:=wd_range, NumRows:=3, NumColumns:=4
    Set wd_table = wd_doc.Tables(1)

    'Enable the borders of table using table object.
    wd_table.Borders.Enable = True
    
    'Code for second table
    Set wd_range2 = wd_doc.Range(0, 0)
    Set wd_table2 = wd_doc.Tables.Add(Range:=wd_range2, NumRows:=2, NumColumns:=2)
    wd_table2.Borders.Enable = True


    'saving the document
    wd_doc.SaveAs2 "add_table"

End Sub

'Code for second table
    Set wd_range2 = wd_doc.Range(0, 0)
    Set wd_table2 = wd_doc.Tables.Add(Range:=wd_range2, NumRows:=2, NumColumns:=2)
    wd_table2.Borders.Enable = True

추가된 코드를 살펴보면 새로운 표를 생성하기위해 Range를 다시 0,0 첫 지점으로 두고

첫 번째 표를 생성할 때와 같은 방식으로 2행2열의 표를 삽입했습니다.

하지만... 아래 그림과 Range(0,0)이 문서의 첫 줄로 가는 것이 아니라 이미 생성된 표의 1행 1열 셀로 선택되는 것을 확인할 수 있었습니다. ㅠ

그렇다면 Range를 어떻게 잡아야 할까요?

    'Code for second table
    Set wd_range2 = wd_doc.Tables(1).Range
    wd_range2.Collapse Direction:=wdCollapseEnd
    Set wd_table2 = wd_doc.Tables.Add(Range:=wd_range2, NumRows:=2, NumColumns:=2)
    wd_table2.Borders.Enable = True

Range를 Tables 객체로 선택하고 이후

Collapse property(wdCollapseEnd)를 통해 먼저 삽입한 Table(표) 이후로 커서를 옮겼습니다. 

다행히 아래 그림과 같이 3행4열 표 이후로 2행 2열의 표가 삽입된 것을 확인할 수 있습니다!!

Set wd_range = wd_doc.Range(0, 0)
    wd_doc.Tables.Add Range:=wd_range, NumRows:=3, NumColumns:=4
    Set wd_table = wd_doc.Tables(1)
    wd_table.Borders.Enable = True
    wd_table.Rows.HorizontalPosition = 30
    wd_table.Rows.VerticalPosition = -20


    
    'Code for second table
    Set wd_range2 = wd_doc.Tables(1).Range
    wd_range2.Collapse Direction:=wdCollapseEnd
    Set wd_table2 = wd_doc.Tables.Add(Range:=wd_range2, NumRows:=2, NumColumns:=2)
    wd_table2.Borders.Enable = True
    wd_table2.Rows.HorizontalPosition = 30
    wd_table2.Rows.VerticalPosition = 100

2개이상의 표의 위치를 특정위치로 옮기고 싶다면 아래 코드를 참조하세요!!

wd_table.Rows.HorizontalPosition = 30  ' 양수 : 우측 offset 음수 : 좌측 offset
wd_table.Rows.VerticalPosition = -20  ' 양수 : 아래 offset 음수 : 위 offset

 HorizontalPosition, VerticalPosition을 통해 표의 위치를 특정할 수 있습니다.

wd_doc.Tables.Add Range:=wd_range, NumRows:=3, NumColumns:=4
Set wd_table = wd_doc.Tables(1)

Set wd_table2 = wd_doc.Tables.Add(Range:=wd_range2, NumRows:=2, NumColumns:=2)

추가 Tips!!

눈썰미 빠른 분들은 눈치채셨겠지만 Table2를 생성할 때는

Table 1과 다르게 선언과 할당을 "동시에" 했습니다.

개인적으로 선언과 할당을 동시에 하는 방법이 더 간단하다고 쉬운 거 같네요~

 

이제 Word에서도 표2개 이상 삽입하는 건 어렵지 않겠죠?

다음 포스팅에서는 표의 property들을 살펴보려고 합니다!!

그럼 다음 포스팅에 만나요~

좋은 하루 보내세요~

Comments