본문 바로가기
  • Welcome!
VBA VB.Net Code

PowerPoint와 VBA] 3x3 테이블 만들기

by ToolBOX01 2024. 12. 28.
반응형

기본 코드

Sub Create3x3Table()
    Dim sld As Slide
    Dim shp As Shape
    Dim tbl As Table

    '// 현재 슬라이드를 참조
    Set sld = ActivePresentation.Slides(ActiveWindow.View.Slide.SlideIndex)

    ' AddTable 메서드를 사용하여 테이블 추가 (열과 행의 개수는 위치 기반으로 입력)
    Set shp = sld.Shapes.AddTable(3, 3, 100, 100, 300, 150)

    Set tbl = shp.Table

    ' 테이블 서식 지정
    With tbl
        ' 텍스트 추가
        .Cell(1, 1).Shape.TextFrame.TextRange.Text = "1,1"
        .Cell(1, 2).Shape.TextFrame.TextRange.Text = "1,2"
        .Cell(1, 3).Shape.TextFrame.TextRange.Text = "1,3"
        .Cell(2, 1).Shape.TextFrame.TextRange.Text = "2,1"
        .Cell(2, 2).Shape.TextFrame.TextRange.Text = "2,2"
        .Cell(2, 3).Shape.TextFrame.TextRange.Text = "2,3"
        .Cell(3, 1).Shape.TextFrame.TextRange.Text = "3,1"
        .Cell(3, 2).Shape.TextFrame.TextRange.Text = "3,2"
        .Cell(3, 3).Shape.TextFrame.TextRange.Text = "3,3"
    End With
End Sub

 


● Dim sld As Slide

Microsoft PowerPoint와 같은 Office 응용 프로그램에서 슬라이드를 조작하기 위해 자주 사용됩니다. 
이 변수는 "PowerPoint의 슬라이드 객체를 참조할 수 있는 변수이다"라는 의미입니다.

Set sld = ActivePresentation.Slides(ActiveWindow.View.Slide.SlideIndex)

'//현재 활성화된 (선택된) 슬라이드를 sld라는 변수에 할당하는 구문입니다
"현재 활성화된 프레젠테이션의 슬라이드 컬렉션에서, 현재 창에 표시되고 있는 슬라이드의 인덱스 
번호에 해당하는 슬라이드를 찾아 sld 변수에 할당한다"라는 의미입니다. 즉, 현재 선택된 슬라이드를 sld 
변수로 쉽게 참조할 수 있도록 하는 코드입니다.

ActivePresentation: 현재 활성화된 PowerPoint 프레젠테이션을 나타내는 객체입니다.
Slides: ActivePresentation 객체의 Slides 속성으로, 현재 프레젠테이션의 모든 슬라이드 컬렉션을 나타냅니다. 
이 컬렉션은 슬라이드들을 순서대로 가지고 있으며, 인덱스 또는 이름으로 접근할 수 있습니다.

ActiveWindow: 현재 활성화된 PowerPoint 창을 나타내는 객체입니다.
View: ActiveWindow 객체의 View 속성으로, 현재 창의 보기 상태를 나타냅니다 (예: 일반 보기, 슬라이드 쇼 보기 등).
Slide: ActiveWindow.View 객체의 Slide 속성으로, 현재 창에 표시되고 있는 슬라이드 객체를 나타냅니다.
SlideIndex: ActiveWindow.View.Slide 객체의 SlideIndex 속성으로, 현재 표시되고 있는 슬라이드의 인덱스 번호 (순서)를 나타냅니다. 슬라이드의 순서는 1부터 시작합니다.

Dim sld As Slide  예제 코드

Sub 현재_슬라이드_제목_출력()
    Dim sld As Slide ' 슬라이드 변수 선언

    ' 현재 선택된 슬라이드를 sld 변수에 할당
    Set sld = ActivePresentation.Slides(ActiveWindow.View.Slide.SlideIndex)

    ' 현재 슬라이드의 제목 출력 (제목이 없을 경우 오류 발생 가능성 있음)
    On Error Resume Next ' 오류 발생 시 다음 줄로 진행
    MsgBox "현재 슬라이드 제목: " & sld.Shapes.Title.TextFrame.TextRange.Text
    On Error GoTo 0 ' 오류 처리 복원

End Sub

●  Dim shp As Shape

Dim shp As Shape는 도형 객체를 다루기 위한 변수를 선언하는 구문입니다.

Dim shp As Shape   예제 코드

Sub 슬라이드에_도형_추가()

    Dim sld As Slide
    Dim shp As Shape ' 도형 변수 선언

    Set sld = ActivePresentation.Slides(1) ' 첫 번째 슬라이드 선택

    ' 선택된 슬라이드에 원 도형 추가
    Set shp = sld.Shapes.AddShape(msoShapeOval, 100, 100, 150, 150)

    ' 도형의 채우기 색 변경
    shp.Fill.ForeColor.RGB = RGB(0, 255, 0) ' 초록색

