- ベストアンサー
ExcelのVBAで、順次動作の実現
- ExcelのVBAを使用して、順番にトグルボタンを押す方法を実現する方法を紹介します。
- マクロを使用して、2秒ごとに順番にトグルボタンを押す方法を説明します。
- ToggleButton1~3のトグルボタンを順番に押すためのVBAコードを提供します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 以下は、標準モジュールを標準とするマクロですから、他に入れる場合は、コードを変えなくてはなりません。なお、Application.Wait では、コードは最後まで読んでいるのに、アプリケーションのマクロ側の動き自体にWaitが掛かってしまうから、そういう現象が起こります。こういうことは厳密には、スクリプト言語ではない証拠かもしれませんね。 '標準モジュール(シートモジュールの場合は、 ' Application.OnTime myTime, Me.Name & ".TogglesClick" 'と書き換えてください。 '----------------------------------- Sub TogglesClick() Dim myTime As Date Dim j As Integer Static i As Integer Const MYWAIT As Integer = 2 '2秒 If i >= 3 Then i = 0 '自動でトグルをOffに戻す For j = 1 To 3 With ActiveSheet.OLEObjects("ToggleButton" & j) .Object.Value = False End With Next j Exit Sub End If myTime = Now + TimeSerial(0, 0, MYWAIT) i = i + 1 Application.ScreenUpdating = False DoEvents 'この間にマクロが入る '例:Cells(1, 1).Value = i Application.ScreenUpdating = True With ActiveSheet.OLEObjects("ToggleButton" & i) .Object.Value = True End With Application.OnTime myTime, "TogglesClick" '' Application.OnTime myTime, Me.Name & ".TogglesClick", 'シートモジュールの場合 End Sub
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
Sheet3にトグルボタンを3つ貼り付けた 下記では順位処理され、うまくいっているようだが。 Application.ScreenUpdating = TrueはFALSEになっていないでしょうね。 >Excelのシートに、トグルボタンを3つ配置します。 で、Worksheets("Sheet3").・・のような限定がなくてうまくいきましたか。 ーー Sub test() Worksheets("sheet3").Select Dim MyWait As String MyWait = 2 Worksheets("Sheet3").ToggleButton1.Value = False Worksheets("Sheet3").ToggleButton2.Value = False Worksheets("Sheet3").ToggleButton3.Value = False '-- MsgBox "AAA" Worksheets("Sheet3").ToggleButton1.Value = True DoEvents 'この間にもマクロを入れたい(0.1秒以内に処理できるものです) Application.Wait (Now + TimeValue("0:00:" & MyWait)) MsgBox "BBB" Worksheets("Sheet3").ToggleButton2.Value = True DoEvents Application.Wait (Now + TimeValue("0:00:" & MyWait)) MsgBox "CCC" Worksheets("Sheet3").ToggleButton3.Value = True DoEvents End Sub
- okormazd
- ベストアンサー率50% (1224/2412)
これでどうですか。 Sub test() Dim MyWait As String MyWait = 2 Application.OnTime Now + TimeValue("0:00:" & MyWait), "toggle2" Application.OnTime Now + TimeValue("0:00:" & MyWait * 2), "toggle3" Application.ScreenUpdating = False ActiveSheet.ToggleButton1.Value = True DoEvents 'この間にもマクロを入れたい(0.1秒以内に処理できるものです) Application.ScreenUpdating = True End Sub Sub toggle2() ActiveSheet.ToggleButton2.Value = True DoEvents End Sub Sub toggle3() ActiveSheet.ToggleButton3.Value = True DoEvents End Sub
- lark_0925
- ベストアンサー率63% (37/58)
Sub test() Dim tm As Date Dim MyWait As String MyWait = 2 ToggleButton1.Value = True 'この間にもマクロを入れたい(0.1秒以内に処理できるものです) tm = Now() + TimeValue("00:00:" & MyWait) Do Until Now() > tm DoEvents Loop ToggleButton2.Value = True tm = Now() + TimeValue("00:00:" & MyWait) Do Until Now() > tm DoEvents Loop ToggleButton3.Value = True End Sub これで試してみて下さい