アプリ版:「スタンプのみでお礼する」機能のリリースについて

PPTの VBAは初心者です。(Excelでは少々かじってますが)
PPTのスライドショーで コマンドボタンを押したときに
Shape Objectを少しずつ移動させたいと以下のようなコードを書きました。

With ActivePresentation.Slides(1)
.Shapes("aa").Top = 50
.Shapes("aa").Left = 100
Sleep (1000)
' MsgBox ("---1")
.Shapes("aa").Top = 80
.Shapes("aa").Left = 150
Sleep (1000)
' MsgBox ("---2")
.Shapes("aa").Top = 110
.Shapes("aa").Left = 200
End With

しかし、結果は3秒後に最後の位置にいきなり移動してしまいます。
コメントアウトしている MsgBox を実行すると(そこで停止しますが)
途中の位置も表示されます。
どうも途中では再描画されないみたいですので
Application.Visible = msoFalse / msoTrue
などで再描画出来ないかと思ったのですが、
「実行時エラー: Application(不明なメンバー):無効な要求です。アプリケーションウインドウを非表示に設定することは出来ません。」
が返されてしまいます。
Accessには Repaint とか SreenUpdating などが使えそうな記事があるのですが
PowerPointでは難しそうです。
どなたか、再描画の方法または Shapeが見た目に移動するコードを
教えて頂けませんか。

A 回答 (3件)

DoEvents を使うのはいかがでしょう?



.Shapes("aa").Top = 50
.Shapes("aa").Left = 100
' MsgBox ("---1")
Sleep (1000)
DoEvents


何か良い戻り値があれば、、それを拾って次に進むとか、、
あてずっぽうですが、
Dim ShapL As Single
 With ActivePresentation.Slides(1)
 ShapL = .Shapes("aa").Left
  .Shapes("aa").Top = 50
  .Shapes("aa").Left = 100
 Do
  Sleep (1000)
  DoEvents
 Loop While ShapL = .Shapes("aa").Left
    • good
    • 0
この回答へのお礼

Qchan1962 さん
ありがとうございます。
教えていただいた DoEvents で所望の途中経過が表示されました。
多分 O/Sに処理を一旦渡して戻るときに再描画されるということなんですね。
DoEvents を入れてループを回したら、私の環境で 15msec/1回 の
時間がかかっているようです。
質問に記述したコード例はかなり間延びした動作ですので全く問題ないのですが
欲を言えば、汎用性を持たせるには もう少し処理時間を縮めたい!

お礼日時:2020/05/01 19:11

DoEventsは他のアプリケーションを操作する時によく使われる手法と理解しています。


本当は、作画が終わった時に返される戻り値があれば良いと思いました。回答したループを抜ける条件が
それに当たるかは、判りません。

>DoEvents を入れてループを回したら、私の環境で 15msec/1回 の時間がかかっているようです。

画像がどの程度の大きさなのか、その作画処理時間がどの位かかるのかにもよると思います。
バックグランドの処理にも影響されそうですし、一定にするのはアプリケーション上の処理なので難しいのではないでしょうか。

かくかくした動きを無くしたいのであれば、Animation系の操作が向いているのかも知れません。

申し訳ないのですが、私自身、PowerPoint VBAを使う事が無いので、powerpointリファレンスを参考にしてみてはいかがでしょう。

https://docs.microsoft.com/ja-jp/office/vba/api/ …
    • good
    • 0
この回答へのお礼

ありがとう

何度もありがとうございます。
今回 実は表示にはそれほどこだわってはいませんでした。
(うまく行けば いずれ、挿入した画像をゆっくりズームさせたり、左右に移動させたり
ということはしたいと思っていましたが)
むしろ私がこだわったのは、図形などの移動、操作処理は Excel(表計算)よりも
PowerPoint(視覚訴求が目的)の方が重視されそうな気がするのに、
何故か操作した結果が表示されない > 反映するにはその度に DoEvents を噛ませないといけない
ということに納得できなかったからです。
私が試した限り、(DoEventsを挿入しなければ)スライドショー中に VBAコードで
Shapeなどを操作しても、画像を貼り付けても、画面に反映されるのは、
そのサブルーチンを抜けるとき、ではプレゼンテーションにプログラムを
記述する意味合いが無くなってしまいそうな気がして、何のための VBA?
と感じたからでした。
確かに Animation系の 操作があるようですが、こっちはかなりハードルが高そうで・・・
いずれにしても、いろいろ教えていただき、ありがとうございました。
勉強になりました。

お礼日時:2020/05/02 20:33

ググっただけで検証はしてません。



https://note.com/nalulabo/n/n5d8b6b7e8351
    • good
    • 0
この回答へのお礼

めぐみんさん
ありがとうございます。
リンク先のコードは Excelのようで PPT で確認したところ
ActivePresentation とか Application Objectで Calculateメソッドを
試しましたが「メソッドまたはデータメンバーが・・・」とエラーになります。
またオブジェクトブラウザで PowerPoint内で Calculate を検索しましたがヒットしませんでした。
Shapeの利用シーンは PPTの方が多いように思うのですが
意外とアニメーションの例が少ないので困っています。(涙;;;)

お礼日時:2020/04/29 23:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A