- ベストアンサー
エクセルVBAでオートシェイプを点滅させる方法
- エクセル2000で配置したオートシェイプ(矢印)を点滅させたいと思っています。VBAを使用してマクロを作成しましたがうまくいきませんでした。解決策はありますか?
- エクセルVBAを使って配置したオートシェイプ(矢印)を点滅させたいのですが、作成したマクロが正常に動作しません。どのように対処すればよいでしょうか?
- エクセル2000で作成したワークシートに配置したオートシェイプ(矢印)を点滅させたいのですが、作成したVBAマクロがうまく動作しません。解決策を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> Declare Sub Sleep Lib "kernel32" _ > (ByVal dwMilliseconds As Long) > って何でしょうか? これはkernel32ダイナミックリンクライブラリにある"SLEEP" WindowsAPI関数を使うための記述です。VBAだけでは1秒以下の処理停止ができないのでAPI関数を呼び出しています。以外と高度なテクですが、便利です。ちなみに、1000が1秒に相当しますが、微小時間はあまり正確ではありません。 > DoEventsを入れないと点滅しませんでしたがなぜでしょ> うか? DoEvents は、OS に一時的に制御を渡すコマンドです。ここではループ中にオブジェクトを再描画させるために使っていますが、他のコードに強制的に処理を移すときに使います。
その他の回答 (1)
- TTak
- ベストアンサー率52% (206/389)
動作を繰り返す場合、そのコードをループ内に書かなければいけません。また、処理後にオブジェクトを表示をさせるために DoEvents を入れてやるといいでしょう。 以下に例を示します。必ず標準モジュールに記述してください。 Declare Sub Sleep Lib "kernel32" _ (ByVal dwMilliseconds As Long) Sub マーク点滅() Dim i As Integer Dim x As Integer '点滅回数 Dim slp As Integer '点滅速さ x = 10 slp = 200 For i = 1 To x Sleep slp Sheets("AAAA").Shapes("矢印").Visible = False DoEvents Sleep slp Sheets("AAAA").Shapes("矢印").Visible = True DoEvents Next i End Sub
お礼
ありがとうございました! ところで Declare Sub Sleep Lib "kernel32" _ (ByVal dwMilliseconds As Long) って何でしょうか? DoEventsを入れないと点滅しませんでしたがなぜでしょうか?
お礼
ご丁寧にありがとうございました。 たすかりました。 これからもよろしくご指導ください。