
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が見た目に移動するコードを
教えて頂けませんか。
No.2ベストアンサー
- 回答日時:
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
Qchan1962 さん
ありがとうございます。
教えていただいた DoEvents で所望の途中経過が表示されました。
多分 O/Sに処理を一旦渡して戻るときに再描画されるということなんですね。
DoEvents を入れてループを回したら、私の環境で 15msec/1回 の
時間がかかっているようです。
質問に記述したコード例はかなり間延びした動作ですので全く問題ないのですが
欲を言えば、汎用性を持たせるには もう少し処理時間を縮めたい!
No.3
- 回答日時:
DoEventsは他のアプリケーションを操作する時によく使われる手法と理解しています。
本当は、作画が終わった時に返される戻り値があれば良いと思いました。回答したループを抜ける条件が
それに当たるかは、判りません。
>DoEvents を入れてループを回したら、私の環境で 15msec/1回 の時間がかかっているようです。
画像がどの程度の大きさなのか、その作画処理時間がどの位かかるのかにもよると思います。
バックグランドの処理にも影響されそうですし、一定にするのはアプリケーション上の処理なので難しいのではないでしょうか。
かくかくした動きを無くしたいのであれば、Animation系の操作が向いているのかも知れません。
申し訳ないのですが、私自身、PowerPoint VBAを使う事が無いので、powerpointリファレンスを参考にしてみてはいかがでしょう。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
何度もありがとうございます。
今回 実は表示にはそれほどこだわってはいませんでした。
(うまく行けば いずれ、挿入した画像をゆっくりズームさせたり、左右に移動させたり
ということはしたいと思っていましたが)
むしろ私がこだわったのは、図形などの移動、操作処理は Excel(表計算)よりも
PowerPoint(視覚訴求が目的)の方が重視されそうな気がするのに、
何故か操作した結果が表示されない > 反映するにはその度に DoEvents を噛ませないといけない
ということに納得できなかったからです。
私が試した限り、(DoEventsを挿入しなければ)スライドショー中に VBAコードで
Shapeなどを操作しても、画像を貼り付けても、画面に反映されるのは、
そのサブルーチンを抜けるとき、ではプレゼンテーションにプログラムを
記述する意味合いが無くなってしまいそうな気がして、何のための VBA?
と感じたからでした。
確かに Animation系の 操作があるようですが、こっちはかなりハードルが高そうで・・・
いずれにしても、いろいろ教えていただき、ありがとうございました。
勉強になりました。
No.1
- 回答日時:
めぐみんさん
ありがとうございます。
リンク先のコードは Excelのようで PPT で確認したところ
ActivePresentation とか Application Objectで Calculateメソッドを
試しましたが「メソッドまたはデータメンバーが・・・」とエラーになります。
またオブジェクトブラウザで PowerPoint内で Calculate を検索しましたがヒットしませんでした。
Shapeの利用シーンは PPTの方が多いように思うのですが
意外とアニメーションの例が少ないので困っています。(涙;;;)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.netで図形描画ができません^^;
-
給紙トレイをダイアログを使わ...
-
ListBoxで改行したい
-
Visual C++ MaskedTextBoxの右...
-
色を合成するには
-
eclipseのデバッグ中に変数の値...
-
ExcelVBAのコントロールの種類...
-
Microsoft Formsの「個人情報や...
-
EXCELでactivexコントロールを...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームを表示中にシ...
-
【マクロ】エラー【#DIV/0!】が...
-
worksheetFunctionクラスのVloo...
-
Form_Load と Form_Activate の...
-
実行時エラー 438になった時の...
-
VBA CommandButtonの文字ずれ
-
VBAでオプションボタンによって...
-
ウォッチ式の文字数制限について
-
VBA ユーザーフォームの Keypre...
-
【C#/Java?】try-catchでcatch...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
PowerPoint の VBA
-
VC;;6.0のMFCで線を簡単に引け...
-
vb6のTEXTBOX
-
C# DrawImage 物理サイズでな...
-
for文の実行速度を遅くしたいの...
-
Pythonにおける物理のシミュレ...
-
MFCでのコンボボックスについて
-
C#を用いて描画する四角形の角...
-
円の頂点の求め方を知りたいです。
-
win32api複数のタイマーを同時...
-
給紙トレイをダイアログを使わ...
-
エクセルのレーダーチャート 0...
-
VB 6.0 PictureBox のプロパテ...
-
Excel VBA:コントロールボタン...
-
C#で壁の当たり判定と自キャラ...
-
VC++ ドラッグしながらの図の...
-
Word 描画オブジェクトを削除...
-
scilabでのグラフ描画時の軸設定
-
ピクチャーボックスでの折線グ...
おすすめ情報