PowerPoint (一般・VBA)

PowerPoint 一般・VBAに関する話題を扱うフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 11 Pro : Microsoft 365)
PowerPointに画像挿入した際のオブジェクト名
投稿日時: 25/03/04 13:54:11
投稿者: ひろと

PowerPointに画像挿入した際のオブジェクト名は、図 1等の汎用名ですが、これを自動的に元のファイル名(〜.jpg等)にする方法はありますか?
可能ならVBAなしが良いです。
 
よろしくお願いします。

回答
投稿日時: 25/03/04 17:07:33
投稿者: sk

引用:
PowerPointに画像挿入した際のオブジェクト名は、図 1等の汎用名ですが、
これを自動的に元のファイル名(〜.jpg等)にする方法はありますか?

「ユーザーによって手動で画像が挿入されたのと同時に
という意味も含んでいるならば、VBA でも不可能です。
 
・PowerPoint には「図形が挿入された時」を検知するイベントが
 実装されておらず、「手動で挿入された画像」を特定、参照する手段がない。
 
・埋め込み形式で挿入されたオブジェクトについては
 元のファイルパスに関する情報が保持されないため、
 挿入した後に元のファイル名を追跡することは不可能である。
 (パスが保持されるのはリンク形式で挿入されたオブジェクトだけ)
 
例えば「挿入したい画像ファイルの指定(同時にパスの保持)」、
「画像(図形)の挿入」、「図形のリネーム」という一連の操作を
VBA によって自動化する場合でもなければ無理でしょう。

投稿日時: 25/03/04 17:16:48
投稿者: ひろと

skさん
 
コメントありがとうございます。
 
理想はエクスプローラーでサムネイル表示している状態からドラッグドロップで挿入し、
その画像のオブジェクト名をファイル名にすることでしたが、無理そうとのこと教えて
いただきありがとうございます。
 
アドバイス頂いた内容をエクセルで画像の挿入のマクロ記録やGetOpenFilenameで試してから
PowerPoint用に調整して・・・を繰り返して仕上げてみようと思います。
なぜPowerPointにはマクロ記録やppamの簡単な編集が無いのか。。
 

回答
投稿日時: 25/03/04 17:27:32
投稿者: Suzu

既に挿入済み の ファイル ではなく、新たに挿入する際に使える方法なら。
(リンク以外の 挿入済み の 写真オブジェクトは元々の画像ファイル名を持っていないかったはず)
 
新たに挿入する際に使える方法として
 
 一般機能という事なら、フォトアルバム機能を使えば可能かと。
  挿入タブ 画像 の フォトアルバム-新しいフォトアルバム
   1. アルバムの内容 で 写真の挿入元 - ファイルディスク から、挿入したい画像ファイルを選択
   2. アルバムのレイアウト から 写真のレイアウト - 2枚の写真 または 4枚の写真 を選択
   3. アルバムの内容 写真のオプション の 全ての写真のキャプション にチェックを入れ 作成
  を行えば、新規プレゼンテーションに、ファイル名も一緒になった画像が挿入されます。
    必要に応じ、それらを 必要なスライドにコピペでしょうか。
 
  VBA という事なら、リボン等に配置したボタンに
   ファイル選択ダイアログ表示 → 写真・ファイル名を記載したテキストボックス を挿入
   のVBA を登録するくらいでしょうか。

投稿日時: 25/03/05 10:33:19
投稿者: ひろと

skさん
 
画像のD&Dは叶いませんでしたが、それ以外はひとまずやりたいことが出来ました。
ありがとうございました。
 VBAでダイアログ→選択画像のファイル名を格納→画像貼付→画像オブジェクト名を格納したファイル名に書き換え。←QATに登録
フォトアルバム機能も試しましたが、ファイル名のテキストボックス挿入では、オブジェクト2個を常に貼り付ける必要があり、レイアウトの邪魔&コピー忘れで元画像に辿れない(Everythingでの検索想定)と考え、今回は止めました。
 
本当は上記をリボンのパワポのオプションで追加した既存タブ(自分が良く使う機能をまとめたもの)に追加登録したいのですが、方法がよく分からないため、別途学ぼうと思います。

回答
投稿日時: 25/03/05 14:53:06
投稿者: Suzu

引用:
フォトアルバム機能も試しましたが、ファイル名のテキストボックス挿入では、オブジェクト2個を常に貼り付ける必要があり、レイアウトの邪魔&コピー忘れで元画像に辿れない(Everythingでの検索想定)と考え、今回は止めました。

写真とテキストボックスがグループ化された状態になっていませんか?
 
2つがひとつになっていたとしても、
  オブジェクトの選択と表示 に、一覧として表示される方が管理はしやすいかもしれませんね。
 
 
引用:
リボンのパワポのオプションで追加した既存タブ(自分が良く使う機能をまとめたもの)に追加登録したい
引用:
←QATに登録

【アドイン】タブ ではなく、別タブに入れたいならちょっと面倒ですけど
クイックアクセスツールバーへの登録に、PowerPoint.officeUI の編集を使って登録しているのであれば
リボン登録は、さほど変わりませんよ。
 
PowerPointでマクロをアドイン化しリボンに追加する方法
https://ppdtp.com/powerpoint/macro-custom-ui/
 
PowerPointアドインを作る手順の概要
https://qiita.com/nkay/items/411ab09a0975aa48a449
 
