現実問題として、Excel で運用を目的とした定型フォーマットのワークシートを用意しても、使用者が勝手にフォーマットを変えて混乱するという事は普通に起きます。その際、『シートの保護』を利用すると、パスワード無しではなにもできない状態にする事が可能です。 ただ、その際にも定型フォーマットの目的である機能は果たさなければならないので、部分的に入力可能にする必要があります。その為には入力対象のセルに対してロックのチェックを外すという操作が手作業の場合は必要ですが、VBA で実行すると以下のようになります
' ********************
' データ処理をする Sheet
' ********************
Dim objSheet As Worksheet
On Error Resume Next
Set objSheet = Worksheets("処理したいシート名")
On Error GoTo 0
' ロック解除
For I = 1 To 31 * 2 Step 2
' ロック解除(9行目のC列から開始して2行毎に1ヶ月ぶん)
objSheet.Cells(I + 8, 3).Locked = False
Next
また、VBA でワークシート内を変更する場合は、やはり保護されているとエラーとなるので処理の前で保護を解除し、処理の後で再度保護します。
' 保護を一旦解除
objSheet.Unprotect "パスワード"
' 入力リストの解除とロック化
For I = 1 To 31 * 2 Step 2
objSheet.Cells(I + 8, 3).Validation.Delete
Call objSheet.Cells(I + 8, 3).Validation.Add(xlValidateInputOnly, xlValidAlertStop, xlBetween)
' ロック
objSheet.Cells(I + 8, 3).Locked = True
' クリア
If objSheet.Cells(I + 8, 1).Value <> "" Then
objSheet.Cells(I + 8 + 1, 4).Value = ""
objSheet.Cells(I + 8 + 1, 8).Value = ""
End If
Next
' シート保護
objSheet.Protect "パスワード"
このように、セル単位の設計をしておけば VBA で保護フォーマットを作成する事はとても容易に可能です。
|
|
【VBAの最新記事】
- VBA : 一ヶ月の予定リストの作成して、csv を読み込んでデータを表示する
- Excel で 角丸四角形や1つの角を切り取った四角形で、角丸や切り取った長さを一定に設定する為の VBA Sub プロシージャ
- Excel の VBA : ブックを開いたら、フォームを表示してボタンをクリックしたらセルにデータをセットする
- VBA : Microsoft Access(.accdb) の読み込み
- VBA : livedoor お天気API の JSON データを読み込んで利用する
- VBA : 挿入した『テキストボックス』にアクセスする
- VBA : InternetExplorer.Application 経由で JSON.parse を使用する方法
- VBA : FileSystemObject でテキストファイル(CSV) を読み込んでセルにセットする


その為には入力対象のセルに対してロックのチェックを外すという操作が手作業の場合は必要ですが、VBA で実行すると以下のようになります




