一部のセルだけ入力可能にしてシートを保護する
シートの保護設定をして計算式を消されないようにしませんか?
その時にこの部分のセルだけ入力可能にして全体は保護設定したいと思ったことありませんか?
たった1行VBAコード追加で解決できちゃいますよ!
Lockedプロパティでセルのロック解除
一部のセルを入力できるようにしてシート全体を保護設定するには、Lockedプロパティを使って入力可能セルを指定します。
そして次にシートの保護設定をすれば、あっという間に出来上がりです!
これは表示中のシートのセルA1~C10の範囲をセルのロックを解除(False)します。
ちなみにロックする場合は、Tureを使えばセルの保護状態になります。
そして次にシートの保護を設定すれば完了なので、ユーザーフォームに配置したコマンドボタンを押した時のVBAコードを書きます。
とっても簡単でしょ、シートの保護する時に様々な方法があるのですが、もう少し知りたい方は、下記をご覧くださいませ。
パスワード設定を追加する
シートの保護設定をするならば、解除することを考えてパスワード設定ができるようになると安心ですよね。
パスワード設定しなければ、ワークシート上のリボンにある「シートの解除」押せばすぐにシートの保護が解除されてしまいますからね。
VBAコードも簡単でActiveSheet.protectの後に続けてPassword:=”1234″とするだけです。
パスワードの部分は1234でお好きなパスワードに設定してくださいね。
ここまで難しいことは何一つないですよね。
でも重大な欠点があるのです。
これもそうなんですが、順調にVBAコードを書いてトラブルもなく動いていたのに、突然エラー!って経験ありませんか?
上記VBAコードも正常ですが、すでにシートの保護が設定されている状態の時に、このVBAコードを実行するとエラーになります!
大前提が、現状シートの保護状態になっていなことが必要だったのです。
そこで、このようにエラー表示が出てしまうと、製作者自身は対応できますがこのエクセルファイルを渡されて使っている人にとっては、壊れた!って思うのです。
そこでこのようにエラーになったらメッセージを表示して、プログラムを終了するようにしておきましょう。
たった3行追加でエラーの時にメッセージを表示
上の図のように「実行時エラー1004」って表示されても困りますよね。
先ほどお話ししたように、すでにシートの保護が設定されているとエラーになるので、エラーになった場合(シートの保護設定状態)にはシートの保護などの処理をしないで、メッセージを表示するというようにVBAコードを書きます。
そこで使うのが、On Error GoToステートメントで、続けて●●という行ラベルも一緒に指定します。
ここで言う●●は任意の暗号みたいなもので何でもいいのです。
使い方は、最初にOn Error GoToステートメントと行ラベル(ここではmissとします)を下記、既存のVBAコードを挟んで、実行中のプログラムを終了して(Exit Sub)、ここまで処理を飛ばしてって意味でもう一度、行ラベルmissを入れます。
そして表示したいメッセージ(すでに保護設定状態です)を出すとこのようになります。
エラーがあったらmissの部分まで飛ばしてねって意味で、必ず移動先には:(コロン)をつけ忘れると動きませんよ!