End Sub

 

 

  • .Shapes: sld (슬라이드 객체)의 Shapes 속성으로, 해당 슬라이드에 포함된 모든 도형의 컬렉션을 나타냅니다.
  • .AddShape(...): Shapes 컬렉션의 AddShape 메서드로, 슬라이드에 새로운 도형을 추가합니다. 이 메서드는 여러 인자를 받습니다.
    • msoShapeOval: 추가할 도형의 종류를 지정하는 상수입니다. msoShapeOval은 타원 또는 원을 나타냅니다. 다른 도형 종류는 msoShapeRectangle (사각형), msoShapeLine (선), msoShapeTriangle (삼각형) 등과 같은 상수를 사용합니다. Visual Basic Editor에서 개체 탐색기(Object Browser)를 열어 MsoShapeType 열거형을 검색하면 사용 가능한 모든 도형 종류를 확인할 수 있습니다.
    • 100: 도형의 왼쪽 상단 모서리의 x 좌표 (가로 위치)입니다. 슬라이드 왼쪽 가장자리를 기준으로 100포인트 떨어진 위치에 도형이 생성됩니다.
    • 100: 도형의 왼쪽 상단 모서리의 y 좌표 (세로 위치)입니다. 슬라이드 위쪽 가장자리를 기준으로 100포인트 떨어진 위치에 도형이 생성됩니다.
    • 150: 도형의 너비입니다. 150포인트의 너비를 가진 도형이 생성됩니다.
    • 150: 도형의 높이입니다. 150포인트의 높이를 가진 도형이 생성됩니다. 너비와 높이가 같으므로, 이 코드는 원을 생성합니다. 만약 너비와 높이가 다르면 타원이 생성됩니다.

 

●  Dim tbl  As Table

Dim tbl As Table은  테이블 객체를 다루기 위한 변수를 선언하는 구문입니다. 

Dim tbl  As Table 예제 코드

Sub 테이블_속성_변경()

    Dim tbl As Table ' 테이블 변수 선언

    ' 첫 번째 테이블을 tbl 변수에 할당 (테이블이 없을 경우 오류 발생)
    On Error Resume Next
    Set tbl = ActiveDocument.Tables(1)
    On Error GoTo 0

    If Not tbl Is Nothing Then ' 테이블이 존재하는 경우
        ' 테이블 테두리 스타일 변경
        tbl.Borders.Enable = True
        tbl.Borders.OutsideLineStyle = wdLineStyleSingle

        ' 테이블 정렬 변경
        tbl.Rows.Alignment = wdAlignRowCenter

        ' 테이블 셀 내용 변경
        tbl.Cell(1, 1).Range.Text = "새로운 내용"
    Else
        MsgBox "문서에 테이블이 없습니다."
    End If

End Sub

 

파워포인트에서 테이블 정보를 가져오는 코드들 입니다.

  • 테이블 개수 가져오기 예제 코드
Sub 테이블_개수_가져오기()

    Dim sld As Slide
    Dim shp As Shape
    Dim tableCount As Integer

    For Each sld In ActivePresentation.Slides
        tableCount = 0 ' 각 슬라이드마다 테이블 개수 초기화
        For Each shp In sld.Shapes
            If shp.HasTable Then
                tableCount = tableCount + 1
            End If
        Next shp
        Debug.Print "슬라이드 " & sld.SlideIndex & "의 테이블 개수: " & tableCount
    Next sld

End Sub

 

  • 테이블 위치 및 크기 정보 가져오기
Sub 테이블_위치_및_크기_가져오기()

    Dim sld As Slide
    Dim shp As Shape

    For Each sld In ActivePresentation.Slides
        For Each shp In sld.Shapes
            If shp.HasTable Then
                Debug.Print "슬라이드 " & sld.SlideIndex & ", 테이블 이름: " & shp.Name
                Debug.Print "  왼쪽 위치 (Left): " & shp.Left
                Debug.Print "  위쪽 위치 (Top): " & shp.Top
                Debug.Print "  너비 (Width): " & shp.Width
                Debug.Print "  높이 (Height): " & shp.Height
            End If
        Next shp
    Next sld

End Sub

 

  • 테이블 내용 가져오기
Sub 테이블_내용_가져오기()

    Dim sld As Slide
    Dim shp As Shape
    Dim tbl As Table
    Dim i As Integer, j As Integer

    For Each sld In ActivePresentation.Slides
        For Each shp In sld.Shapes
            If shp.HasTable Then
                Set tbl = shp.Table ' 테이블 객체 할당
                Debug.Print "슬라이드 " & sld.SlideIndex & ", 테이블 이름: " & shp.Name & " 내용:"

                For i = 1 To tbl.Rows.Count
                    Dim rowText As String
                    For j = 1 To tbl.Columns.Count
                        rowText = rowText & tbl.Cell(i, j).Shape.TextFrame.TextRange.Text & vbTab ' 탭으로 구분
                    Next j
                    Debug.Print rowText
                Next i
            End If
        Next shp
    Next sld

End Sub

 

  • 특정 이름의 테이블 정보 가져오기
Sub 특정_이름_테이블_정보_가져오기()

    Dim sld As Slide
    Dim shp As Shape
    Dim tblName As String

    tblName = "표 1" ' 찾을 테이블 이름

    For Each sld In ActivePresentation.Slides
        For Each shp In sld.Shapes
            If shp.HasTable And shp.Name = tblName Then
                Debug.Print "슬라이드 " & sld.SlideIndex & "에서 테이블 '" & tblName & "' 찾음:"
                ' 테이블 정보 처리 (위의 예제들을 활용)
                Debug.Print "  왼쪽 위치: " & shp.Left
                Exit Sub ' 테이블을 찾았으면 루프 종료 (같은 이름의 테이블이 여러 개 있을 경우 첫 번째 테이블만 처리)
            End If
        Next shp
    Next sld

    Debug.Print "테이블 '" & tblName & "'을 찾을 수 없습니다."

End Sub

 

by korealionkk@gmail.com

'VBA VB.Net Code' 카테고리의 다른 글

CELL 초기화  (0) 2025.01.04
데이터 베이스와 엑셀  (0) 2024.12.29
PowerPoint와 VBA] 소개  (0) 2024.12.28
EXCEL에 자동으로 이미지 삽입  (0) 2024.12.27
DataGridView  (1) 2024.12.15