[[20050812165843]] 『C3セルが選択されたら実行させる』(KI) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『C3セルが選択されたら実行させる』(KI)
 いつもお世話になります。早速ですが、
 マウスの左クリックでC3セルが選択された瞬間に
 SUBマクロ()を実行させるにはどのようにすれば良いのでしょうか。
 また、SUBマクロ()が実行されている最中に、C3セルから他のセル
 を選択した場合に、SUBマクロ()を停止させることって出来るのでしょうか。
 もし出来るとすればどのような記述になるのでしょうか。
 恥ずかしながらマクロの記録がようやく出来るようになった程度のレベルです。
 どうか宜しくお願い致します。      Windows 2000  Excel 2000

 >マウスの左クリックでC3セルが選択された瞬間に
 >SUBマクロ()を実行させるにはどのようにすれば良いのでしょうか。
 
クリックした時と言うイベントが無いので、C3が選択された時と言う条件ですが、
以下はSub マクロを呼び出す一例です。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address(False, False) = "C3" Then
        Call マクロ
    End If
End Sub

 >また、SUBマクロ()が実行されている最中に、C3セルから他のセル
 >を選択した場合に、SUBマクロ()を停止させることって出来るのでしょうか。
 
一応例を2つ示します。
どちらも同じ理屈で動いてます。
実行中の負荷は考慮していません。
原理をご理解いただくのは少々難しいかも知れません。
解説するのも、少々難しいかも知れません。
Sub マクロ の内容も分からないので、応用できないかもしれません。
分からない部分はヘルプとにらめっこしてみてください。
実ファイルで試す場合は必ずそのファイルのバックアップを取ってから試してください。
(新規ブックで試す事をお勧めします)
 
案1
'--------------------------------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static blnEnd As Boolean
    If Target.Address(False, False) <> "C3" Then
        blnEnd = True
        Exit Sub
    End If
    blnEnd = False
    'マクロを繰り返し呼び出す
    Do
        DoEvents
        If blnEnd Then
            Exit Do
        End If
        Call マクロ
    Loop
End Sub
'--------------------------------------------------------------------------------
Sub マクロ()
    Range("A1").Value = Range("A1").Value + 1
End Sub
 
案2
'--------------------------------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim blnFlg As Boolean
    If Target.Address(False, False) = "C3" Then
        blnFlg = False
    Else
        blnFlg = True
    End If
    Call マクロ(blnFlg)
End Sub
'--------------------------------------------------------------------------------
Sub マクロ(ByVal blnEnd As Boolean)
    Static blnRun As Boolean
    Static blnFlg As Boolean
    blnFlg = blnEnd
    If blnRun Or blnEnd Then
        Exit Sub
    End If
    blnRun = True
    '延々処理を繰り返す
    Do
        Range("A1").Value = Range("A1").Value + 1
        DoEvents
        If blnFlg Then
            Exit Do
        End If
    Loop
    blnRun = False
End Sub
(ご近所PG)注意書き追記

 毎度っ!
 なんにでも首突っ込む弥太郎です〜(笑

 ところで、これってヤバァイんやおまへんかぁ〜。
 セニョールKIさんの意図せんところでマクロが走ってしまう危険性大と思いまんねん
 けどなぁ。
 これは↓キーでC3を走り抜けてもいつのまにやら思いもせえへん結果になっとるっちゅ
 う事ですわなぁ。

 まぁ、KIはんが手ぇ抜こうとしたがる理由が分かりまへんけど、指が攣るなんて持病
 が無い限りせめてWクリックぐらいの労力は惜しんだらアカンと思いまんねんけどどう 
 でっしゃろ?
 それとも「あ”〜〜〜」と天を仰ぐ瞬間を愉しみたいんやったらこの方法がええんかも
 ネ。(笑
      先日はデンキュウ(弥太郎)

 やはりダブルクリックの例を示した方が親切だったかしら。
弥太郎さんも補足してくれてますが、
Worksheet_SelectionChange と言うイベント使うと、
矢印キーでウロウロしてC3セルの所をフイッと横切っただけでも動きますんで
そこの所よろしくご注意の程。
マウス操作にのみ限定したいなら、
Worksheet_BeforeDoubleClick (ダブルクリック時)か
Worksheet_BeforeRightClick (右クリック時)をご検討ください。
左クリック時イベントは存在しません。
(ご近所PG)詳しくはヘルプか識者に

 ご近所PGさん&弥太郎さんどうも有難うございました。
 ご近所PGさんに提示頂いたPRGで希望通りの動きが出来ました。
 ダブルクリックで行わせては?というふうにアドバイス頂いたのですが、
 実はこの sheet ではすでに BeforeDoubleClick とか SelectionChange を使用しています。
 そこで再度質問なんですが、
 同一 sheet で BeforeDoubleClick とかSlectionChangeを多用しても良いのでしょうか?
 途中で質問が変わってしまってすみません。
                                                  (KI) 

 よくよく考えたら
動いてるマクロの中でActiveCellのAddressをチェックすれば
小難しい事を考えなくても良かったかもしれない。

 >同一 sheet で BeforeDoubleClick とかSlectionChangeを多用しても良いのでしょうか?
多用と言うのが「いくつも書いて良いのか?」と言う意味であれば、
1つのシートにそれらイベントは1つしか記述する事はできません。
なので、それらイベント時に複数の処理を行いたいならば、
その1つのイベント内に複数の処理を記述する事になります。
(ご近所PG)変な日本語になったかも

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.