DoEvents
は、別のワークシート上でユーザがクリックのようなものを実行し、処理するために他のコード(たとえば、Excelの自身を)ことができます(いずれかのWorksheet.Change
またはWorkbook.WorksheetChange
ハンドラを呼び出します)...またはそれ自体を再描画します。
ループごとに1回ずつDoEvents
を呼び出すと、Excelは可視性切り替えの間に再描画する機会を得ることができません。ループは既に実行中です。
ですから、上の表示を切り替える必要がある、(DoEvents
)Excelが再描画させ、アニメーションの遅延のための睡眠その後、視界トグルオフ、(500msのは少し遅いIMOようだ)とExcelが再びを再描画させ、すなわちDoEvents
1以上を呼び出します時間。そのプロパティ(F4)を見て、プロジェクトエクスプローラでそれを選択し、変更その(Name)
たとえば、に、GameSheet
からGame
ワークシートがThisWorkbook
である場合
、私は暖かく、あなたはそれをCodeName
を与えるお勧めします。あなたはイテレーションごとに二度同じワークシートを間接参照する必要がないように
これはあなたのグローバルスコープのオブジェクト変数を与える - 一体あなたも一度だけそのShapes
コレクションを逆参照できます:
Private Const ANIMATION_DELAY As Long = 100
Sub test()
With GameSheet.Shapes
For i = 1 To 4
Dim currentShape As Shape
Set currentShape = .Item("North" & i)
currentShape.Visible = True
DoEvents
Sleep ANIMATION_DELAY
currentShape.Visible = False
DoEvents
Debug.Print i
Next
End With
End Sub
が動いています ' DoEvents'の前に 'Sleep'コールが何か助けてくれますか? –
どこに形を隠していますか?あなたは 'Visible = True'の後に' DoEvents'を試みた後、 'Visible = False'の後に' DoEvents'を試みましたか? –
'Visible = True'の後に' DoEvents'を設定し、 'Visible = False'の後に' DoEvents'を設定すると、トリックが実行されました! – Serveira