質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

844閲覧

PowerPoint VBA でスライドショーのショットカットツールバーを操作したい

OfficeNono

総合スコア15

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/04/13 15:15

編集2021/04/17 00:08

PowerPoint VBA
パワーポイントのスライドショーで「スライドショーの終了」を無効にしたうえで、マクロを登録したコンテキストメニューを追加したいと考えています。

右クリックのコンテキストメニューの操作は以下①のコードで可能でしたが、スライドショーのショートカットツールバーの操作方法がわかりません。

CommandBarsのコレクションには、ショートカットツールバーに相当するアイテムが見当たらないのですが、Commandbars以外にショートカットメニューのオブジェクトが存在するのでしょうか?

コンテキストメニューを表示したらcontorolのプロパティをdebag.printするようなコード(②③)を書けば判明するかとも考えましたが、それもうまくいきません。(Menu Bar とだけでます)

Windows10 office365 office2013

Sub Command_Custom_false()  Dim Mymenubar As CommandBar  Set Mymenubar = Application.CommandBars("Slide Show Browse")  Mymenubar.Controls("スライド ショーの終了(&E)").Enabled = False End Sub

②クラスモジュールに記述

Option Explicit Public WithEvents App As PowerPoint.Application Private Sub App_WindowBeforeRightClick(ByVal Sel As Selection, Cancel As Boolean) '※ 図形やスライド上で右クリックしたときに発生するイベント Cancel = True Debug.Print Application.CommandBars.ActiveMenuBar.Name MsgBox "WindowBeforeRightClick" End Sub

③標準モジュールに記述

Option Explicit Private cls As Class1 Public Sub Sample() Set cls = New Class1 Set cls.App = Application End Sub

イメージ説明


追記

Slide Show は3つあるみたいですね。
↓で、メニューが追加できるCommandBarに全部追加してみました。
Slid Showで操作できるのは、全画面表示のスライドショーと、発表者ビューの「・・・」ボタン
のようです。
やりたいことは、全画面表示の「・・・」ボタンのメニューをEnableプロパティを書き変えたり、ボタンを追加したりしたいです。
↓のコードで、captionが「スライド ショーの終了(&E)」のアイテムは3つありましたが、「スライド ショーの終了」のアイテムは無かったのでやはりCommandBarsではないのでしょうか...
または他にもエラーでボタン追加できなかったCommandBarsはあったので、itemが動的に変化するものがあるんでしょうか...
謎です。。。

vba

1Sub tuika() 2 Dim CommandBarItem As CommandBar 3 Dim CommandBarControlItem As CommandBarControl 4 5 'ずっと残るのでリセット 6 For Each CommandBarItem In Application.CommandBars 7 For Each CommandBarControlItem In CommandBarItem.Controls 8 On Error Resume Next: CommandBarControlItem.Reset: On Error GoTo 0 9 Next 10 On Error Resume Next: CommandBarItem.Reset: On Error GoTo 0 11 Next 12 13 Dim MyAddMenu As CommandBarButton 14 15 For Each CommandBarItem In Application.CommandBars 16 17 On Error Resume Next 18 Set MyAddMenu = CommandBarItem.Controls.Add 19 MyAddMenu.Caption = "ID=" & CommandBarItem.Id 20 21 On Error GoTo 0 22 If MyAddMenu Is Nothing Then 23 a = a & CommandBarItem.Name & ",ID=" & CommandBarItem.Id & ",notAdd" & vbCrLf 24 Else 25 a = a & CommandBarItem.Name & ",ID=" & CommandBarItem.Id & vbCrLf 26 End If 27 28 For i = 1 To CommandBarItem.Controls.Count 29 Set Myitem = CommandBarItem.Controls.item(i) 30 a = a & " " & Myitem.Caption & ",Visible=" & Myitem.Visible & ",Id=" & Myitem.Id & ",Type=" & Myitem.Type & vbCrLf 31 Next i 32 Set MyAddMenu = Nothing 33 Next 34 35Dim fso As Object 36Set fso = CreateObject("Scripting.FileSystemObject") 37Dim ts As Object 38Mypath = ActivePresentation.Path 39Mypath = Mypath & "\" & "menu.txt" 40Set ts = fso.CreateTextFile(Mypath, True, True) 41ts.Write (a) ' 書き込み 42ts.Close ' ファイルを閉じる 43End Sub

全画面表示
発表者ビュー
Window表示


030417追記
Spy++
Spy++

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず CommandBars("Slide Show") で、これが2つありますね。
スライド上と、下のメニューと。

VBA

1 Dim CommandBarItem As CommandBar 2 Dim CommandBarControlItem As CommandBarControl 3 4 'ずっと残るのでリセット 5 For Each CommandBarItem In Application.CommandBars 6 For Each CommandBarControlItem In CommandBarItem.Controls 7 On Error Resume Next: CommandBarControlItem.Reset: On Error GoTo 0 8 Next 9 On Error Resume Next: CommandBarItem.Reset: On Error GoTo 0 10 Next 11 12 Dim MyAddMenu As CommandBarButton 13 14 For Each CommandBarItem In Application.CommandBars 15 If CommandBarItem.Name = "Slide Show" And CommandBarItem.Position = msoBarPopup Then 16 Set MyAddMenu = CommandBarItem.Controls.Add 17 MyAddMenu.Caption = "追加Menu_" & CommandBarItem.Index 18 End If 19 Next 20

(すぐ反映されないときがあるし、なかなかしんどい (?_?))

投稿2021/04/14 02:45

FromMZ1500

総合スコア496

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

OfficeNono

2021/04/14 12:17

回答ありがとうございます。 発表者ビューの「・・・」ボタンのID等はわかったんですが、全画面表示スライドショーの「・・・」ボタンはわからずじまいです。 よい知恵があればお願いします。
FromMZ1500

2021/04/15 00:57

上のように For Eachで回せば見つかるのでは?
OfficeNono

2021/04/15 03:26

ボタン追加できたものもエラーになったものも全部テキストとして出力してるんですが出力したテキストを見ても該当するものがない、という状況です。 CommandBarsではないのでは?と考え出したんてますが他のオブジェクトを悉皆的に探すコードもよくわかりません。。。
FromMZ1500

2021/04/15 04:14

ID=1790のものかと思ってました。 当方Office2010で、どこのメニューか、実は?です。 spy++でウインドウ階層を調べたら、なにかヒントがつかめるかも。
OfficeNono

2021/04/17 00:12

spy++初めて使ってみました。(活用方法もよくわかってないです。すいません。) 該当部分っぽいところを質問に貼ってみたんですが、なにかヒントがみつかるでしょうか? 丸投げ質問ですいません。
FromMZ1500

2021/04/17 00:47

msoWorkPaneとかNUIPaneとかそのあたりに見えるキーワードとMenu item add とかをかけあわせてググってみて、たいした情報が得られなければ、たぶん無理なんでしょう。 アドイン開発する方向で同等なことが実現できないか?とか方針変更も検討されてみては。
OfficeNono

2021/04/17 09:15

よく調べてみるとオプションの詳細設定で表示したり非表示にしたりするツールバーなので、無理なのかもしれません。 やっぱりCommandbarじゃないのかもしれません。(ビジュアルもなんか吹き出しみたいになってますし。) このツールバーからは操作しないでね、と周知するとかの対応にしようかと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問