PowerPointマクロをクイックアクセスツールバーに登録する方法
https://qiita.com/FollowUser/items/25604896eb78c8d3a053
 
 
 
途中まで作っていたアドイン登録用 VBAです。
写真用 FilePickerはよく使うので 関数化しています 参考まで。。
Sub Auto_Open()
  With Application.CommandBars("Menu Bar")
      With .Controls.Add(Type:=msoControlButton)
        .Caption = "Insert_Picture_Filename"
        .OnAction = "InsertPictureFilename"
        .TooltipText = "Insert picture with filename"
        .FaceId = 218
      End With
    End With
End Sub

Sub Auto_Close()
  Application.CommandBars("Menu Bar").Controls("Insert_Picture_Filename").Delete
End Sub

Sub InsertPictureFilename()
  Dim var_List As Variant
  Dim i As Long

  '要参照設定 Microsoft Scripting Library
  Dim FSO As Scripting.FileSystemObject

  var_List = PictureFilePicker(True)

  If IsArray(var_List) = False Then Exit Sub

  Set FSO = CreateObject("Scripting.FileSystemObject")

  For i = LBound(var_List) To UBound(var_List)
    With ActiveWindow.Selection.SlideRange.Shapes.AddPicture(var_List(i), msoFalse, msoTrue, 10 * i, 10 * i)
      .Width = 300
      .Name = FSO.GetBaseName(var_List(i))
    End With
  Next
End Sub

Public Function PictureFilePicker(Optional MultiSelect As Boolean = False) As Variant
  Dim var_FileList As Variant
  Dim i As Long
  Dim j As Long

  With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "写真選択"
    .Filters.Clear
    .Filters.Add "JPEGファイル", "*.jpg;*.jpeg"
    .AllowMultiSelect = MultiSelect

    If .Show = True Then
      i = .SelectedItems.Count
      ReDim var_FileList(1 To i)
      For j = 1 To i
        var_FileList(j) = .SelectedItems(j)
      Next
    End If
  End With
  PictureFilePicker = var_FileList
End Function

投稿日時: 25/03/05 15:48:50
投稿者: ひろと

Suzuさん
 
コメントありがとうございます。
 
QAT登録は、以下のURLを参考にppamファイルのcustomUI.xmlを編集する方法でやっています。
https://www.ka-net.org/blog/?p=8488
同様の方法でpptmでリボン登録→ppam内の何らかのファイル編集で何とかなるのでは?と挑戦、実現できず保留。提示いただいたURL1つ目には過去辿り着いていたので並行して真似して、新規タブには登録できたが、詰め合わせセットタブには組み込めず・・・の状況でした。2つ目、3つ目を腰を据えて読み頑張ってみます。ありがとうございます。
 
最後に私が(別サイトも参考にしながら)作成したコードですが、Suzuさんが作成くださったものと似たような感じに落ち着いた印象です。
CommandBars("Menu Bar")は未踏なので、ゆっくり理解しようと思います。
よく使う機能を関数化する考えもなかったので参考にします。(私にはActiveSlideぐらいからと思っています)

Sub 画像挿入()
Dim ActiveSlide As Slide
With Application.FileDialog(msoFileDialogFilePicker)
 .Filters.Add "画像", "*.jpg;*.jpeg;*.png;*.gif;*.tif:*.tiff;*.bmp;*.psd;*.webp;*.svg;*.heif;*.raw;*.eps"
 If .Show = False Then
  .Filters.Clear
  Exit Sub
 Else
  .Filters.Clear
  Set 写真 = .SelectedItems
 End If
End With

Set ActiveSlide = ActivePresentation.Slides(ActiveWindow.Selection.SlideRange.SlideIndex)
With ActiveSlide
 For i = 1 To 写真.Count
  Set 画像 = .Shapes.AddPicture( _
   FileName:=写真(i), _
   LinkToFile:=msoFalse, _
   SaveWithDocument:=msoTrue, _
   Top:=0, _
   Left:=0)
  With 画像
   .Name = Dir(写真(i))
   .LockAspectRatio = msoTrue
   If .Width > .Height Then
    .Width = 400
   Else
    .Height = 400
   End If
   .Top = (ActiveSlide.CustomLayout.Height - .Height) / 7 + 20 * (i - 1)
   .Left = (ActiveSlide.CustomLayout.Width - .Width) / 7 + 20 * (i - 1)
   With .Glow
    .Color.RGB = RGB(255, 255, 255)
    .Transparency = 0
    .Radius = 2
   End With
  End With
 Next i
End With
End Sub

回答
投稿日時: 25/03/10 12:48:58
投稿者: Suzu

リボン上の既存(ユーザーカスタム含む)タブに対し、XMLを使いボタンを追加できないか
色々してみたんですけど、うまく行かず・・PowerPointに限らず資料を探してみたら
 
【初心者備忘録】
[リボン・カスタマイズ]組み込みのグループに独自のコントロールを追加できるのか?
https://www.ka-net.org/blog/?p=16187
 
 

引用:
『例えばホームタブにある「配置」グループの「右揃え」ボタンの後ろに独自のボタンを追加できますか?』とのご質問をいただきましたので、今回は久しぶりのリボンUIネタです。
 
最初に結論から言ってしまうと、残念ながらできません。

 
はい。。詰みました。。
 
きぬあささんが、代用案については提示されてくださっていますのでそちらをご覧ください。

トピックに返信