質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

3812閲覧

vba excel2010 マクロをstopボタンで停止させたい。

yamatail

総合スコア77

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/10/16 07:05

編集2018/10/16 07:45

エクセルでデータとグラフが自動更新するプログラムを作っています。

自動更新のマクロはできました。

それを、ボタンを押して実行するようにしております。
[フォームコントロール]から[マクロの登録]でできました。

次に自動更新マクロを止めるstopボタンを設置しようとしました。
[avtiveXコントロール]からボタンを選びました。
がstopを押しても自動更新が止まりません。

以下、ボタンに割り当てたプログラムとイメージです。

vba

1Option Explicit 2Dim Inputcheck As Integer 3Dim Sleeptime_s, Sleeptime, Logtime 4Dim bStop As Boolean 5Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'APIを宣言 6Sub auto_updata() 7 bStop = False 8 Do 9 Inputcheck = 0 10 Sleeptime_s = InputBox(prompt:="更新間隔(s)を指定してください." & vbCrLf & _ 11 "※1以上の整数です.", Title:="入力画面", Default:=1) 12 If IsNumeric(Sleeptime_s) Then 13 Sleeptime = Val(Sleeptime_s) 14 If Sleeptime <> Int(Sleeptime) Or 0 >= Int(Sleeptime) Then 15 MsgBox ("更新間隔(s)が適切ではありません.") 16 Inputcheck = 1 17 End If 18 Else 19 MsgBox ("更新間隔(s)が適切ではありません.") 20 Inputcheck = 1 21 End If 22 Loop While Inputcheck = 1 23 24 Do 25 Call Datalog_01 26 Sleep Sleeptime * 1000 27 DoEvents '他のイベントを処理する 28 If bStop = True Then Exit Sub 'ストップボタンが押されたら終わり 29 Loop 30 31End Sub 32 33Private Sub CommandButton1_Click() 34 bStop = True 35End Sub

イメージ説明

どうやら上手くprivate sub がボタンと結びついてないようなのですが、
どこをどうしたらわからす悪戦苦闘しております。

詳しい方いらっしゃいましたら、ご教授頂けませんでしょうか。

何卒、宜しくお願い致します。m(_ _)m

[補足]
紐つけされてませんでした。
ここからどうにか紐つけする方法はありますでしょうか。。。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takito

2018/10/16 07:29

stopボタンを押して[CommandButton1_Click]に入ってくるところまでは確認できていますか?
sazi

2018/10/16 07:29

auto_updata()の先頭でbStop = Trueとして1回だけなら処理が終了するでしょうか?
yamatail

2018/10/16 07:35

takito様 確認できておりません。といいますか確認の方法がわかりません(TT)もしよろしければお教えいただけませんでしょうか。
yamatail

2018/10/16 07:35

sazi様 終了できました!
takito

2018/10/16 07:42

bStop = True の行にブレークポイントを置いてstopボタンを押してください。またはその行の前後に Debug.Print "stop" とでも記述してイミディエイトウィンドウに stop と文字が出てくるか見てみましょう。
yamatail

2018/10/16 08:08

takito様 そもそも紐つけされてないのが、原因のようです。
guest

回答2

0

ベストアンサー

Datalog_01の処理は何を行っているのでしょう?
初回は問題ないとして、復帰しなくなっているとかではないでしょうか。

Debug.Printでイミディエイトウインドウによるトレースをしてみては。

VBA

1 Do 2 Call Datalog_01 3 Sleep Sleeptime * 1000 4 DoEvents '他のイベントを処理する 5 Debug.Print "実行中!" 6 Loop While bStop

Excel VBA コマンドボタンのイベント
Excel VBA ユーザーフォームのイベント

投稿2018/10/16 07:46

編集2018/10/16 08:20
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamatail

2018/10/16 07:49

datalog_01は、追加のデータを行を追加しています。 グラフのデータ範囲を大きくとってデータ追加されると自動的にグラフ更新するようにしています。
sazi

2018/10/16 07:53

Dim bStop As Boolean ↓ Public bStop As Boolean に変更して、 bStop = True を本来のボタンの処理に記述して下さい。
yamatail

2018/10/16 08:00

おーーー!止まりました!! なぜにーー(笑)同じウインドウ上に書いたのが、駄目だったのしょうか。
sazi

2018/10/16 08:06

最初に記述していたのは標準モジュールなので、その場所に書いてもイベント処理とは認識しません。
yamatail

2018/10/16 08:12

標準モジュールとは違うのですね。イベント処理とは。。 ウインドウの上の(General)というところの項目で判別できるのでしょうか。
sazi

2018/10/16 08:25 編集

Generalはコントロール等の一覧で、そのコントロールを選択すると、右のボックスに利用可能なイベントが表示されます。 さらにそれを選択すると空のイベント処理が作成されます。
yamatail

2018/10/16 08:29

大変参考になりました。貴重なお時間をどうもありがとうございました。 イベント処理についても勉強しようと思います。
guest

0

上手くprivate sub がボタンと結びついてないようなのですが

簡単な確認の仕方ですが
「デザインモード」にして、stopボタンをダブルクリックすると、
VBAのエディタにカーソルが飛んで行きます。

飛んで行ったところがPrivate Sub CommandButton1_Click()のところなら
紐付いていますよ。

にもかかわらず、期待通りに動かない場合は、VBAのエディタの各行の
左端の余白の部分をクリックすると●がついてブレークポイントになります。
この状態でデザインモードを解除して実行すると、ステップ実行ができるので
詳しく確認してみてください。

投稿2018/10/16 07:35

taka-saan

総合スコア665

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamatail

2018/10/16 07:46

違うウインドウ開きました。(追記しました) 同じ名前でも駄目なのですね。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問