過日、「マクロの中断」について質問し適切な回答をいただき無事解決したものです。
ところが、初心者の悲しさ、少し変わると全く応用がききません。
Range("A1:B10")を読み上げている途中で中断したいのです。前回ご教示いただいたところにより 「DoEvents」や「Me.Repaint」「Sleep」などをあちこち挿入してみましたがうまくいきません。理屈、理論を理解できていないので仕方ないのでしょうがよろしかったら又ご指導のほどお願いします。Excel2003です。
Dim c As Range
Dim CancelFlg As Integer
Private Sub CommandButton1_Click()
Range("A1:B10").Select
CancelFlg = 0
For Each c In Selection
’DoEvents
Application.Speech.Speak c.Value
’DoEvents
If CancelFlg = 1 Then Exit For
’DoEvents
Next c
Range("A1").Select
End Sub
Private Sub CommandButton2_Click()
CancelFlg = 1
End Sub
前回のご教示いただいたもの
Private Sub CommandButton1_Click()
Dim i As Integer
CancelFlg = 0
For i = 1 To 100
DoEvents
ActiveCell.Value = 1
ActiveCell.Offset(1, 0).Activate
Application.Wait (Now + TimeValue("0:0:01"))
If CancelFlg = 1 Then Exit For
Next i
End Sub
Private Sub CommandButton2_Click()
CancelFlg = 1
End Sub
No.4ベストアンサー
- 回答日時:
こんにちは。
>MySpeakが見当たりません」というエラーになってしまい
そのコントロールによって、こういうのは置き場所が変わりますので、ややこしいです。一般的には、そのコードは、標準モジュールに書くものですが、前回の場合は、ローカルモジュールに入れるように出来ていますが、UserForm モジュール用にはなっていません。UserForm 用には、以下のようにしてください。
'---------------------------
'UserForm モジュール(修正)
'----------------------------
Private Sub CommandButton1_Click()
Dim c As Variant
CancelFlg = False
myTime = Now()
Cnt = 1
Call MySpeak
Range("A1").Select
End Sub
Private Sub CommandButton2_Click()
CancelFlg = True
myValue = ""
End Sub
'------------------------------------
'標準モジュール
'------------------------------------
Public CancelFlg As Boolean
Public myTime As Date
Public myValue As String
Public Cnt As Integer
Sub MySpeak()
With Range("A1:B10")
.Cells(Cnt).Select
myValue = .Cells(Cnt).Value
End With
If CancelFlg Or myValue = "" Then
On Error Resume Next
Application.OnTime myTime, "MySpeak", , False
On Error GoTo 0
Exit Sub
Else
If myValue <> "" Then
DoEvents
Application.Speech.Speak myValue
End If
myTime = Now() + TimeSerial(0, 0, 1)
Application.OnTime myTime, "MySpeak"
Cnt = Cnt + 1
End If
End Sub
再三に渉りご指導いただきありがとうございました。
きっちり動きました。
「マクロは難しい」ということを実感させられ、あまり背伸びしないで初歩的なもので楽しむようにしたほうがいいのでは、と思っているところです。
でも「マクロは面白い」いろんなことをやってみたい。これにこりずに今後ともご指導くださるようお願いします。
No.3
- 回答日時:
こんにちは。
こんな方法はどうでしょうか?前よりは、多少良くなったとは思います。
完全に止まっている時間を作ってあげて、砂時計が出ていないときに、繰り返しボタンを押せば、とまります。
Dim CancelFlg As Boolean
Dim myTime As Date
Dim myValue As String
Dim Cnt As Integer
Private Sub CommandButton1_Click()
Dim c As Variant
CancelFlg = False
myTime = Now()
Cnt = 1
Call MySpeak
Range("A1").Select
End Sub
Private Sub MySpeak()
With Range("A1:B10")
.Cells(Cnt).Select
myValue = .Cells(Cnt).Value
End With
If CancelFlg Or myValue = "" Then
On Error Resume Next
Application.OnTime myTime, Me.Name & ".MySpeak", , False
On Error GoTo 0
Exit Sub
Else
If myValue <> "" Then
DoEvents
Application.Speech.Speak myValue
End If
myTime = Now() + TimeSerial(0, 0, 1)
Application.OnTime myTime, Me.Name & ".MySpeak"
Cnt = Cnt + 1
End If
End Sub
Private Sub CommandButton2_Click()
CancelFlg = True
myValue = ""
End Sub
この回答への補足
早速追加のご教示ありがとうございます。
まことにお恥ずかしいのですが、残念ながら全くの初心者で十分理解できません。
「MySpeakが見当たりません」というエラーになってしまい実行することができません。
Private Sub MySpeak() を標準モジュールにもっていったり、Sub MySpeak()にしてみたりしましたがうまくいきません。折角のご好意を活用できなくて申し訳ありません。こんなことが出来ないのに、マクロの中断などと言っているのがおこがましいのかもしれません。
今は時間がないのでこれで失礼します。後刻ゆっくり勉強させてもらいます。ありがとうございました。
No.2
- 回答日時:
こんばんは。
マクロが稼動している最中は、ふつうは外部からの命令を受け付けません。DoEvents というのは、そこにメモリの空きを作って、命令を受けられるようになるのですが、この種のコントロールを使っているものは、難しいです。
一般的には、Flg のデータ型は、Boolean型です。数字型のFlg は、分岐がある場合のみです。
前回は、No.3709490 ですね。
'-----------------------------------
Dim CancelFlg As Boolean
Private Sub CommandButton1_Click()
Dim c As Range '←これは中です。
CancelFlg = False
For Each c In Range("A1:B10")
Application.Speech.Speak c.Value
Application.Wait (Now + TimeValue("0:0:01"))
DoEvents
If CancelFlg Then Exit For
Next c
Range("A1").Select
End Sub
Private Sub CommandButton2_Click()
CancelFlg = True
''以下のあるなしで試してみてください。
''うまく行くときもあれば、そうでないこともあります。
'Application.SendKeys "^{ESC}"
End Sub
ただ、この種のブレークを入れるマクロは、本格的に書くと、非常に難しくなりますから、ある程度の妥協してください。ESCキーをブレークに換える方法もあるのですが、それ以外のマクロは、私は、以前、ここのカテゴリで書いたことはあるのですが、ハングの可能性も出てきますので、あまり自信がありません。
早速のご回答いただき恐縮です。
いつもながら、的確なお答えで感謝いたします。
前回のものは、ほぼ100%停止できましたが、今回のものはとまる時もあればとまらない時もある、でWaitを002,003と伸ばしてもそれほど改善はみられないようです。
そのため実用化は難しいかなという気もしております。
それでも今回、「 Range("A1:B10").Select」の扱い方などでも大変勉強になりました。今後ともよろしくお願いします。
No.1
- 回答日時:
経緯が分かりませんので、問題点や疑問点を書き起こしてくれた方が良いです。
調べる甲斐性も無いし…。
普通にExcel VBAのマクロを中断するのなら、Ctrl+Breakキーで可能なハズですが、こちらは効かないのでしょうか?
この回答への補足
大変失礼いたしました。
ユーザーフォームに配置したボタンでマクロを実行し、もう一つのボタンを押して中断させる、という形にしたかったのです。
たしかにESCボタンでも中断できますが、フォーム上で完結させたかったのです。画面を見るだけで操作が分かる形にしたいということです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WPSOffice_マクロの有効化について
-
Excel マクロの編集がグレーに...
-
エクセル ボタンに設定したマク...
-
エクセル マクロ名にブック名...
-
EXCEL折れ線グラフの線を一気に...
-
エクセルマクロで、別のブック...
-
Excelのマクロでボタンを押すと...
-
EXCELのマクロが他のパソコンで...
-
EXCEL VBAで、グラフの凡例の表...
-
エクセルでマクロを確認できな...
-
エクセルでヘッダーにセルの内...
-
エクセルのマクロについて教え...
-
エクセルの表を複数枚印刷した...
-
エクセルでマクロ(Excel 4.0)...
-
エクセルの、記録を終了したマ...
-
マクロを組んだエクセルの動作...
-
Word-VBAで文字色を一括置換し...
-
Excelマクロで、稼働中のマクロ...
-
Excelのマクロ名の並び順の法則...
-
個人用マクロのショートカット...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WPSOffice_マクロの有効化について
-
Excel マクロの編集がグレーに...
-
Excelのマクロでボタンを押すと...
-
エクセルの表を複数枚印刷した...
-
エクセルの、記録を終了したマ...
-
エクセル マクロ名にブック名...
-
複数のマクロボタンをまとめて...
-
エクセルで、「いいね」のよう...
-
エクセルマクロで、別のブック...
-
エクセル ボタンに設定したマク...
-
エクセルでマクロ(Excel 4.0)...
-
別シートのマクロボタンをマク...
-
Excelマクロで、稼働中のマクロ...
-
マクロをマクロを使ってコピー...
-
(Excel VBA)シートコピー時マ...
-
エクセルで明日の日付を表示す...
-
なぜマクロの記録がなくなって...
-
エクセルでマクロを確認できな...
-
Excelのマクロ名の並び順の法則...
-
マクロ実行ボタンを自動削除したい
おすすめ情報