Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10876 / 13644 ツリー ←次へ | 前へ→

【19400】ワンクリックで停止させる良い方法 kobasan 04/10/31(日) 8:30 質問[未読]
【19402】Re:ワンクリックで停止させる良い方法 Kein 04/10/31(日) 13:22 回答[未読]
【19403】Re:ワンクリックで停止させる良い方法 kobasan 04/10/31(日) 14:18 お礼[未読]
【19426】Re:ワンクリックで停止させる良い方法 kobasan 04/11/1(月) 19:29 お礼[未読]

【19400】ワンクリックで停止させる良い方法
質問  kobasan  - 04/10/31(日) 8:30 -

引用なし
パスワード
   空白セルを飛ばして読み上げるのではなく、空白セルと読み上げるようにしています。
for eachを使った場合、途中で停止させるのが難しくて、
現在、読上げ停止ボタンをダブルクリックして、エラー処理へジャンプして停止させています。
読上げ停止ボタンをワンクリックで停止させる良い方法があれば教えて下さい。

Sub 読み上げ()
  'XP用
  Dim c As Range
  On Error GoTo err
  '読み上げアイコン表示
  Application.CommandBars("Text To Speech").Visible = True
  '
  'Range("B2:C5").Select  '読み上げ範囲を範囲指定しておく
  For Each c In Selection
    c.Activate
    If c.Value = Empty Then Application.Speech.Speak "空白セル"
    If c.Value <> Empty Then c.Speak
  Next
  '
err:
  '読上げ停止ボタンをダブルクリックすると、エラー処理へジャンプして停止
End Sub

【19402】Re:ワンクリックで停止させる良い方法
回答  Kein  - 04/10/31(日) 13:22 -

引用なし
パスワード
   ご希望のものとは少し違うかも知れませんが、以前に他の掲示板で回答した内容を
貼り付けておきます。使えそうならちょっと改造するだけで済みますが・・。
----------------------------------------------------------------------
>キーを押すか、マウスが動くまで(スクリーンセーバーを解除する時と同じように)
>5秒ごとに音を鳴らし続ける
というコードは、いくつか考えられます。まず EnableCancelKeyの設定で
Escボタンが押されたことを検出し、xlInterrupt で即中止するかループを抜けて
エラー処理ルーチンへ飛ばす方法、これはキーを押すタイミングが、ループ内の
DoEvents で、OSに制御が移ったタイミングに合わないと動作がおかしくなるので、
一番ダメな方法です。次に OnTime で5秒後にマクロを呼び出し、音を出してから
呼び出し元のプロシージャを再帰呼び出しする方法ですが、これもやや不安が残ります。で、最も単純で確実だと考えたのが、以下のようなコードです。

Sub Test_TimeInt() 
 Dim WshShell As Object
 Dim I As Integer, Ans As Integer

 Set WshShell = CreateObject("WScript.Shell")
 For I = 1 To 5   
   Beep   
   Ans = WshShell.Popup("マクロを中止しますか", 5)
   If Ans = 1 Then Exit For
 Next I 
 Set WshShell = Nothing: MsgBox "終了", 64
End Sub

これは、表示時間を制御できるメッセージボックスを出し、出ている間に OK を
クリック(キーなら Enterを押す)することで、ループを抜けるというものです。
メッセージは5秒間表示します。そのまま放っておくと自動的に引っ込んで、次の音を
鳴らします。5回繰り返したら終了するというわけです。

【19403】Re:ワンクリックで停止させる良い方法
お礼  kobasan  - 04/10/31(日) 14:18 -

引用なし
パスワード
   Kein さんありがとうございます。
メッセージボックスが出ている間、読み上げが止まるので利用できません。
何かいい方法があるかなと思ったものですから、投稿させてもらいました。

【19426】Re:ワンクリックで停止させる良い方法
お礼  kobasan  - 04/11/1(月) 19:29 -

引用なし
パスワード
   Kein さん 今晩は
>EnableCancelKeyの設定で
>Escボタンが押されたことを検出

EnableCancelKeyについて、EXCEL VBAのヘルプを見て下記コードを組み込み、
試してみました。
  On Error GoTo handleCancel
  Application.EnableCancelKey = xlErrorHandler  'Esc キーでキャンセル
こちらの方が、いい動きをしました。

新しくEnableCancelKeyを勉強しました。
有り難うございました。

10876 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free