こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBAでオートシェイプを点滅させたい。

エクセル2000です。
ワークシートに配置したオートシェープ(「矢印」と名前を付けてあります。)をチカチカさせたいのです。

Sub マーク点滅()
Dim i As Integer
i = 0
Do
i = i + 1
Loop Until i = 3
Sheets("AAAA").Shapes("矢印").Visible = True
Sheets("AAAA").Shapes("矢印").Visible = False
End Sub

とやってみましたがぜんぜんだめでした。
いい方法はないでしょうか?

投稿日時 - 2003-12-25 14:48:39

QNo.738280

暇なときに回答ください

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

> Declare Sub Sleep Lib "kernel32" _
> (ByVal dwMilliseconds As Long)
> って何でしょうか?

これはkernel32ダイナミックリンクライブラリにある"SLEEP" WindowsAPI関数を使うための記述です。VBAだけでは1秒以下の処理停止ができないのでAPI関数を呼び出しています。以外と高度なテクですが、便利です。ちなみに、1000が1秒に相当しますが、微小時間はあまり正確ではありません。

> DoEventsを入れないと点滅しませんでしたがなぜでしょ> うか?
DoEvents は、OS に一時的に制御を渡すコマンドです。ここではループ中にオブジェクトを再描画させるために使っていますが、他のコードに強制的に処理を移すときに使います。

投稿日時 - 2003-12-25 16:13:27

お礼

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

投稿日時 - 2003-12-29 09:59:48

ANo.2

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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

投稿日時 - 2003-12-25 15:06:13

お礼

ありがとうございました!

ところで
Declare Sub Sleep Lib "kernel32" _
 (ByVal dwMilliseconds As Long)
って何でしょうか?

DoEventsを入れないと点滅しませんでしたがなぜでしょうか?

投稿日時 - 2003-12-25 15:26:16

あなたにオススメの質問