VBAで描いた図形がちゃんと描かれるようにする
タイトルをどう書くか悩みましたが,
BuildFreeformを使って,グラフを描いてアニメーションぽいのをさせる。
または,図形のleftやtopプロパティを利用して,座標でアニメーションをさせる。
こういうことをしたい時が私にはあります。
高校の理科の教員をしているので,なかなかイメージがわかないものを目に見えるようにしたいというときに上記のような欲求が多々あります。
タブレットパソコンや電子黒板を授業で使う時代になり,タブレットをどう生かすのかという命題に直面しているんですが,自分なりにいくつかの答えを出しました。そのうちの一つを解決するのに使ってます。
話を戻します。パワーポイントでVBAでアニメーションとかをさせると,コマが飛んだり,動きがまちまちになったりします。CPUがそれほどよくないもののほうが安定してアニメーションが見れて,CPUやグラボ付きのパソコンではひどくコマ飛びをして途方に暮れることも。
さんざんいろいろ試して,こういうときはDoEventsだろ,といくつか入れてみたりしてもダメ。
DoEventsで解決することもありますが,細かいアニメーションはそれでは無理です。
物理の波を描いて動かしたり,分子の熱運動を表現したりという細かいのでしばらく本当に悩みました。
どこを探してもこれは見つからず,解決は偶然によるものでしたが,もし同じ悩みの人は試してみてください。答えはけっこう簡単でした。
他のボタンでマクロの動作を制御するためにDoEventsも最低限ループには入れます。たくさんいれちゃだめらしいです。パソコンに負荷が大きいとか(らしい)。
動作速度の調整にはAPIのSleepを使ってます。
で本題のアニメーションをきちんと想定通り動かすには,
テキストを一つ画面のどこかに置いて,ループの中にテキストの更新
(何かの数値を表示してやるとか,何も書くことがないなら同じ文字を書いたり)を最低一個いれること。
波なら位相でもいいし,何かのパラメーターでもいい。わたしはパソコンの能力によりSleepの数値を調整できるように作りたいほうなので,何も書くことがないときはSleepの数値を画面のどこかに置いてスリープの値を書き出させてます。
テキストの更新時にほかの画面もきちんと描くということをしているんでしょうね。
高速化のためにコマを飛ばすことは大事なことだったんでしょうけど,動きを見せたい者にとってはとっても迷惑な仕様です。ほんとかなり悩みました。。
これだけでコマ飛びがなくなりました。
英語のページを含めてどこを探してもこの答えにはたどり着けなかったんですが,
たまたまきっちり動くコードがあり,そこでたまたまテキストを一つループごとに更新していたんです。これが気づくきっかけとなりました。
パワーポイントのVBAは,頭いつも爆発しそうです。でも楽しいですし,やればやるほどいろんな方法がありますね。