
No.9ベストアンサー
- 回答日時:
s_husky です。
状況が判明したので再回答!
Public StopNow As Boolean
Public Sub Test()
Do Until StopNow
Sheets(1).Cells(1, 1) = Sheets(1).Cells(1, 1) + 1
Pause 10
Loop
If StopNow Then
MsgBox "Test の実行をストップしました。"
End If
End Sub
Public Sub Pause(ByVal PauseTime As Single)
Dim Finish As Single
Finish = Timer + PauseTime
Do
DoEvents
Loop Until Timer > Finish
End Sub
Private Sub CommandButton2_Click()
StopNow = True
End Sub
Private Sub CommandButton1_Click()
Test
End Sub
起動したプロシージャを止める必要があるということはループ処理と理解。
ならば、ループの条件を操作すれば宜しいかと。
CommandButton1 で起動した Test は CommandButton1 で止めれます。
Application.OnTime TimeValue("16:30:00"), "Test"
で起動しようと同じ理屈。
Application.OnTime は、一種の起動ツール。
当然に停止機能もあるが、停止を制御するには上記のような仕掛けが必要と思います。
ありがとうございました。
お礼が遅くなりすみませんでした。
参考にさせていただきます。
やっぱり、ループ処理が必要かも知れませんね。
No.8
- 回答日時:
Dim flg As Boolean
'無限ループのプロシージャ
Public Sub DoLoop()
Dim i As Long
Dim j As Long
Dim k As Double
Do While True
For i = 1 To 100000
For j = 1 To 100000
k = 1# * i / i + 1# * j / j
Next
Debug.Print i
DoEvents
If flg Then
flg = False
Exit Sub
End If
Next
Loop
End Sub
'停止させるプロシージャ
Public Sub DoStop()
flg = True
End Sub
一応、これで止まります。
No.7
- 回答日時:
停止ボタンプロシージャに
Stop
を書いておけば、とりあえずは止まるような気がします。但し、画面がVB Editorになってしまいますが。
あと、そのとき動いている処理に別の処理(停止ボタンをクリックした時の処理)を割り込ませるために、DoEventsを書いておく必要があるでしょうね。
でも、画面がVB Editorになるのはスマートではないですから、もっと別の仕組みを考える必要があります。
停止ボタンプロシージャで、グローバルな変数の値を変化させて、止めたい処理を定義しているプロシージャ内では、その変数が変化したら処理を止めるように定義しておくとか。
いずれにしても、停止ボタンを作ってそのプロシージャを定義するだけでは、正しく動くプログラムはできないでしょうね。
No.5
- 回答日時:
No.4
- 回答日時:
s_husky です。
2度押し対策をしてないとテストで上手く動かないようなので・・・補足!
Private Sub CommandButton1_Click()
On Error Resume Next
Static isClick As Boolean
Static isExecute As Boolean
Static APP
If Not isClick Then
isClick = True ' 二度押し対策
If Not isExecute Then
APP = Shell("calc.exe")
Else
AppActivate APP
SendKeys "%{F4}", True
End If
isExecute = Not isExecute
isClick = False
End If
End Sub
No.3
- 回答日時:
こんにちは。
内容がはっきりしませんし、おっしゃっている論理が立たないのではありませんか?
>ボタンに登録できるのはひとつのプロシージャですよね。
そうです。
>とすると「他のプロシージャを止める」プロシージャをつくらねばならないのでしょうか。
そうしたら、1つを選択することは、他を選択しないことですから、「他のプロシージャ」を止める論理が成り立たないのではありませんか?
こちらは意味が違います。
>プログラムを実行させるボタンはもちろんつくれるのですが、
>プログラムを停止させるボタンをつくるにはどうしたら良いのかと悩んでいます。
プログラムを停止させるプログラムは、特殊なプログラムです。元のブログラムが分からなければ解答が出来ません。例えば、擬似的な無限ループを発生させているとか、OnTime メソッドを止める、イベント・ドリブン型のマクロを止める、これらはそれぞれが違います。
もう少し、具体的に説明してください。
この回答への補足
ありがとうございます。
>とすると「他のプロシージャを止める」プロシージャをつくらねばならないのでしょうか。
というのは、この場合「他のプロシージャを止めるプロシージャ」をつくってそれをボタンに登録する他はないのだろうか、という意味で書きました。
もしも、あらかじめシート上にコントロールボタンを作成しておき、
「このコントロールボタンを押したらプログラムを終了する」というイベントを、プロシージャの途中に記述できるのでしたら、それが一番良いですが、コントロールボタンには、プロシージャを登録する機能しかないのですよね?(プロシージャ内でのイベント機能はないのですよね?)
それと、
止めたい元のプログラムは、
Application.OnTime TimeValue("12:00:00")"proc"
Application.OnTime TimeValue("13:00:00")"proc"
というように、それぞれの行で設定した時刻に、procプロシージャ内に書かれた処理をします。
No.2
- 回答日時:
次は、ウィンドウのアクセサリの[電卓]の起動と閉じるを繰り返すコマンドボタンです。
Private Sub CommandButton1_Click()
On Error Resume Next
Static isExecute As Boolean
Static APP
If Not isExecute Then
APP = Shell("calc.exe")
Else
AppActivate APP, False
SendKeys "%({F4})", True
End If
isExecute = Not isExecute
End Sub
この回答への補足
ありがとうございます。
あっ、もしかして、私の質問文が、
他のアプリを起動させて停止させるプログラムを
たずねているように読めたのでしょうか。
失礼いたしました。
これはこれで大変勉強になりました。
また新しい回答をつけてくださっていますが(他の方も)
色々調べて回答内容をきちんと理解してからにしたいと思いますので、
しばしお返事遅れるご無礼をお許しください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでの一時停止と再開の方法
その他(プログラミング・Web制作)
-
コマンドボタンで「終了ボタン」を作りたい!
Excel(エクセル)
-
エクセルVBAにおけるON TIMEメソッドの解除方法について
Visual Basic(VBA)
-
-
4
VBAで一時中断したプログラムの再開をさせたい
Visual Basic(VBA)
-
5
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
8
EXCELのマクロの重複起動の禁止
Excel(エクセル)
-
9
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
10
vba セルに入力した時間をマクロで受け取るには?
Excel(エクセル)
-
11
EXCEL VBAでApplication.waitを使わずに一時停止させたい
Excel(エクセル)
-
12
UserForm1.Showでエラーになります。
工学
-
13
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
14
マクロの中でマクロを実行中に中止させたい
Excel(エクセル)
-
15
Escキーを押すと、中断する時としない時がある
Visual Basic(VBA)
-
16
TextBoxの最下行を表示しておきたい
Visual Basic(VBA)
-
17
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
18
エクセルでマクロ実行中に任意の場所で一時停止させたい
Excel(エクセル)
-
19
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
20
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access VBAで行ラベルが定義さ...
-
エクセルVBAでUserFormを起動し...
-
Accessのマクロでモジュールを...
-
【Excel VBA】 WorksheetやRa...
-
Oracle : BLOB型フィールドへの...
-
VBA 「文字が入っていたら、...
-
Excel:ThisWorkbookオブジェク...
-
エントリ ポイントが見つかりま...
-
ブックオープン時にテキストボ...
-
エクセルVBAが対応できるプログ...
-
或るプロシージャの呼び出し元判定
-
yyy/mm/dd/形式
-
SQLiteのREAL型について
-
likeとsubstrの使いわけについて
-
パッケージ内のファンクション...
-
Statement ignored というエラー
-
Libre Office でフィールドコー...
-
PL/SQLでSPOOLさせたいのですが...
-
sqlplusのspoolで空白行出現
-
Poweruser権限でのIPアドレス変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
callで順に実行されるプロシー...
-
エクセルVBAでUserFormを起動し...
-
【Excel VBA】 WorksheetやRa...
-
OutlookVBAで作成したマクロに...
-
Excel VBAで「プログラム実行」...
-
或るプロシージャの呼び出し元判定
-
Accessでグローバル変数を宣言...
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
VBA プロシージャの名前の取得
-
エクセルVBAが対応できるプログ...
-
PL/SQLのエラーについて
-
ACCESS2007インポート時の空白...
-
Excel2000 セルデータ検索ウィ...
-
ブックオープン時にテキストボ...
-
ACCESS マクロをモジュールに変...
-
連番欠番アルゴリズム
-
DB2でのストアドプロシージャの...
-
ExcelVBAのInputBoxメソッドの...
おすすめ情報