PowerPoint Shape.Name を使用して名前を付ける。
Shape.ID をプラス、連番をShape.Nameにセットしたり。
同じ名前が許される不思議???
事前準備として、
パワーポイントで設置したオブジェクトに対して、
名前を付ける、名前を付け直す。
そんな処理をマクロで行ってみます。
上司・先輩から
スライド内の画像をシャッフルするマクロを作るので、
オブジェクト・画像に固有の名前を付けといて?
と言われました。
指示内容:
スライド内の画像の名前を
マクロ・VBAで使用しやすいように、
オブジェクトに名前を付ける
操作画像XXXと名前規則の指定を受ける。
www.youtube.com
https://www.youtube.com/watch?v=YcbjdXfk94A
目次
00:00 やりたいこと 実行結果
01:16 1.手作業でガンバッテ名前を付ける
02:13 2.選択されたシェイプに名前+IDを付け 固有の名前にする
05:36 3.名前は連番にしてください と 追加オーダーを受ける
09:28 あたま001や015など、0付きで桁をそろえた連番にしたい
11:17 3.1 気になること、同じ名前でエラーにならないの?
12:07 3.2 名称変更後と変更前のデフォルト コピペの違い?
13:43 4.終わりの挨拶
14:00 おまけ:次回動画のネタを先行して?
1.手作業でガンバッテ名前を付ける
ホーム 配置 オブジェクトの選択と表示
から
手作業で 操作画像XXX と 名前を付ける
2.選択されたシェイプに名前+IDを付け 固有の名前にする
PowerPoint.Shape
シェイプのオブジェクト
.Nameプロパティに値を代入して、
名前を変更します。
固有の名前にしたかったので、
.ID プロパティを使用します。
下記、サンプルコードです。
単純に
strNewName = InputBox("名前の頭 XXXは?", "名前入力", "名前XXX")
で、頭の名前を決めて(入力してもらい)、
objShape.Name = strNewName & objShape.Id '新しい名前をセットする
後ろにオブジェクト・シェイプのIDをプラスしただけです。
Option Explicit '選択されたシェイプに名前を付ける '入力された名前 + .ID で重複しないようにする '※連番でもよかったけど、IDを使ってみた。使ってみたかった・・・ Sub pp選択Shapeに名前プラスIDを付ける0601() If ActiveWindow.Selection.Type <> ppSelectionShapes Then '種類の判断 MsgBox "Shape図形やテキストボックスを選択してね" Exit Sub End If If ActiveWindow.Selection.ShapeRange.Count = 0 Then '件数の判断 MsgBox "Shape図形やテキストボックスを選択してね" Exit Sub End If Dim nPAGE As Integer Dim objSLD As PowerPoint.Slide 'スライド Dim objShape As PowerPoint.Shape 'シェイプ nPAGE = ActiveWindow.Selection.SlideRange.SlideIndex '現在選択しているページ Set objSLD = ActivePresentation.Slides(nPAGE) 'プレゼンの下、スライドnページをセット Dim strNewName As String '新しくつける名前の頭文字 strNewName = InputBox("名前の頭 XXXは?", "名前入力", "名前XXX") If strNewName = "" Then MsgBox "処理を中止しました、キャンセルします" Exit Sub End If Debug.Print "Id", "Name", "Type" Dim n As Long For n = 1 To ActiveWindow.Selection.ShapeRange.Count '選択された数までループ Set objShape = ActiveWindow.Selection.ShapeRange(n) '←この選択されたシェイプの名前を変更 Debug.Print objShape.Id, objShape.Name, objShape.Type objShape.Name = strNewName & objShape.Id '新しい名前をセットする DoEvents Next MsgBox "処理終了、配置 表示 から シェイプの名前を確認してください" DoEvents End Sub
3.名前は連番にしてください と 追加オーダーを受ける
完成したので、依頼者(上司・先輩)に報告、結果を見せると
依頼者:「確かに固有の名前、一意の名称になっているけど、歯抜けがイヤだなぁ」
まぁ、作成してて、同じこと考えたけど、
依頼者:「仕様変更、再オーダー、名前+連番にしてください」
思い付きで、コロコロと・・はじめから言ってよね・・・
なんて、
小芝居を挟みつつ、
objShape.Name = strNewName & n '連番にする
で、単純にできると思います。
下記、サンプルコードです。
'選択されたシェイプに名前を付ける '入力された名前 + 連番にする '※使い方で、重複した名前が付けられるので、注意すること・・ Sub pp選択Shapeに名前プラス連番を付ける0601() If ActiveWindow.Selection.Type <> ppSelectionShapes Then '種類の判断 MsgBox "Shape図形やテキストボックスを選択してね" Exit Sub End If If ActiveWindow.Selection.ShapeRange.Count = 0 Then '件数の判断 MsgBox "Shape図形やテキストボックスを選択してね" Exit Sub End If Dim nPAGE As Integer Dim objSLD As PowerPoint.Slide 'スライド Dim objShape As PowerPoint.Shape 'シェイプ nPAGE = ActiveWindow.Selection.SlideRange.SlideIndex '現在選択しているページ Set objSLD = ActivePresentation.Slides(nPAGE) 'プレゼンの下、スライドnページをセット Dim strNewName As String '新しくつける名前の頭文字 strNewName = InputBox("名前の頭 XXXは?", "名前入力", "名前XXX") If strNewName = "" Then MsgBox "処理を中止しました、キャンセルします" Exit Sub End If Debug.Print "Id", "Name", "Type" Dim n As Long For n = 1 To ActiveWindow.Selection.ShapeRange.Count '選択された数までループ Set objShape = ActiveWindow.Selection.ShapeRange(n) '←この選択されたシェイプの名前を変更 Debug.Print objShape.Id, objShape.Name, objShape.Type objShape.Name = strNewName & n '連番にする '頭0を付けたい時は = strNewName & Format(n, "000") などアレンジしてね DoEvents Next MsgBox "処理終了、配置 表示 から シェイプの名前を確認してください" DoEvents End Sub
3.1 気になること、同じ名前でエラーにならないの?
勘のいい視聴者:「連番処理、たまたま、動作してるでしょ?」
objShape.Name = strNewName & n '連番にする
で、
選択ミスなどで、同じ名前が残っていて、
エラーにならないの?
私も、気になっていたので、テストしてみます。
実は、同じ 画像1とか文字列1など、名称が同じでも認識する。
※嘘みたいなホントの話なので・・・
3.2 名称変更後と変更前のデフォルト コピペの違い?
あと、操作していて、気になったのが、
ア.デフォルトで、図形やテキストボックスを追加して、コピー貼り付けで増やした時
と
イ.名称変更後にコピー、貼り付けしたとき
この違いを実演して見せる。
ここも探らないとなぁ(内部的にはShape.Idで区別されているんだろうけど)
Shape.Nameが同じ・・・う~ん。。。
4.終わりの挨拶
いろいろ、脱線しましたが、
大量のオブジェクトに名前を付けてと言われたら、
このサンプルコードをアレンジして使ってみてください。
※対話式AI「Copilot」副操縦士のコパイロット様がパワーポイントに導入されたら、
こんなマクロや作業は用済みなんだけど、
あと数週間、数か月?待てないので使ってみてね。
おまけ:
画像をシャッフルするマクロ
作成中のマクロで遊ぶ。
次回の動画:
実験動画 マクロ パワポ スライド内 画像表示位置を入れ替えたい 単純に.Left .Topを入れ替えただけのテスト動画です
https://youtu.be/nrEzOnGEsZk
↑この動画で、大量の図形・画像オブジェクトの名前を変更したかったので、
今回の動画を作成しました。
次の動画も合わせてみてください。