• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAでオートシェイプを点滅させたい。)

エクセルVBAでオートシェイプを点滅させる方法

このQ&Aのポイント
  • エクセル2000で配置したオートシェイプ(矢印)を点滅させたいと思っています。VBAを使用してマクロを作成しましたがうまくいきませんでした。解決策はありますか?
  • エクセルVBAを使って配置したオートシェイプ(矢印)を点滅させたいのですが、作成したマクロが正常に動作しません。どのように対処すればよいでしょうか?
  • エクセル2000で作成したワークシートに配置したオートシェイプ(矢印)を点滅させたいのですが、作成したVBAマクロがうまく動作しません。解決策を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • TTak
  • ベストアンサー率52% (206/389)
回答No.2

> Declare Sub Sleep Lib "kernel32" _ > (ByVal dwMilliseconds As Long) > って何でしょうか? これはkernel32ダイナミックリンクライブラリにある"SLEEP" WindowsAPI関数を使うための記述です。VBAだけでは1秒以下の処理停止ができないのでAPI関数を呼び出しています。以外と高度なテクですが、便利です。ちなみに、1000が1秒に相当しますが、微小時間はあまり正確ではありません。 > DoEventsを入れないと点滅しませんでしたがなぜでしょ> うか? DoEvents は、OS に一時的に制御を渡すコマンドです。ここではループ中にオブジェクトを再描画させるために使っていますが、他のコードに強制的に処理を移すときに使います。

shishishishi
質問者

お礼

ご丁寧にありがとうございました。 たすかりました。 これからもよろしくご指導ください。

その他の回答 (1)

  • TTak
  • ベストアンサー率52% (206/389)
回答No.1

動作を繰り返す場合、そのコードをループ内に書かなければいけません。また、処理後にオブジェクトを表示をさせるために 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

shishishishi
質問者

お礼

ありがとうございました! ところで Declare Sub Sleep Lib "kernel32" _  (ByVal dwMilliseconds As Long) って何でしょうか? DoEventsを入れないと点滅しませんでしたがなぜでしょうか?

関連するQ&A