VBA로 특정 테이블의 글꼴, 배경 등 몇몇 주요서식을 복사해서
원하는 테이블에 서식만 복사할 수 있도록 만들어 보았습니다.
첨부한 TableFormatCopy1.pptm을 열고 테스트해보세요.
그림처럼 리본메뉴가 생성되는데
Copy Table Format 버튼은 테이블의 서식을 복사합니다.
Paste Table Format 은 복사된 서식을 선택된 테이블에 일괄 적용합니다.
현재 테이블의 전체적인 배경,
1행1열의 배경색, 투명도, 글자크기, 한영글꼴, 외곽선, 좌우상하정렬, 좌우여백
1행2열의 배경색, 투명도, 글자크기, 한영글꼴, 외곽선(상하좌우 테두리), 좌우상하정렬, 좌우여백
을 복사합니다.
리본메뉴에 기능을 추가한 실행 영상입니다.
추가기능으로 이용하려면 첨부한 pptm 을 ppam 형식으로 다시 저장해서 아래처럼 추가기능으로 설치하면
영구적으로 이 리본 메뉴를 이용할 수 있습니다.
질문자님의 PC에만 설치되고 다른 사용자는 매크로를 사용할 필요가 없습니다.
소스는 아래와 같습니다.
Option Explicit
Public T_Background As TableBackground
Public T_Title_Border As Borders
Public T_Title_ForeColor As Long
Public T_Title_ForeColor_Trans As Single
Public T_Title_Font_Name As String
Public T_Title_Font_NameFE As String
Public T_Title_Font_Size As Single
Public T_Title_Font_Color As Long
Public T_Title_Font_Bold As Boolean
Public T_Title_hAlign As Integer
Public T_Title_vAlign As Integer
Public T_Title_lMargin As Single
Public T_Title_rMargin As Single
Public T_Sub_Border As Borders
Public T_Sub_ForeColor As Long
Public T_Sub_ForeColor_Trans As Single
Public T_Sub_Font_Name As String
Public T_Sub_Font_NameFE As String
Public T_Sub_Font_Size As Single
Public T_Sub_Font_Color As Long
Public T_Sub_Font_Bold As Boolean
Public T_Sub_hAlign As Integer
Public T_Sub_vAlign As Integer
Public T_Sub_lMargin As Single
Public T_sub_rMargin As Single
Sub TableFormatCopy()
Dim Tbl As Table
Dim r As Long, c As Long
On Error GoTo ErrMsg:
Set Tbl = ActiveWindow.Selection.ShapeRange(1).Table
'T_Background_Color = tbl.Background.Fill.ForeColor.RGB
Set T_Background = Tbl.Background
r = 1: c = 1
Set T_Title_Border = Tbl.Cell(r, c).Borders
T_Title_ForeColor = Tbl.Cell(r, c).Shape.Fill.ForeColor.RGB
T_Title_ForeColor_Trans = Tbl.Cell(r, c).Shape.Fill.Transparency
T_Title_hAlign = Tbl.Cell(r, c).Shape.TextFrame.TextRange.ParagraphFormat.Alignment
T_Title_vAlign = Tbl.Cell(r, c).Shape.TextFrame.VerticalAnchor
T_Title_lMargin = Tbl.Cell(r, c).Shape.TextFrame.MarginLeft
T_Title_rMargin = Tbl.Cell(r, c).Shape.TextFrame.MarginRight
With Tbl.Cell(r, c).Shape.TextFrame.TextRange.Font
T_Title_Font_Name = .Name
T_Title_Font_NameFE = .NameFarEast
T_Title_Font_Size = .Size
T_Title_Font_Color = .Color.RGB
T_Title_Font_Bold = .Bold
End With
r = 2: c = 1
Set T_Sub_Border = Tbl.Cell(r, c).Borders
T_Sub_ForeColor = Tbl.Cell(r, c).Shape.Fill.ForeColor.RGB
T_Sub_ForeColor_Trans = Tbl.Cell(r, c).Shape.Fill.Transparency
T_Sub_hAlign = Tbl.Cell(r, c).Shape.TextFrame.TextRange.ParagraphFormat.Alignment
T_Sub_vAlign = Tbl.Cell(r, c).Shape.TextFrame.VerticalAnchor
T_Sub_lMargin = Tbl.Cell(r, c).Shape.TextFrame.MarginLeft
T_sub_rMargin = Tbl.Cell(r, c).Shape.TextFrame.MarginRight
With Tbl.Cell(r, c).Shape.TextFrame.TextRange.Font
T_Sub_Font_Name = .Name
T_Sub_Font_NameFE = .NameFarEast
T_Sub_Font_Size = .Size
T_Sub_Font_Color = .Color.RGB
T_Sub_Font_Bold = .Bold
End With
Exit Sub
ErrMsg:
MsgBox Err.Description, vbCritical
End Sub
Sub TableFormatPaste()
Dim shpRng As Shape
Dim Tbl As Table
Dim r As Long, c As Long
Dim i As Integer
If T_Sub_ForeColor = 0 Then MsgBox "Copy a Table format first": Exit Sub
On Error GoTo ErrMsg:
For Each shpRng In ActiveWindow.Selection.ShapeRange
Set Tbl = shpRng.Table
'T_Background_Color = tbl.Background.Fill.ForeColor.RGB
Set T_Background = Tbl.Background
For r = 1 To Tbl.Rows.Count
For c = 1 To Tbl.Columns.Count
If r = 1 Then
On Error Resume Next
'Set tbl.Cell(r, c).Borders = T_Title_Border
For i = 1 To T_Title_Border.Count
Tbl.Cell(r, c).Borders(i).Visible = T_Title_Border(i).Visible
Tbl.Cell(r, c).Borders(i).Weight = T_Title_Border(i).Weight
Tbl.Cell(r, c).Borders(i).DashStyle = T_Title_Border(i).DashStyle
Tbl.Cell(r, c).Borders(i).ForeColor.RGB = T_Title_Border(i).ForeColor.RGB
Next i
Tbl.Cell(r, c).Shape.Fill.ForeColor.RGB = T_Title_ForeColor
Tbl.Cell(r, c).Shape.Fill.Transparency = T_Title_ForeColor_Trans
Tbl.Cell(r, c).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = T_Title_hAlign
Tbl.Cell(r, c).Shape.TextFrame.VerticalAnchor = T_Title_vAlign
Tbl.Cell(r, c).Shape.TextFrame.MarginLeft = T_Title_lMargin
Tbl.Cell(r, c).Shape.TextFrame.MarginRight = T_Title_rMargin
With Tbl.Cell(r, c).Shape.TextFrame.TextRange.Font
.Name = T_Title_Font_Name
.NameFarEast = T_Title_Font_NameFE
.Size = T_Title_Font_Size
.Color.RGB = T_Title_Font_Color
.Bold = T_Title_Font_Bold
End With
Else
'Set tbl.Cell(r, c).Borders = T_Sub_Border
For i = 1 To T_Sub_Border.Count
'tbl.Cell(r, c).Borders(i).Style = T_Sub_Border(i).Style
Tbl.Cell(r, c).Borders(i).Visible = T_Sub_Border(i).Visible
Tbl.Cell(r, c).Borders(i).Weight = T_Sub_Border(i).Weight
Tbl.Cell(r, c).Borders(i).DashStyle = T_Sub_Border(i).DashStyle
Tbl.Cell(r, c).Borders(i).ForeColor.RGB = T_Sub_Border(i).ForeColor.RGB
Next i
Tbl.Cell(r, c).Shape.Fill.ForeColor.RGB = T_Sub_ForeColor
Tbl.Cell(r, c).Shape.Fill.Transparency = T_Sub_ForeColor_Trans
Tbl.Cell(r, c).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = T_Sub_hAlign
Tbl.Cell(r, c).Shape.TextFrame.VerticalAnchor = T_Sub_vAlign
Tbl.Cell(r, c).Shape.TextFrame.MarginLeft = T_Sub_lMargin
Tbl.Cell(r, c).Shape.TextFrame.MarginRight = T_sub_rMargin
With Tbl.Cell(r, c).Shape.TextFrame.TextRange.Font
.Name = T_Sub_Font_Name
.NameFarEast = T_Sub_Font_NameFE
.Size = T_Sub_Font_Size
.Color.RGB = T_Sub_Font_Color
.Bold = T_Sub_Font_Bold
End With
End If
Next c
Next r
Next shpRng
Exit Sub
ErrMsg:
MsgBox Err.Description, vbCritical
End Sub
파일 첨부합니다.
[2021.12.20] 제목줄과 바로 다음줄 뿐만 아니라 세번째 줄의 서식도 홀짝 번갈아가면 복사하는 버전을 추가합니다.
또한 복사한 테이블 서식을 모든 슬라이드의 테이블에 적용하는 버튼도 추가했습니다.
[2021.12.21] 이전에는 아래의 1,2,3번 영역을 반영했다면 이번에는 제목줄 아래에 2행 이후의 1열들(아래 4번 영역)의 표 속성이 다른 셀들과 다른 경우를 반영한 버전입니다.
[2021.12.27.] 테이블 전체가 아니라 하나의 셀 속성을 복사해서 다른 선택된 셀 들에 복사하거나 혹은 테이블전체에 복사하는 기능을 추가했습니다.
[2022.02.05.] Table(표)의 Border 와 관련해서 버그가 많네요. 특정 셀의 대각선.Visible 속성이나 선을 보이고 감추는 것과 관련해서 작동하지 않는 경우가 많습니다. 그래서 선을 감출 때 .Visible 속성이 작동하지 않아 .Transparancy 속성의 100으로 주는 경우가 많습니다. 차라리 선이 없는 경우 아예 속성을 부여하지 않는 것이 좋겠습니다.
일단 어찌해서 대체로(?) 작동하게 수정한 버전입니다.
(아래는 추가기능(ppam)으로 변환한 파일입니다. 항상 사용할 수 있는 추가기능으로 사용하는 방법은 위를 참고하세요.)
'PPT+VBA' 카테고리의 다른 글
[Split TextBox] 텍스트박스 자동 분할 (2) | 2020.04.02 |
---|---|
파워포인트 2019에서 달라진, 추가된 기능들 요약 (0) | 2020.04.01 |
도넛모양 다이아그램 만들기 (0) | 2020.03.11 |
여러개의 빈줄이 있는 슬라이드 자동 추가 (0) | 2020.03.05 |
PPT 실시간 시계 혹은 타이머 추가 v2 (8) | 2019.12.21 |
PPT 실시간 시계 또는 타이머 추가 (26) | 2019.12.17 |
PPT 한글, 영문 폰트 및 기타 속성 일괄 변경하기 (19) | 2019.10.29 |
파워포인트에서 메뉴-서브메뉴 시스템 구현 (1) | 2019.09.05 |
최근댓글