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

VBAはほとんどいじったことのない初心者です。

イベントプロシージャをインターネットから探してきて、コピペして使おうとしてます。

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo ERR_HANDLER

If Target.Address(False, False) = "E2" Then
ActiveSheet.Name = Range("E2").Value
End If

Exit Sub

ERR_HANDLER:

MsgBox "現在のE2セルの値はシート名にできません。"

End Sub

やりたいのは、セルE2の値に変更があったら、そのセルの値をシート名にしたいということです。

初心者には難しいでしょうか?

ご教示いただけると幸いです。

よろしくお願いします。

A 回答 (2件)

1番さんが回答の中で最高のヒントをくださってますね。


> コード自体はあってます。
> 貼りつける場所が問題なのでは。

要するに、このコードを「そのまま」「該当シートのモジュールに」貼りなさい、という事です。
例えば、現在の名前が「Sheet1」であるワークシートに設定したいのであれば、
正しく貼り付けると添付図のような感じになるはずです。


もう一つの可能性として、
マクロのセキュリティで、マクロを無効にしているケースもありますが、
これだとマクロを動かそうとすると警告が出てきます。
警告が出てこないなら、マクロは有効な状態であると言えます。


どちらにしても「どのように」動かないのか、
状況がわからない状態では的確なアドバイスはほぼ不可能と思ってください。
警告が出るのか、エラーメッセージが出るのか、はたまた無反応なのか、
それによって対処も少しずつ変わります。



> 初心者には難しいでしょうか?
内容は至極簡単で、知らない人でも英語で読めばなんとなくわかるレベルの処理です。
(単語自体は中学校で習う程度の英単語ですよね。)
ですが、「どこに書けばどのタイミングで動くか?」を理解しないと、
良いタイミングでは動きません。

他さまのサイトへのリンクで恐縮ですが、
http://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vb …
ここを一読頂ければ、なんとなく理解できるのではないかなぁ、と思いますので、
参考になさってくださいませ。
「Excel2010 イベントプロシージャ」の回答画像2
    • good
    • 0
この回答へのお礼

「無反応」だったのですが・・・

ようやく原因がわかりました。

E2にはVLOOKUPの式が入っていて、別のセルE3にコードを入力すると、他のリストから店舗名を引っ張ってくる、というようにしていました。

ですのでE3を変えるとE2も変わるので、その変わったE2をシート名にしたかったのですが、このイベントプロシージャは入力による変更の場合に動作するものと理解することができなかったのです。
(VLOOKで値が変わってもシート名は更新されない。)

そこで

If Target.Address(False, False) = "E2" Then

のE2をコードを入力するE3に変えて

If Target.Address(False, False) = "E3" Then


にしたところ、期待通りシート名が変更されました。

大変勉強になりました。

ありがとうございました。

お礼日時:2012/12/21 12:20

コード自体はあってます。


貼りつける場所が問題なのでは。

シートの見出しで右クリック、コード表示を選び、貼りつけします。

貼りつけたシートでしか動作しません

この回答への補足

さっそくご回答いただきましてありがとうございます。

教えていただいた方法で試してみましたが、動きませんでした。

何か基本的な設定にミスがあるような気もします・・・

拡張子はxlsmで保存しているのですが。

補足日時:2012/12/20 17:39
    • good
    • 0

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

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


このQ&Aを見た人がよく見るQ&A