
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で質問しましょう!
似たような質問が見つかりました
- Android(アンドロイド) AQUOS sense6sの物理ボタン(アシスタントキー)に再生・一時停止を割り当てる方法 2 2022/08/09 00:37
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- Excel(エクセル) excelvbaでスライドショーを作りたい 2 2023/04/20 14:32
- 工学 1つのタクトスイッチで複数の並列回路を閉じ、アースにつなげることができるスイッチはありますか。 2 2022/08/06 10:38
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Visual Basic(VBA) Vba 互換モードでのAppActiveについて教えてください 2 2022/06/27 18:47
- その他(プログラミング・Web制作) Pythonでexcelのvbaを作成、実行する方法について Pythonで表の自動集計プログラムを 3 2022/07/09 09:58
- Visual Basic(VBA) ExcelのVBAを使い、複数シートの同一箇所を、同一条件にて一括でソルバーを回す方法について 1 2022/04/23 11:49
- Visual Basic(VBA) Excel ファイルを指定し、指定されたファイル内にシートを統合するVBA 8 2023/07/10 10:09
- Windows 10 windows11 update の「更新の再開」について初歩的な質問なのですが 1 2022/10/19 00:57
このQ&Aを見た人はこんなQ&Aも見ています
-
コマンドボタンで「終了ボタン」を作りたい!
Excel(エクセル)
-
エクセルVBAにおけるON TIMEメソッドの解除方法について
Visual Basic(VBA)
-
VBAでの一時停止と再開の方法
その他(プログラミング・Web制作)
-
-
4
VBAで一時中断したプログラムの再開をさせたい
Visual Basic(VBA)
-
5
Escキーを押すと、中断する時としない時がある
Visual Basic(VBA)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
マクロの中でマクロを実行中に中止させたい
Excel(エクセル)
-
8
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
9
callで順に実行されるプロシージャを途中で止める方法
Excel(エクセル)
-
10
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
11
EXCELのマクロの重複起動の禁止
Excel(エクセル)
-
12
エクセルでマクロ実行中に任意の場所で一時停止させたい
Excel(エクセル)
-
13
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
14
EXCEL VBAでApplication.waitを使わずに一時停止させたい
Excel(エクセル)
-
15
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
16
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
17
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
18
EXCEL VBAで、PnPでCOMポート番号取得
Visual Basic(VBA)
-
19
VBAでcallで呼び出したsubを終了させる
Visual Basic(VBA)
-
20
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのマクロでモジュールを...
-
【Excel VBA】 WorksheetやRa...
-
Excel VBAで「プログラム実行」...
-
エクセルVBAでUserFormを起動し...
-
callで順に実行されるプロシー...
-
或るプロシージャの呼び出し元判定
-
Access VBAで行ラベルが定義さ...
-
OutlookVBAで作成したマクロに...
-
Accessでグローバル変数を宣言...
-
エクセルVBAが対応できるプログ...
-
excel/vba/public変数
-
アクセスのVBについて
-
PL/SQLのエラーについて
-
ACCESS マクロをモジュールに変...
-
DB2でのストアドプロシージャの...
-
Excel:ThisWorkbookオブジェク...
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
VBAにおける Option Explicitの...
-
Excel2000 セルデータ検索ウィ...
-
フォームモジュール イベント...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
エクセルVBAでUserFormを起動し...
-
callで順に実行されるプロシー...
-
【Excel VBA】 WorksheetやRa...
-
Excel VBAで「プログラム実行」...
-
或るプロシージャの呼び出し元判定
-
OutlookVBAで作成したマクロに...
-
VBA プロシージャの名前の取得
-
Accessでグローバル変数を宣言...
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
excel/vba/public変数
-
エクセルVBAが対応できるプログ...
-
Excel:ThisWorkbookオブジェク...
-
ACCESS マクロをモジュールに変...
-
ACCESS2007インポート時の空白...
-
ブックオープン時にテキストボ...
-
PL/SQLのエラーについて
-
sp_executesqlを実行してもテー...
-
ExcelVBAでしりとりのやり方を...
おすすめ情報