Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
マクロの実行中断について
投稿日時: 18/10/19 08:31:44
投稿者: はじめて

お世話になります。
 
マクロの実行中断について、即効テクニックに掲載されています。
これはステップが来るたびにMsgboxが表示され判断を求めてきます。
何かキーを押すときのみ表示するようにしたいのですが、ご教示いただけないでしょうか。
よろしくお願いいたします。

回答
投稿日時: 18/10/19 09:56:19
投稿者: sk

引用:
マクロの実行中断について、即効テクニックに掲載されています。
これはステップが来るたびにMsgboxが表示され判断を求めてきます。

該当記事の URL を明記されることをお奨めします。
 
即効テクニック より:
http://www.moug.net/tech/exvba/0150020.html
 
引用:
何かキーを押すときのみ表示するようにしたい

1. ユーザーフォームを新規作成する。
 
2. 1 のユーザーフォーム上にテキストボックス[TextBox1]と
   コマンドボタン[CommandButton1]を配置する。
 
3. 1 のフォームモジュールに以下のコードを記述する。
 
-------------------------------------------------------------
Option Explicit
 
Private Const StartCaption As String = "実行開始"
Private Const StopCaption As String = "中断"
 
Private blLoop As Boolean
 
Private Sub UserForm_Initialize()
     
    blLoop = False
    Me.TextBox1.Value = 0
    Me.CommandButton1.Caption = StartCaption
     
End Sub
 
Private Sub CommandButton1_Click()
 
    If blLoop = True Then
        If MsgBox("実行中の処理を中断しますか?", _
                   vbYesNo + vbDefaultButton2) = vbYes Then
            blLoop = False
        End If
        Exit Sub
    End If
     
    Dim i As Long
     
    blLoop = True
    Me.CommandButton1.Caption = StopCaption
    For i = 0 To 10000
        DoEvents
        If blLoop = False Then
            Me.CommandButton1.Caption = StartCaption
            Exit Sub
        End If
        Me.TextBox1 = i
    Next
    blLoop = False
     
    MsgBox "実行完了"
    Me.CommandButton1.Caption = StartCaption
 
End Sub
-------------------------------------------------------------

回答
投稿日時: 18/10/19 09:57:11
投稿者: WinArrow
投稿者のウェブサイトに移動

ケースバイケースですが、
>何かキーを押したとき
のタイミングは、CPUと人間のスピード感覚は一致しないので、
意図したところで・・・・は無理です。
 
ある条件の時に
という条件付きでMSGBOXを実行するのがよいでしょう。
 
具体例を掲示すると、意図する回答がもらえるかも?

投稿日時: 18/10/19 10:30:51
投稿者: はじめて

WinArrow さん
 
いつもお世話になり、ありがとうございます。
考えています事・・
1 お知らせをモニター画面に流します(ループさせています)。(これは5分、10分・・)
2 訪問者があった時点でお知らせを中断して、違ったソフト(本番)を見てもらうように考えています。
3 msgboxは組込んでいるところで表示されますので10回ループさせれば10回表示になるのでボタンを押すことを求めてきます。まあ、これを良しとすればOKなんですがね!
タイミングはいつでもよろしいわけでキー等を押した時点で中断させたいのです。

回答
投稿日時: 18/10/19 14:53:04
投稿者: WinArrow
投稿者のウェブサイトに移動

どこでも、いつでも、かまわないなら
↓を参考に
 
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_090_050.html

投稿日時: 18/10/19 16:01:19
投稿者: はじめて

情報の提供ありがとうございます。
一先ず、msgboxで対応するように作りました。
マクロは以下のとおりです。
ただ、継続は処理ができますが、中断がうまくいきません。
おそらく「exit sub」が正しくないのではと思います。ここをどういう風に変えるとよろしいでしょうか。
 
Sub 処理中断()
   
    Dim rc As VbMsgBoxResult
    Select Case 回数判断
    Case 4, 8, 12, 16, 20
       
    rc = MsgBox("処理を中止しますか?", vbYesNo +estion)
    If rc = vbYes Then
        MsgBox "処理を中止します", vbCritical
         Exit Sub
         
        Else
           MsgBox "処理を継続します", vbCritical
    End If
   
    End Select
End Sub
情報の件は、勉強します。

回答
投稿日時: 18/10/19 16:43:16
投稿者: WinArrow
投稿者のウェブサイトに移動

掲示のコードだけでは、
何も判断できません。
>うまくいく、いかない
わかりません。
 
>Exit sub
を記述しても、記述しなくても同じです。
 
「中断」「継続」も
End Sub
に行くからです。

投稿日時: 18/10/19 16:59:37
投稿者: はじめて

MsgBox "処理を中止します", vbCritical
          Exit Sub  ・・・・ここでプログラムを終了させたいのですが?
 
方法がわかりません。

回答
投稿日時: 18/10/19 17:27:32
投稿者: WinArrow
投稿者のウェブサイトに移動

はじめて さんの引用:
MsgBox "処理を中止します", vbCritical
          Exit Sub  ・・・・ここでプログラムを終了させたいのですが?
 
方法がわかりません。

 
 
掲示されているコードだけでは、判断できません。

回答
投稿日時: 18/10/19 18:01:55
投稿者: WinArrow
投稿者のウェブサイトに移動

全体のイメージが分かりませんが、
問題が起きるかもしれません、
自己責任ということで
 
強制的にプログラムを終了したい場合は
 
If 条件 Then END
 
です。
 
 

投稿日時: 18/10/19 19:55:55
投稿者: はじめて

WinArrow さん
 
IF 条件 then End を使わせていただきます。テストもOKです。
STOP を考えてテストしましたが停止はしますがコードの部分が開いた状態で止まり、これでもやむないかと思っていました。
おかげさまでこれで完成です。
本当に有難うございました。