アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルVBAを使って、エクセルに直接入力したら、本当に変更しますか?とmsgboxを出したいです。

保護をかけるほどではなし、直接入力もほとんどしないような
(一覧表があって、その中をダブルクリックで選択すると、
自動的に目的のシートに入力されるようなVBA)
を組んでいるのですが、
たまに、直接入力したいときに、入力してもいいの?と確認したいです。
(↑むしろ、これがたまにあるので、保護をかけておきたくなのですが)

皆で共有するシートになりますので、
誤って違うセル(他人が書き込み済みで変更の必要がないセル)に書きこまないようにと、
追加で書き込む内容の確認を込めて、

エクセルに直接入力したあと、
「本当に変更していいですか?」
yes→変更させる
no→変更させない

みたいなことしたいのですが、
さっぱり、どうしたらいいかわかっていません。

ワークシートのchangeだと、
変更してしまってから動くみたいで、、
変わる前に上の動作はかけれないみたいだったので。

こういったことはできるのでしょうか?

わかるかた、ご教授ください。
ざっくりした言い方ですみません。
どのようにわからないことを伝えていいかもわからないぐらい、
悩んでいます。
指摘がありましたら、補足させていただきます。
よろしくお願いいたします。

A 回答 (3件)

つぎでいいのではないでしょうか。


VbNoで変更しません。

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False

dim resp as integer
resp = MsgBox("本当に変更するのかい", vbYesNo)
If resp = vbNo Then
Application.Undo
End If

Application.EnableEvents = True

End Sub
    • good
    • 1
この回答へのお礼

ありがとうございました。
ちゃんと動きました。
本当にたすかりました。

お礼日時:2011/09/26 00:16

VBAを使わなくとも全く同様のことができる方法があります。


セルへの入力で何かを入力しようとすれば注意を出す方法です。
注意を出したいセルの範囲を選択してからエクセル2010でしたら「データ」タブの「データの入力規則」をクリックします。
表示の画面の「設定」タブでは入力値の種類で「ユーザー設定」を選択し、数式の窓には =A1<>A1 などと式を入力します。
その上で同じ画面で「エラーメッセージ」タブをクリックします。
スタイルの窓では「注意」を選択し、エラーメッセージの窓には「本当に変更してもいいですか?」などと入力してOKします。
これでお望みの操作ができるようになります。
    • good
    • 0
この回答へのお礼

ありがとうございます。まさか、VBAを使わなくてできるとは!
目からうろこでした。
この回答をいただいてから、エクセルでできることは、エクセルで設定したほうが、
動作が軽くなるのでは?と思い、エクセルできることを探しています。

ただ、数式はセルの数だけ、設定していかないといけないのでしょうか?
B1のセルも同じようにしたかったら、
=B1<>B1
を入力していく?

実は、100個ぐらい品物の数がありますので、一気にできることがあれば、使えるのですが、
ちょっとわからなかったので。また、地道に調べていこうと思います。

でも、エクセルでできるという、考え方はとてもありがたく、役立ちました。
こちらも、ベストアンサーに選びたかったのですが、
一応、VBAということで。本当にすいません。
でも、助かっています。
ありがとうございました。

お礼日時:2011/09/26 00:29

ざっくりこんな感じ。


ワークシートのところへ貼り付けてみてください。

Private aaa As String

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ret As Integer
If Cells(Target.Row, Target.Column) <> aaa Then
ret = MsgBox(aaa, vbOKCancel)
If ret = vbCancel Then
Cells(Target.Row, Target.Column).Value = aaa
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
aaa = Cells(Target.Row, Target.Column).Value
End Sub

説明:
Worksheet_SelectionChangeで、aaaという変数にセルの値を保存しておいて
Worksheet_Changeでキャンセルなら、aaaという変数から戻す。

ただし、ファイルを開いた直後にカーソルがいるセルを変更するときは、
Worksheet_SelectionChangeは動いていないかも。
動いていないなら、worksheet_activateか他のイベントで、selectされているセルの値を
aaaへ入れておかないとダメ、かも。
(未確認です。確認してみてください。・・・わからないようでしたら、こちらで調べてみますけど。)
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
試してみましたが、言われている通りに、目的のセルからずれてしまうことがありました。
それを直す方法は私ではわかりませんでした。
No.2の方の方法を採用させていただこうと思います。

でも、こんなにしっかり考えていたいて、ありがとうございました。

お礼日時:2011/09/26 00:05

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