プロが教えるわが家の防犯対策術!

①エクセルの特定セル(A1)を目立たせるため、ブリンクするマクロを設定しました。
②特定セル(A1)を含むブックを開くと、このマクロは自動実行するようになっています。
  続いて次のマクロをお教えいただきたくよろしくお願いいたします。
③ブリンクしている特定セル(A1)を確認の意味で左クリックすると、ブリンクは停止します。
④ブリンク停止後の特定セル(A1)は、色なし(白)にしたいのです。
⑤当然このブックを閉じて再度開くと①からのスタートとなります。

私マクロの初心者、見よう見まねでネット上の資料から下記を作成しました。
上記③④のマクロをどのように追加したらよいか教授ください。
          記
Private Sub workbook_Open()
Blink
End Sub
Sub Blink()
'ブリンク時の色番号↓カラーインデックス参照
Const ColorIdx1 = 6
Const ColorIdx2 = xlColorIndexNone
'ブリンクしたいセル番号・・・・・・・↓
With Worksheets("Sheet4").Range("a1").Interior
If .ColorIndex = ColorIdx1 Then
.ColorIndex = ColorIdx2
Else
.ColorIndex = ColorIdx1
End If
End With
Application.OnTime Now + TimeValue("00:00:01"), "Blink"
End Sub

質問者からの補足コメント

  • うーん・・・

    WindFaller様早速の回答ありがとうございます。
    初心で高齢の私には難解で、汗です。
    取り合えず、WindFaller様のコードに変更してみましたが、
    エラーは出ませんが、何の動きもありませんでした。
    手動の実行ボタンでも同様でした。
    私のExcelはOffice2013h&bです。何かありますでしょうか?
    なお冒頭の Private Sub Workbook_Open() 以前のコードも必要ということでよろしいのですね。
    つたない質問ですがよろしくお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/10/04 00:08
  • うーん・・・

    WindFaller様色々ご親切にありがとうございます。Option ExplicitとPrivate flg As Booleanに ' を付けたら動作するようになりましたが、若干異常動作ですが文字制限で今回省略します。でも何となく全体像が見えましたので、頑張って挑戦します。私の意図がよく伝わっていなかったかもしれません。再度以下に記します。
    改マクロ仕様書
    目的=セルの文字を注目させるため、当該セル(背景)をブリンクする。
    ①Book名=セルのブリンク、シート名=Sheet1、ブリンクセル=A1
    ②ブリンク色は白と3赤の交互表示。
    ③当該Bookを開くと自動実行でA1は白・赤でブリンクする。
    ④白・赤のブリンク時間は1秒交互とする。
    ⑤A1を確認の意味でマウスクリックすると、ブリンクは白で停止しホールドする。
    ⑥Excel再起動ごとに、①~⑤を繰り返す。
    これができると嬉しいんですが。

      補足日時:2017/10/04 23:16
  • うーん・・・

    WindFaller様 詳細コメントに感謝です。
    ①肝心な flg をFasleのままにして・・・➡了解、よく検討してみます。
    ②登録がない限りはErr を発生します。➡理解不足で、何の登録でしょうか?
    ②元の質問は、Sheet4 に・・・➡Sheet1に変更、失礼しました。
    ③Const ColorIdx1 = 6 ←黄色/赤なら、「3」➡3に変更、失礼しました。
    ④Const ColorIdx2 = xlColorIndexNone➡白とNoneの違い勉強になりました。
    ⑤いくら1秒の設定をしても、➡承知しております。
    ⑥ホールド(hold)というのは、マクロの一次停止の状態のことで、➡悩みましたが、持続でしょうか。
    長々とお付き合いいただき、恐縮しております。
    私76歳、むかしの電子機器設計屋、ボケ防止に趣味で自家用マクロに挑戦・・・無理かなー
    トラブルには全く心配ご無用です。

      補足日時:2017/10/05 14:33
  • HAPPY

    ママチャリ様 アドバイスありがとうございます。
    悪戦苦闘しまして、残務①=A1セルのブリンク停止がタイミングにより赤または白になったり、②ブリンク停止後A1以外のセルをクリックすると再びA1セルがブリンクを始める、等々がありましたが何とか解決しました。
    WindFaller様 には当初から手ほどきをいただき大変ありがとうございました。
    皆様の親切に感謝感激です。毎日が日曜日で時間はたっぷりあるので習得はなんとか、でも歳がら、覚えた事を3歩歩くと飛んでしまうのは、困りものです(笑)。マクロに一層チャレンジ魂が湧いてきました。
    これをもってWindFaller様をベストアンサーとさせていただき、終了とさせていただきます。

    No.4の回答に寄せられた補足コメントです。 補足日時:2017/10/06 18:32

A 回答 (4件)

私の記憶では、確か、OnTimeメソッドは、それを停止する時に、エラーが発生することがあるので、Error トラップが必要だった気がします。

