「これはヤバかったな」という遅刻エピソード

何度もお世話になります。

A5:A20のどれかをクリックしたときに
クリックしたセルが値が入力済みか確認してから
ファイルを名前を付けて保存したいのですが
クリックしたという情報(イベント?)の取得方法が
わかりません。

(1)どのようにチェックすればよいのでしょうか?
(2)また、皆さんはどのようにしてこのような問題を解決してるのでしょうか?

よろしくお願いします。

A 回答 (3件)

Sheet1だとして、


Sheet1のマクロで

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
If Target.Column = 1 And Target.Row >= 5 And Target.Row <= 20 Then
If Target.Value <> "" Then MsgBox "入力済み"
End If
'
End Sub

と入れると、クリックしたセルがA5からA20のどれかで
かつセルに値が入っているときのみ”入力済み”とメッセージが表示されます。
このメッセージ表示の部分を、「名前を付けて保存」の処理に置き換えてはいかがでしょうか。
    • good
    • 3
この回答へのお礼

お礼が遅くなり申し訳ありませんでした。
ご指摘の方法で希望する動作ができました。
ご回答ありがとうございました。

お礼日時:2002/08/29 14:38

シートをクリックしただけで発生するイベントは無いのではないでしょうか・・ダブルクリックなら BeforeDoubleClickイベントで取得できるのですが。

できればダブルクリックやボタンでのファイル保存に仕様変更されてはいかがでしょう。

多少強引なやりかたとしては、次のような方法もあるにはあります。
(1)A5~A20全てのセルに、セルと同じ大きさテキストなしのラベル(フォームツールバーのほうです)を貼り付け、それぞれにマクロを登録する
(2)登録したマクロのプロシージャ内で、クリックされたオートシェープの名前等によりクリックされたことにするセルを判断する
(3)マクロプロシージャ内にセルのselectメソッドを書いておけば、見た目上はほぼセルがクリックされてイベントが発生したように見えます

SelectionChangeイベントではキーボードによるセル移動などにも反応してしまったり、現在選択されているセルをクリックしても反応しないという問題があります。changeイベントはセルの値が変更されなければクリックしても反応が無い状態になってしまいます。結果としてこのように面倒な方法しか思いつかないのですが、仕様を少し変更していずれかのワークシートイベントを取得して作業させる方が良い気がします。
    • good
    • 3
この回答へのお礼

お礼が遅くなりまして申し訳ありません。
色々な方法があるのですね。大変勉強になります。
今回は#1さんの方法で対応いたしました。
今後、変更などする際にBraveStoryさんの方法も
参考にさせていただきたいと思います。
ご回答ありがとうございました。

お礼日時:2002/08/29 14:49

CHANGEの方が適当かなと思いまして。


Private Sub Worksheet_Change(ByVal Target As Range)
a = Target.Row
b = Target.Column
If a >= 5 And a <= 20 And b = 1 Then
If Target.Value = "" Then
MsgBox "値入力なし"
Else
flname = InputBox("ファイル名=")
ActiveWorkbook.SaveAs Filename:=flname
End If
Else
msgbox "範囲外入力です"
End If
End Sub
    • good
    • 3
この回答へのお礼

お礼が遅くなり申し訳ありませんでした。
今回のマクロは#1さんの方法で実行させていただきました
Changeという新しい情報をしり今後は色々使い分けたいと思います。
勉強になりました。ご回答ありがとうございました。

お礼日時:2002/08/29 14:44

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報