スライド画面に配置した「次のページに行く」ボタンを押す以外の操作では先のページに進まないようにするには、
どのようにVBAで制御すればいいですか?
たとえばクリックや右矢印ボタンでは先のページに進まないようにしたいのです。よろしくお願いいたします。
質問を勝手に2つに分割してからチャレンジしてみました。
(それと バージョンが2007です)
1.クリックや右矢印ボタンでは先のページに進まないようにしたい
2.スライド画面に配置した「次のページに行く」ボタンを押すにコードを書く
前、同じような質問
http://q.hatena.ne.jp/1278176601
[Powerpoint マクロ]
パワーポイントで、スライドショーを実行している間、特定の(例えば表示順が偶数番目の)スライドを表示したときに、外部の実行ファイルを動かしたいのですが、そのコードまたは、方法を記載しているWebページがあったら、教えていただけますでしょうか。Powerpointのバージョンは2002、WindowsXP上で動かします。
でコメントで答えたとき( http://q.hatena.ne.jp/1278176601#c181582 )
[PPT2000 アプリケーション レベルのイベント ハンドラーを作成します。
を参考にして、
Public WithEvents appevent As Application
なんて感じで、イベントを取得。
コイツを使ってみます。
'下記は標準モジュールに(上記のClass1 の名前で作成したイベントを使う・結びつける) Option Explicit Dim myobject As New Class1 'イベント処理を記載したクラス(クラスモジュールに処理を記載) Public nPage As Integer 'ページを動かしたくないので、現在ページを自分で管理 Sub スライドショーの開始() 'イベントが取りたいので、Applicationとクラスモジュールの結びつけ Set myobject.appevent = Application ActivePresentation.SlideShowSettings.Run 'スライドショーの開始 End Sub
'クラスモジュールに書く Class1 の名前で作成 Option Explicit ' PPT2000 アプリケーション レベルのイベント ハンドラーを作成します。 ' http://support.microsoft.com/kb/234184/ja を 参考にして WithEventsのテスト Public WithEvents appevent As Application Private Sub appevent_SlideShowBegin(ByVal Wn As SlideShowWindow) 'スライドショー開始時のイベント? 'ここで、いろいろと初期設定を行う? Debug.Print "_SlideShowBegin" nPage = 1 '初期化、1ページにする End Sub Private Sub appevent_SlideShowEnd(ByVal Pres As Presentation) MsgBox "end" End Sub Private Sub appevent_SlideShowNextClick(ByVal Wn As SlideShowWindow, ByVal nEffect As Effect) 'MsgBox "SlideShowNextClick page=" & Wn.View.CurrentShowPosition Debug.Print "_SlideShowNextClick " & Wn.View.CurrentShowPosition 'ページ数 'スライドショーのページを動かしたくないので、グローバル変数と比べる If nPage <> Wn.View.CurrentShowPosition Then 'ページが増えたり減ったりしたら Wn.View.GotoSlide nPage '強制的に自分が管理しているページに戻す End If End Sub Private Sub appevent_SlideShowOnNext(ByVal Wn As SlideShowWindow) Debug.Print "_SlideShowOnNext " & Wn.View.CurrentShowPosition 'テストでページ数 End Sub
クラスモジュールに WithEvents を作り、イベント処理を書きます。
(イベントに対して、処理がかけます)
グローバル変数で nPage を作り、ページ数を自分で管理します。
スライドショーのページが変化したときのイベント
_SlideShowNextClick
内で、
現在ページと自分で管理したページを比べて、
'スライドショーのページを動かしたくないので、グローバル変数と比べる
If nPage <> Wn.View.CurrentShowPosition Then 'ページが増えたり減ったりしたら
Wn.View.GotoSlide nPage '強制的に自分が管理しているページに戻す
End If
なんて感じで、強引に元のページに戻してみました。
※少し、画面がちらついてしまいますが・・・
動作・テスト動画
http://www.youtube.com/watch?v=MzmQ_UntHjQ
(↑YouTubeの操作動画です、こんな感じでバカやって作成してました(笑))
スライド画面に配置した「次のページに行く」ボタンを押す
を実現したかったので、
テキストボックスや図形を押したら、マクロを起動するようにしてみます。
テキストボックスには設定できなくて、
挿入 ―― 図形 ―― 動作設定ボタン で ボタンを配置してから、
ボタンを選択後・右クリックでマクロを結びつけます。
ボタンが押されたら、
Sub pagenext() nPage = nPage + 1 ActivePresentation.SlideShowWindow.View.Next End Sub
が起動されます。
中身は、管理しているページを+1して(nPage = nPage + 1)
単純に、ActivePresentation.SlideShowWindow.View.Next で 次ページを表示します。
表示されると、
Private Sub appevent_SlideShowNextClick
が走りますが、
If nPage <> Wn.View.CurrentShowPosition Then
を比べても同じなので、そのまま通過します。
動作・テスト動画
http://www.youtube.com/watch?v=flY21okTKO8
(↑YouTubeの操作動画です、こんな感じでバカやって作成してました(笑))
少し、イヤ、かなり小細工 入ってますがこんな感じで、
クリックや右矢印 の 移動を殺して、設置したボタン(動作設定ボタン)で移動してみました。
PowerPoint2007ですが、2003に応用できるといいなぁ・・と思いつつ、失礼します。
んっ、こんな大がかりな仕掛けを作らなくても、スライドショーのパラメーター設定でできたりして、、
なんて少々不安だったり。※クリックで誤操作(意図しないで次に行く)の防止は なんとなく パワーポイントの機能でありそうな・・・そんな気もしつつ
ken3memo様、ありがとうございます。
実に親切な図と開設で、たいへん助かりました。途中、2回ほどつまづいたのですが、キャプチャ図(ことに2番目の図と矢印)は助かりました。
おかげさまで、ばっちり動きました!! ありがとうございます!!
自分史上、最高のポイントをはずまさせていただきます!!