簡単なようではあるけれども、ちょっと難しい内容です。こういうのは、自分で開発する分には面白いけれども、私のように書かれてしまうと、面白みが減ってしまうかもしれません。かといえ、なかなか、気付きにくい部分があるように思います。マクロ歴2年ぐらいの時に手をつけるのが一番良いと思います。

ミソは、モジュールスコープのflg 変数です。

'//ThisWorkbook モジュール
Option Explicit

Private flg As Boolean '←これが大事
Private Sub Workbook_Open()
 flg = True
 Call ThisWorkbook.Blink
End Sub
Sub Blink()
'ブリンク時の色番号↓カラーインデックス参照
 Const ColorIdx1 = 6
 Const ColorIdx2 = xlColorIndexNone
 'ブリンクしたいセル番号・・・・・・・↓
 With Worksheets("Sheet4")
  .Activate
  With .Range("A1").Interior
   If .ColorIndex = ColorIdx1 Then
    .ColorIndex = ColorIdx2
   Else
    .ColorIndex = ColorIdx1
   End If
   On Error Resume Next
   Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Blink", , flg
   If Err.Number <> 0 Or flg = False Then
    .ColorIndex = ColorIdx2
   End If
   On Error GoTo 0
  End With
 End With
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
 flg = False
End Sub
この回答への補足あり
    • good
    • 0

横から失礼します。


OnTime メソッドとは、指定した時刻に指定したプロシジャの実行を予約するものです。
どじじじいさんの作られているマクロは、プロシジャの中で再度、自分自身を実行するための予約を行っています。よって、止めたい場合は予約をキャンセルするのではなく、次の予約をしないようにした方が簡単です。
要するに、flg が False だったら、OnTimeメソッドを実行せずに、プロシジャを抜ければOKです。
肝心の flg の件は、Excelのヘルプを「適用範囲」で検索してみて下さい。慣れるまでは何を言っているのか分からないと思いますが、重要なことなので是非、習得してください。
いくつになってもExcelで楽しめたら素敵ですね。気楽に頑張ってください。
この回答への補足あり
    • good
    • 0

>改マクロ仕様書



まず、私は、質問に対して、一度はマクロは作って差し上げますが、リクエストに応じた製作依頼や仕様変更によるマクロ・プログラムの作成しておりません。理由は、後々トラブルになる可能性が高いからです。掲示板の応答は、あくまでも、質問した本人が切迫した状況でない限りは、自力で完成させることを趣旨としています。

次に、
Option ExplicitとPrivate flg As Booleanに ' を付けたら動作するようになりましたが、
肝心な flg をFasleのままにして、動作するとは思えません。何かの間違いか、別のものをお使いになっているように思います。

 Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Blink", , flg
flg は、True によって成り立ち、False は、登録がない限りはErr を発生します。

元の質問は、Sheet4 になっていましたので、必要なら、Sheet1 に書き換えてください。

元の質問のままですから、必要なら書き換えてください。
 Const ColorIdx1 = 6 ←黄色/赤なら、「3」
 Const ColorIdx2 = xlColorIndexNone
白は、「2」ですが、色が残り、枠線を消してしまいますので、xlColorIndexNone でよいはずです。

>④白・赤のブリンク時間は1秒交互とする。
現行のコードでは、いくら1秒の設定をしても、それは約束はできません。それほどの厳密な時間を必要とするものとは思えません。

>⑤A1を確認の意味でマウスクリックすると、ブリンクは白で停止しホールドする。

ホールド(hold)というのは、マクロの一次停止の状態のことで、一次停止したら、デバッグモードになってしまいます。

なお、PCのスペックによっては正確な点滅を繰り返さないこともあります。
そのようにご理解ください。
    • good
    • 0

こんにちは。



>初心で高齢の私には難解で、汗です。
ネットの中では、誰もが20代です。それよりも若い人はそれ以上の年齢で、それよりも年を取っている人は、それ以下の年齢で、ということです。そういう気概を持たないと、やりきれなくなってしまいます。同年代だけで囲まれていると、いろんな感覚が鈍くなってしまいます。

元のコードがどのように書かれていたか、
「ThisWorkbook モジュール」
というのは、どこか分かりますか?
Sub Blink()だけでは、フラグ(flg)がFalse なので動きません。Workbook_Openから始めてください。(VBEditor の画面を開いたまま、カーソルをWorkbook_Open()の下に置き、F8を押せば、ステップモードで動き始めます。また、カーソルを置き、そのまま、F5 または、実行ボタン>をクリツクしてもよいです。)

>なお冒頭の Private Sub Workbook_Open() 以前のコードも必要ということでよろしいのですね。

その行の前ということなら、
Option Explicit は二重にならなければ、そこが画面の始まりです。

このマクロは、Excel 97 から現在の最新バージョンまでは動きます。

p.s. この「ブリンク」の質問は、かなり古くからありますが、今回は中級レベルですが、中には高度な解決方法もあるようです。
    • good
    • 0

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