Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2348 / 13646 ツリー ←次へ | 前へ→

【68585】シェイプの色を一定時間毎に変えたい crow 11/3/28(月) 1:41 質問[未読]
【68586】Re:シェイプの色を一定時間毎に変えたい りん@i 11/3/28(月) 4:13 発言[未読]
【68587】Re:シェイプの色を一定時間毎に変えたい crow 11/3/28(月) 5:20 質問[未読]
【68588】Re:シェイプの色を一定時間毎に変えたい りん@i 11/3/28(月) 5:44 回答[未読]
【68589】Re:シェイプの色を一定時間毎に変えたい crow 11/3/28(月) 5:54 お礼[未読]

【68585】シェイプの色を一定時間毎に変えたい
質問  crow  - 11/3/28(月) 1:41 -

引用なし
パスワード
   Sub Wait(Wait2 As Single)
 Dim Time As Double

 Time = Now + Wait2 / 86400

 Do
 Loop Until Now >= Time

End Sub

Sub NanaSeg()

Dim Seg(8) As Shape
Dim Deta As String
Dim 文字数 As Long
Dim 抽出 As Long
Dim Ransuu As Long
Dim i As Long

Set Seg(1) = ActiveSheet.Shapes("フォーム 1")
Set Seg(2) = ActiveSheet.Shapes("フォーム 2")
Set Seg(3) = ActiveSheet.Shapes("フォーム 3")
Set Seg(4) = ActiveSheet.Shapes("フォーム 4")
Set Seg(5) = ActiveSheet.Shapes("フォーム 5")
Set Seg(6) = ActiveSheet.Shapes("フォーム 6")
Set Seg(7) = ActiveSheet.Shapes("フォーム 7")
Set Seg(8) = ActiveSheet.Shapes("フォーム 8")

For i = 1 To 8 Step 1
  Seg(i).Fill.ForeColor.SchemeColor = 63
Next

Wait 5

Randomize
Ransuu = Int(77 * Rnd + 1)
Deta = Worksheets("セグデータ").Range("A" & Ransuu).Value

.
.
.


「For i = 1 To 8 Step 1
  Seg(i).Fill.ForeColor.SchemeColor = 63
Next」
の部分を処理してから5秒経った後に次の処理に移りたいのですが実際は5秒のウエイトの後にまとめて処理されてしまいます。
セルに文字を表示させるのを試しにやってみたらちゃんとウエイト前に処理できました。
シェイプは別扱いなのでしょうか??

どなたか解決方法を教えて下さい。

【68586】Re:シェイプの色を一定時間毎に変えたい
発言  りん@i  - 11/3/28(月) 4:13 -

引用なし
パスワード
   crow さん、おはようございます。

>For i = 1 To 8 Step 1
>  Seg(i).Fill.ForeColor.SchemeColor = 63
   Wait 5
>Next

>の部分を処理してから5秒経った後に次の処理に移りたいのですが実際は5秒のウエイトの後にまとめて処理されてしまいます。
5秒後に次のシェイプの色を変えたいという事でしたら、待つ処理はループの中に。

【68587】Re:シェイプの色を一定時間毎に変えたい
質問  crow  - 11/3/28(月) 5:20 -

引用なし
パスワード
   ▼りん@i さん:
回答ありがとうございます!

試してみたけどうまくいきませんでした。
ループの中に入れても配列の要素の色がひとつずつ変わるわけではなく、規定の秒数が経った後にいっぺんに色が変わってしまいます。


For i = 1 To 8 Step 1
  Seg(i).Fill.ForeColor.SchemeColor = 63
Next
Range("A1").Value = "あ"

Wait 2

Range("A1").Value = "い"

Wait 2


例えば上記のようにすると
あ⇒い と各2秒ずつ表示された後にFor〜Nextの部分が実行されてしまいます。

これを記述の順番通り、
For〜Next⇒あ⇒い
と実行したいのです。

ちなみにデバックで一つずつステップインしてみたら問題はありませんでした。

エクセルが壊れている可能性があるのでしょうか??

【68588】Re:シェイプの色を一定時間毎に変えたい
回答  りん@i  - 11/3/28(月) 5:44 -

引用なし
パスワード
   crow さん、おはようございます。

>試してみたけどうまくいきませんでした。
>
>For i = 1 To 8 Step 1
>  Seg(i).Fill.ForeColor.SchemeColor = 63
     Wait 2 'ここで待つ
     DoEvents
>Next

描画が追いついていないだけなので、DoEventsをいれてみて下さい。

【68589】Re:シェイプの色を一定時間毎に変えたい
お礼  crow  - 11/3/28(月) 5:54 -

引用なし
パスワード
   ▼りん@i さん:
おはようございます。

DoEventsを入れてみたら上手くいきました!!
描写が追いついていなかったのですね。

的確な回答ありがとうございました。

2348 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free