メニュー

PowerPoint│選択した図形をロックする方法

powerpoint-lock-shapes

パワポで資料作成している時に図形を選択してしまったズレてしまう!

なんてことはあるあるですよね。

実はパワポで図形をロックする方法がありますので、そのやり方を紹介いたします。

すいみん

図形をロックして資料作成をより効率化しましょう!

海外でフリーランスをしているテクニカルアーティスト
ゲーム開発・映像制作・WEB制作等を請け負っています。
当ブログは作業効率化のための技術ブログです。

目次

PowerPointで図形をロック(固定)する方法

まずはパワーポイントの通常機能で図形をロックしてみます!

STEP
図形の切り取り

図形を作成して、切り取り(Ctrl+X)します。

STEP
スライド マスターにペースト

表示>スライド マスターに切り替えて、図形をペースト(Ctrl+V)

STEP
元のスライドに戻る

表示>標準を押して、通常表示に戻します。

以上で図形は選択できないロック状態になっています!

スライド マスターにオブジェクトに図形を配置すると、選択できない状態で表示されます。

元に戻したい時は、同様にスライド マスターを表示して、戻したい図形を選択してカット&ペーストしてやりましょう

パワーポイントのマクロを使って図形をロックする方法[応用]

先のスライドマスターへの移動コピーをマクロにしたものです。

STEP
選択した図形を固定するマクロの登録

まずAlt + F11でVBAのウインドウを起動します。

挿入>標準モジュールを選択、それを2つ作成します。

STEP
2つのマクロをコピペして登録

下記の2つのマクロをコピペしてあげます。

選択した図形を固定するマクロ
'図形をロックする
Public Sub lockShapes()
    Dim sh As Shape
    Dim n As Integer, m As Integer, k As Integer

    'エラーチェック
    Call preCheck

    '選択した図形をカット
    ActiveWindow.Selection.ShapeRange.Cut

    'ダミーマスターを作る
    Call makeDummyMaster(n)

    '選択した図形をダミーマスターに貼り付け
    ActivePresentation.Designs(n).SlideMaster.Shapes.Paste

    '選択したスライドにダミーマスターを適用
    m = ActiveWindow.Selection.SlideRange.SlideIndex
    k = ActiveWindow.Selection.SlideRange.CustomLayout.index
    ActivePresentation.Slides(m).CustomLayout = ActivePresentation.Designs(n).SlideMaster.CustomLayouts(k)

    '余分なダミーマスターを削除
    Call cleanDummyMaster

    'ダミーマスターの名前を整理
    Call renameDummyMaster

End Sub

'エラーチェック
Private Sub preCheck()

    '表示がスライドでない時は終了
    If cView <> "Slide" Then
        Debug.Print "スライド表示でない"
        End
    End If

    '選択範囲がシェイプでないときは終了
    If ActiveWindow.Selection.Type <> ppSelectionShapes Then
        Debug.Print "選択なし"
        End
    End If

End Sub


'ダミーマスターを作る
Private Sub makeDummyMaster(ByRef n As Integer)
    Dim i As Integer, j As Integer
    Dim d As Design

    i = ActiveWindow.Selection.SlideRange.SlideIndex
    j = ActivePresentation.Slides(i).Design.index

    Set d = ActivePresentation.Designs.Clone(ActivePresentation.Designs.item(j))

    d.Name = "DummyMST" & 0
    n = d.index

    Set d = Nothing

End Sub


'余分なダミーマスターを削除
Private Sub cleanDummyMaster()
    Dim d As Design
    Dim cl As CustomLayout
    Dim i As Integer
    Dim numD As Integer

    '不使用のダミーマスターを削除
    numD = ActivePresentation.Designs.Count
    For i = numD To 1 Step -1
        Set d = ActivePresentation.Designs(i)
        If InStr(d.Name, "DummyMST") <> 0 Then

            On Error Resume Next
            For Each cl In d.SlideMaster.CustomLayouts
                cl.Delete
            Next
            On Error GoTo 0

            If d.SlideMaster.CustomLayouts.Count = 0 Then d.Delete

        End If
    Next

    Set d = Nothing

End Sub

'ダミーマスターの名前修正
Private Sub renameDummyMaster()
    Dim d As Design
    Dim i As Integer

    i = 0
    For Each d In ActivePresentation.Designs
        If InStr(d.Name, "DummyMST") <> 0 Then
            i = i + 1
            d.Name = "DummyMST" & i & "tmp"
        End If
    Next

    i = 0
    For Each d In ActivePresentation.Designs
        If InStr(d.Name, "DummyMST") <> 0 Then
            i = i + 1
            d.Name = "DummyMST" & i
        End If
    Next

End Sub

'表示されているビュータイプを判定する関数
Private Function cView() As String
    Dim p As Pane

    For Each p In ActiveWindow.Panes
        If p.ViewType = ppViewSlide Then
            cView = "Slide"
            Exit Function
        ElseIf p.ViewType = ppViewSlideMaster Then
            cView = "Master"
            Exit Function
        End If
    Next
    cView = "Others"

End Function
固定した図形の戻し方すマクロ
'ロックした図形を元に戻す
Public Sub unlockShapes()
    Dim i As Integer
    Dim sld As Slide, sh As ShapeRange

    Call preCheckMaster

    ActiveWindow.Selection.ShapeRange.Cut

    i = ActiveWindow.View.Slide.Design.index

    Call ShowSlide

    For Each sld In ActivePresentation.Slides
        If sld.Design.index = i Then
            Set sh = sld.Shapes.Paste
            sh.ZOrder msoSendToBack
            sh.Select
            Set sh = Nothing
            End
        End If
    Next

End Sub

'エラーチェック
Private Sub preCheckMaster()

    '表示がスライドでない時は終了
    If cView <> "Master" Then
        Debug.Print "マスター表示でない"
        End
    End If

    '選択範囲がシェイプでないときは終了
    If ActiveWindow.Selection.Type <> ppSelectionShapes Then
        Debug.Print "選択なし"
        End
    End If

    'ダミースライド以外を選択しているときは終了
    If InStr(ActiveWindow.View.Slide.Design.Name, "DummyMST") = 0 Then
        Debug.Print "ダミースライドを選択していない"
        End
    End If

End Sub

'表示されているビュータイプを判定する関数
Private Function cView() As String
    Dim p As Pane

    For Each p In ActiveWindow.Panes
        If p.ViewType = ppViewSlide Then
            cView = "Slide"
            Exit Function
        ElseIf p.ViewType = ppViewSlideMaster Then
            cView = "Master"
            Exit Function
        End If
    Next
    cView = "Others"

End Function

2つのマクロのコピペが終えたら、VBAのウインドウを閉じましょう。

もしエラーが出てしまう場合は『’エラーチェック』の上に下記のコードを追加します。
'スライドを表示
Private Sub ShowSlide()
Application.ActiveWindow.ViewType = ppViewSlide
Application.ActiveWindow.ViewType = ppViewNormal
End Sub

STEP
図形をロックのマクロの使い方

図形を選択して、表示>マクロ>lockShapesで図形をロックできます

STEP
図形のロック解除の使い方

右下のウインドウアイコンをShift+クリックでスライド マスターへ移動します。

図形を選択して。表示>マクロ>unlockShapesで図形をロック解除できます。

まとめ

図形を固定化するスライドマスターの使い方は是非覚えておきましょう!


全記事一覧

  • URLをコピーしました!
目次