PowerPoint (一般・VBA)

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

 
(Windows 10 Pro : PowerPoint 2016)
クリックの回数で分岐するスライドのVBA
投稿日時: 19/10/10 12:25:19
投稿者: okaisa

以下のスライドを作成したいとかんがえています。
 
〇スライド1・2・3(3枚)
〇スライド1にコマンドボタンを設置
〇スライド1で5回クリックしたあとにコマンドボタンをクリックすると「スライド2」へジャンプ,それ以外の回数では「スライド3」にジャンプ
 
という内容です。
 
標準モジュールは以下の内容です。
Sub sdShowStart()
Set x.myppAp = Application
i = 0
Application.Presentations(ppFileName).SlideShowSettings.Run
End Sub
 
クラスモジュールは以下の内容です
Private Sub myppAp_SlideShowNextBuild(ByVal wn As SlideShowWindow)
If wn.View.Slide.SlideIndex = 1 Then
    i = i + 1
End If
End Sub
 
スライド1のコードは以下の内容です
Private Sub CommandButton1_Click()
If i = 5 Then
    Application.SlideShowWindows(1).View.GotoSlide 3
Else
    Application.SlideShowWindows(1).View.GotoSlide 2
End If
End Sub
 
・・・しかし,正しく動作しません。
どの回数でクリックしても,スライド3にしかジャンプしません。
どこにミスがありますでしょうか?
なにとぞご指導お願いいたします。
 

回答
投稿日時: 19/10/10 18:34:57
投稿者: sk

引用:
〇スライド1・2・3(3枚)
〇スライド1にコマンドボタンを設置
スライド1で5回クリックしたあとにコマンドボタンをクリックすると
「スライド2」へジャンプ,それ以外の回数では「スライド3」にジャンプ

・そもそも何故「 5 回クリック」なのか。
 (アニメーションが全く設定されていないプレゼンテーションファイルの場合、
  3 回クリックしただけでスライドショーが終わってしまう。
  SlideShowNextBuild イベントについて後述されているので、
  実際には何らかのアニメーションが仕込まれているはず)
 
引用:
Sub sdShowStart()
Set x.myppAp = Application
i = 0
Application.Presentations(ppFileName).SlideShowSettings.Run
End Sub

・変数 x(恐らく何かのクラスのインスタンス)や
 変数 i(恐らく Integer 型か Long 型)は
 どこで宣言されているのか。

回答
投稿日時: 19/10/10 21:33:33
投稿者: んなっと

試してみてください。
 
 
●クラスモジュール
 
Public WithEvents myppAp As Application
Private Sub myppAp_SlideShowNextBuild(ByVal Wn As SlideShowWindow)
  If Wn.View.Slide.SlideIndex = 1 Then
    i = i + 1
  End If
End Sub
Private Sub myppAp_SlideShowEnd(ByVal Pres As Presentation)
  i = 0
  startFlg = False
  Set X = Nothing
End Sub
 
 
●標準モジュール
 
Public X As Class1 '上のクラス名がClass1のとき
Public startFlg As Boolean '最初一回だけ
Public i As Long
Sub OnSlideShowPageChange(ByVal Wn As SlideShowWindow)
  If startFlg = False Then
    startFlg = True
    i = 0
    Set X = New Class1
    Set X.myppAp = Application
  End If
End Sub
Sub OnSlideShowPreviousBuild(ByVal Wn As SlideShowWindow)
  If Wn.View.Slide.SlideIndex = 1 Then
    i = i - 1
  End If
End Sub

回答
投稿日時: 19/10/10 21:37:39
投稿者: んなっと

最近のバージョンではSlideShowOnPreviousイベントもあります。
OnSlideShowPreviousBuildを使うのは、古いバージョンとの互換性を考えてのことです。

投稿日時: 19/10/11 09:26:17
投稿者: okaisa

お返事ありがとうございます。
情報不足ですみません。
そうなんです。
アニメーション効果を10設定してあり,5回クリック後にコマンドボタンをクリックすることで分岐することをやりたかったのです。
試してみます。

投稿日時: 19/10/11 12:06:13
投稿者: okaisa

んなっとさん
コメントありがとうございます。
そのまま入れてみたのですが,エラーは出ないものの分岐せずスライド2に飛んでしまいます。
スライド1のコマンドボタンについては,変更すべきところはありますか?
ご指導お願いいたします。

回答
投稿日時: 19/10/11 12:32:11
投稿者: んなっと

同じです。
  
Slide1
  
Private Sub CommandButton1_Click()
  If i = 5 Then
    Application.SlideShowWindows(1).View.GotoSlide 3
  Else
    Application.SlideShowWindows(1).View.GotoSlide 2
  End If
End Sub
  
新規プレゼンテーションで試してください。余計なものがあるといけないので。
普通にスライドショーを実行します。マクロからスライドショー実行ではなく。
 
おそらく「できません」となりそうですが...時間の無駄かも。

投稿日時: 19/10/11 14:01:06
投稿者: okaisa

んなっとさんお返事ありがとうございます。
 
お察しのとおり,まだ正常動作しません・・・
 
なんとか完成したいのですが,クラスモジュールと標準モジュールのプロシージャの設定は何にすればよいでしょうか?
標準モジュール
クラスモジュール
コマンドボタン
のほかにVBAを設定しなければならないところはありますか?
よろしくお願いいたします。

投稿日時: 19/10/11 14:17:40
投稿者: okaisa

参考までに作ったスライドの情報を載せます。
https://drive.google.com/open?id=1RJUpaCts2LbV5ph1Qbl_EpEvgekwWt1x
 
ご指導お願いします。

回答
投稿日時: 19/10/11 15:02:11
投稿者: んなっと

PowerPoint VBAでイベントを利用する内容としては、基礎的なものです。
これができないならあきらめましょう。

投稿日時: 19/10/19 11:00:27
投稿者: okaisa

いろいろ修正しているのですが,うまくいきません。
おおもとの設定で確認すべきところはあるでしょうか?
ご迷惑をおかけして申し訳ありません。
よろしくお願いいたします。

トピックに返信