こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCEL複数マクロ起動

Aの範囲をダブルクリックしたら特殊文字挿入。
Bの範囲をクリックしたらA4セルの文字表示を赤色にして点滅表示
というマクロを作成しようとしています。
AとBの範囲は一部重複しています。
重複している範囲は、クリックの内容が優先でA4セルを点滅表示としたい。

VBAは全く初心者で、いろんなサイトで見た内容を貼り付けで下記まで作成してみましたが、
動作が中途半端になっています。
どうもシングルクリックとダブルクリックの対応部分でけんかをしているみたいなのですが、
どの様に修正したらよいか教えて頂きたく。
尚、全く新たなVBAでもかまいません、よろしくお願いします。


'Aの範囲;E16:E98あるいはK14:K147をダブルクリックしたら特殊文字挿入
'特殊文字が表示されている状態でダブルクリックした場合は空欄表示
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Intersect(Target, Range("E16:E98", "K14:K147")) Is Nothing Then Exit Sub
Cancel = True
If Target.Value = "" Then
Target.Value = ChrW(&H2713)
Else
Target.ClearContents
End If
End Sub


'Bの範囲;B15:G37をクリックしたらA4セルの文字表示を赤色にして点滅表示
'Bの範囲外をクリックしたら文字表示を点滅表示と停止させて黒色表示…(まだ作成未です)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row < 15 Or Target.Row > 37 Then Exit Sub
If Target.Column < 2 Or Target.Column > 7 Then Exit Sub

点滅フラグ = True
Call 点滅

End Sub

'標準モジュール部
Public 点滅フラグ As Boolean

Public Sub 点滅()
If Range("A4").Font.ColorIndex = 3 Then
Range("A4").Font.ColorIndex = 2
Else
Range("A4").Font.ColorIndex = 3
End If

If 点滅フラグ Then
'進捗状況を示すために準備する
指定時刻 = Now + TimeValue("0時00分01秒") '1秒後
待ち時間 = TimeValue("0時00分01秒")
Application.OnTime TimeValue(指定時刻), "点滅", TimeValue(待ち時間)
End If
End Sub

excel2003です。

投稿日時 - 2011-10-27 10:14:43

QNo.7097045

暇なときに回答ください

質問者が選んだベストアンサー

答えになっているかどうか分からないが、
下記コードは
(1)Msgbox は納得後削除
(2)一般がやりやすいように範囲条件などは変えた。(読者への配慮が足りない)
(3)Application.EnableEvents = Falseが私のポイント。
ーー
点滅の停止・終了条件はあるのか?
ーー
テスト中に、トラブルったら(イベントが反応しなくなったら)
標準モジュールに
Sub test01()
Application.EnableEvents = True
End Sub
を入れて実行。
ーー
標準モジュールに
Public 点滅フラグ As Boolean
Public Sub 点滅()
If Range("A4").Font.ColorIndex = 3 Then
Range("A4").Font.ColorIndex = 5
Else
Range("A4").Font.ColorIndex = 3
End If
If 点滅フラグ Then
'進捗状況を示すために準備する
指定時刻 = Now + TimeValue("0時00分01秒") '1秒後
待ち時間 = TimeValue("0時00分01秒")
Application.OnTime TimeValue(指定時刻), "点滅", TimeValue(待ち時間)
End If
End Sub
ーーーー
シートSheet1のイベントモジュールとして
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
MsgBox "D"
Application.EnableEvents = False
If Intersect(Target, Range("A1:A20", "C1:C10")) Is Nothing Then GoTo p1
Cancel = True
If Target.Value = "" Then
Target.Value = ChrW(&H2713)
Else
Target.ClearContents
End If
p1:
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "C"
If Target.Row < 5 Or Target.Row > 37 Then Exit Sub
If Target.Column > 12 Then Exit Sub
点滅フラグ = True
Call 点滅
End Sub
ーーー
>VBAは全く初心者で
で(1)イベントの利用や(2)点滅などのこと(凝り過ぎ)(3)他のユーザーが使うことを予想事案?などをするのは早過ぎると思う。
イベントなど複数イベントの競合(有線)や色んな操作の場合の理解と手当てなども含め、難しいと常ずね思う。
自分だけが使うときは、おかしい場面で気づいて対処もも可能だろうが。
ーー
それに標題がおかしいと思う。普通この標題を読んだら他のことを連想するのでは。

投稿日時 - 2011-10-27 11:43:14

お礼

回答ありがとうございます。参考にさせていただきます。

VBAは全く初心者で
(1)イベントの利用や(2)点滅などのこと(凝り過ぎ)(3)他のユーザーが使うことを予想事案?などをするのは早過ぎると思う。
⇒VBAの初心者が点滅など懲り過ぎとありますが、質問に対する内容から外れると思います。
この内容に関しては私が使用するデータではありません。多くの作業内容の中で、今、どこの部分を実施しているのかを1目でわかりやすくするためには点滅が一番良い方法かと考え採用しようとした次第です。最初は色だけ変更の内容にしていました。

一般がやりやすいように範囲条件などは変えた。(読者への配慮が足りない)
⇒範囲条件に関してはセルがA1から始まるものが、分かりやすいというものでもないと思います。投稿する時に、もっと少ない範囲に変えることも検討したのですが、問題としていたのは範囲ではありません。
ダブルクリックとシングルクリックの混在した操作での問題解決を望んでいたので、あえてそのままにしました。
逆に質問とは異なる内容へ範囲を変えることの方が、読者に対しての配慮が足りないのではないでしょうか。

尚、私は初心者なりに他のホームページ等を調べた上で質問する様にしています。
まるまるVBA内容を教えてというのでは、質問する側として失礼かと思っているからです。
ということで、ある程度動作する様な状況でVBAの内容をそのまま投稿し、助言を頂きたい(トラブル無く動作可能な状態までもっていきたい)というおもいでいます。

最後に。
あなたは回答された時に、御自分が回答された内容を見直しているでしょうか?
でで とか もも とか言葉がだぶっているところがあります。
読者への配慮を気にされるのであれば、言葉づかいも含めて考慮されたらいかがでしょうか。

投稿日時 - 2011-10-28 09:53:28

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>Bの範囲をクリックしたらA4セルの文字表示を赤色にして点滅表示
 ⇒Worksheet_Changeはセル内容変更時のイベントでシングルクリックでは反応しません。
  SelectionChangeイベント(セリ移動)があるがBeforeDoubleClickの共有はできない。
  従って、BeforeDoubleClickイベントでA,B範囲を認識して処理をするしかないので
  は無いでしょうか。  

投稿日時 - 2011-10-27 12:22:50

お礼

回答ありがとうございました。参考にさせていただきます。

投稿日時 - 2011-10-28 09:55:08

あなたにオススメの質問