Excel VBA質問箱 IV

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

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


8057 / 13644 ツリー ←次へ | 前へ→

【35289】サブルーチンについて yukio 06/2/25(土) 21:29 質問[未読]
【35290】Re:サブルーチンについて かみちゃん 06/2/25(土) 21:43 発言[未読]
【35291】Re:サブルーチンについて yukio 06/2/25(土) 22:06 お礼[未読]
【35312】Re:サブルーチンについて かみちゃん 06/2/26(日) 12:03 発言[未読]
【35345】Re:サブルーチンについて yukio 06/3/1(水) 8:41 お礼[未読]
【35309】Re:サブルーチンについて yukio 06/2/26(日) 7:13 お礼[未読]

【35289】サブルーチンについて
質問  yukio E-MAIL  - 06/2/25(土) 21:29 -

引用なし
パスワード
   ABCDEの5つのマクロを1分ごとに動作させ、止める命令があるまでは繰り返すVBAのプログラムを教えてください。

【35290】Re:サブルーチンについて
発言  かみちゃん  - 06/2/25(土) 21:43 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ABCDEの5つのマクロを1分ごとに動作させ、止める命令があるまでは繰り返す

以下のような感じでいかがでしょうか?
止める命令というものが、何を示すのかわからないのですが、
基本的には、無限ループにしておきます。
ただし、以下のコードでは、Exit Do で、念のためループを抜けるようにしています。

Option Explicit

Sub Macro1()
 Dim i As Integer
 Do
  For i = 1 To 5
   Application.Wait (Now + TimeValue("0:01:00"))
   Select Case i
    Case 1
     Call A
    Case 2
     Call B
    Case 3
     Call C
    Case 4
     Call D
    Case 5
     Call E
   End Select
  Next
  Exit Do
 Loop
 MsgBox "終了しました"
End Sub

Sub A()
 MsgBox "Aを実行します"
End Sub
Sub B()
 MsgBox "Bを実行します"
End Sub
Sub C()
 MsgBox "Cを実行します"
End Sub
Sub D()
 MsgBox "Dを実行します"
End Sub
Sub E()
 MsgBox "Eを実行します"
End Sub

【35291】Re:サブルーチンについて
お礼  yukio E-MAIL  - 06/2/25(土) 22:06 -

引用なし
パスワード
   早速ありがとうございます。

私の質問の書き方が不十分でした。すみません。
1分後にAのマクロを動作させ、そしてまた1分後にBを動作させ、1分後にCを動作させ、1分後にD、1分後にEそのループになります。

また、エクセルで使うので止めたい時に体裁の良い方法があったらお教えください。たとえばボタンを押したら止まるような。勝手なことを書きましたが宜しくお願いします。

【35309】Re:サブルーチンについて
お礼  yukio E-MAIL  - 06/2/26(日) 7:13 -

引用なし
パスワード
   ▼かみちゃん さん:
ありがとうございました。私の認識不足でした。しっかり動いてます。今後ともよろしくお願いします。

【35312】Re:サブルーチンについて
発言  かみちゃん  - 06/2/26(日) 12:03 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>エクセルで使うので止めたい時に体裁の良い方法があったらお教えください。た
>とえばボタンを押したら止まるような。

シート上にコントロールツールボックスのコマンドボタンを2つ配置します。
そのシートの、シートモジュールに以下のコードを記述してください。
'開始ボタン
Private Sub CommandButton1_Click()
 Macro1
End Sub

'停止ボタン
Private Sub CommandButton2_Click()
 blnStop = True
 MsgBox "処理を停止します"
End Sub

以下は、標準モジュールに記述してください。

Public blnStop As Boolean

Sub Macro1()
 Dim i As Integer
 
 blnStop = False
 Do While Not blnStop '停止ボタンがクリックされるまで繰り返す
  For i = 1 To 5
   Application.Wait (Now + TimeValue("0:00:02"))
   Select Case i
    Case 1
     Call A
    Case 2
     Call B
    Case 3
     Call C
    Case 4
     Call D
    Case 5
     Call E
   End Select
   DoEvents
  Next
 Loop
 MsgBox "終了しました"
End Sub

Sub A()
 Range("A1").Value = Range("A1").Value + 1
' MsgBox "Aを実行します"
End Sub
Sub B()
 Range("A1").Value = Range("A1").Value + 1
' MsgBox "Bを実行します"
End Sub
Sub C()
 Range("A1").Value = Range("A1").Value + 1
' MsgBox "Cを実行します"
End Sub
Sub D()
 Range("A1").Value = Range("A1").Value + 1
' MsgBox "Dを実行します"
End Sub
Sub E()
 Range("A1").Value = Range("A1").Value + 1
' MsgBox "Eを実行します"
End Sub

上記コードは、アクティブシートのA1セルに1ずつ加算していきます。

【35345】Re:サブルーチンについて
お礼  yukio E-MAIL  - 06/3/1(水) 8:41 -

引用なし
パスワード
   かみちゃんさんへ

何度も教えていただいてありがとうございました。
大変助かりました。今後とも宜しくお願いします。

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