|
> > Sub 入力()
> > Private Sub Worksheet_Change(ByVal Target As Range)
> > というのはどうしてですか?
>
> ネットで調べまして、これを使えば思い通りのことができるかな?と
> 思って使用しており、他意はありません。
質問の意味が通じていませんね。
Private Sub Worksheet_Change(ByVal Target As Range)
というのは、イベントプロシージャーというものです。
これの意味は理解していますか?
セル(たち)の変更を実行したときに、自動で実行されるプロシージャです。
イベントプロシージャはシートモジュールに書く必要がありますが、
そうしていますか?
つまり、
Sub 入力()
というプロシージャの中で使うようなものではないのです。
たぶん、
Private Sub Worksheet_Change(ByVal Target As Range)
がプロシージャの宣言ということが理解されていないのでしょう。
警告の意味は、
Sub 入力()がプロシージャの開始なので、
その終了を示す End Subが不足している、
というものです。理解していますか?
そもそも
Sub 入力()
などというものは不要です。
といった、かなり基本的な事の理解が不足していますから、
これをきっかけにして、テキストで勉強することを薦めます。
簡単にコピペして動かせるようなものではありません。
ちゃんと理屈を抑えることも必要です。
そのほうが却って近道です。
これを良いチャンスに変えることを薦めます。
----------------
以上を理解されたことを前提にコメントするなら、
他の回答者さんが確認質問されているように、
C14の変化そのものをキャッチすることは(通常の手段では)できませんから、
C14で使っているセルが変更されたときに動作するプロシージャにします。
それで、
>どんな式が入力されているのですか。
と確認されているのです。それに基づいて助言されようとしています。
その時に、C14の値に基づいて、表示・非表示を判定して、
Shapeに変更を加えるわけです。
例えば、こんな風にです。
Private Sub Worksheet_Change(ByVal Target As Range)
'変更されたセルが、C14で使っているセルでなければ抜ける
If Intersect(Target, Range("C14").Precedents) Is Nothing Then Exit Sub
Select Case Range("C14").Value
Case True
Me.Shapes("Rectangle 1").Visible = True
Case False
Me.Shapes("Rectangle 1").Visible = False
End Select
End Sub
留意点は以下。
(1)このコードを対象のシートのシートモジュールに書き込みます。
そうしたうえで、C14で使用しているセルの値を変更してみてください。
(2)もっとも、関係がないセルの値がかわっても常に処理を実行させていいなら
話は別です。一行目の判定は不要になります。
(3)なお、C14で使用しているセルが別シートであれば、それを変更しても
イベントプロシージャは起動しません。
|
|