アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のようなマクロを自動記録で制作してみました。一応動くことは動きますが、マクロを実行中に途中で何かボタンをクリックしてマクロを停止させる方法を教えてください。
当方、マクロは全くわかりません、簡単なfor・・・・next 文くらいなら解読できますが・・・全くの素人ですので、そのことを入れてご教授、解説よろしくお願いします。

Sub 位相操作2()
'
' 位相操作2 Macro
' マクロ記録日 : 2012/7/7 ユーザー名 *m**s**

X = Range("M2")
Y = Range("N2")
For n = X To Y Step Range("u7")

Range("J4").Select

ActiveCell.FormulaR1C1 = n

Next n
End Sub

A 回答 (4件)

ここが参考になるのでは。


http://officetanaka.net/excel/vba/function/DoEve …
    • good
    • 1

こんばんは。



ボタンを押して、止めるというのは、VBAのコードでも、めったにしないと思いましたので、手直ししたコードで試してみました。そうすると、フラグのTrue が変えられないので、そのままではマクロは止めた時点でおしまいです。マクロ実行中は、同じエクセルのVBAでは、flg は、False に戻りません。


Dim flg as Boolean
Sub 位相操作2()
  '
  ' 位相操作2 Macro
  ' マクロ記録日 : 2012/7/7 ユーザー名 *m**s**
  X = Range("M2").Value
  Y = Range("N2").Value
  Z = Range("U7").Value
  For n = X To Y Step Z
    Range("J4").Value = n
    DoEvents
    If flg Then Stop  '<-このままでは、ループからは抜けない。 :Exit Sub が必要。
  Next n
End Sub

Sub ボタン1_Click() 'フォームのボタン
   flg = Not flg
End Sub

まお、デバックなら、F8 を押して、ステップマクロを使えばよいです。
    • good
    • 0

ちょっとおまけで、マウスをクリックして止める方法


Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long
Sub ボタン1_Click()

X = Range("M2")
Y = Range("N2")
For n = X To Y Step Range("U7")
If GetAsyncKeyState(2) = 0 Then
Range("J4").Select

ActiveCell.FormulaR1C1 = n
Else
Exit For
End If
Next n
End Sub

If GetAsyncKeyState(1) = 0 Then
で、普通のクリック
If GetAsyncKeyState(2) = 0 Then
で、右クリックです。
その他のキー操作にも対応します。
http://www.happy2-island.com/excelsmile/smile04/ …
    • good
    • 0

止めたいときは『ESCキーを押す』です。


ただし、すぐには止まりませんし、止めたところから再開はできません。

作動確認をしたいということでしたら、VBA編集画面のメニューから『デバッグ』⇒『ステップイン』(F8キーで代用可)で1行ずつ実行させることができます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!