シートやブックに簡単・お手軽に制限をかける☆文系初心者でもできる・わかるVBA

 

 

 

いたちめです。

 

エクセルで、必要なセル以外に触れさせたくない。

ユーザー登録しないと、利用できない様にしたい。

エクセルの「印刷」から印刷できない様にしたい。

 

などなど思うことが、あると思います。

 

使う人も作る人もストレスフリーなフォーマットを作りましょう

 

 

 

触って欲しいところ以外は全て、セルとシートをロックする

折角作ったのはいいけど、

触って欲しくないところってありますよね。

 

セルロックは、セルを右クリックしてプロパティから設定して下さい。

 

では、シートのロック(保護)と解除です。

 

Sub シートの保護を設定する()

  Dim sh1 As Worksheet

  Set sh1 = ThisWorkbook.Sheets(“Sheet1")

  Dim パス As String

    パス = “password”

  ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:= True, Password:=パス

 

End Sub

 

になります。

 

解除は後半2行を

ActiveSheet.Unprotect Password:=パス

に変更してあげるだけです。

では、なぜVBA上でロックをかけたり解除したりするのか?

という疑問があるかもしれませんが

 

後述する印刷の制限することで、

入力必須なセルの色塗りだとか、入力漏れの色塗りとか

印刷時に色を全て外したり

 

をVBA上でやってしまえるからです。

 

なお、このモジュールはパスワードを変数にぶちこんでますが

もちろん直でPassword:=”password”

としてもOKです。

 

これを作っておけば、シートがアクティブになる度に

シートを保護することもできます。

 

 

あと、余談ですが、僕は容易にパスワードが推測できない

小さな工夫をしています。

 

Dim パス As String

  パス = sh1.Range("AA10") & sh1.Range("AA20") & sh1.Range("AA12") & sh1.Range("AA21") &sh1.Range("AA13") & …

 

なんじゃこれ?と思いませんか?

これは、標準モジュールをみない限り、シート毎セルをコピーしても

パスワードがわからない様にしています。

VBA自体もロックをかけるので2重ロックになります。

 

 

スポンサーリンク

利用者登録しないと、エクセルを強制終了させる

作成者が名簿と仮パスワードを作って配付しても

様式エクセルファイルを利用者登録しない人もいます。

 

データベース化したとき、これ誰のデータ?

 

ってなると非常に困ります。

 

じゃあ、どこでもいいのでセルを指定して

その指定セル(利用者登録セル)が空欄だったら

エクセルファイルを終了させてしまいましょう。

 

このSUBは「利用者登録が必要なSheet」に記入します。

 

Private Sub Worksheet_Activate()

      Dim ant As Range

      Set ant = ThisWorkbook.Sheets("sheet1").Range("A1")

      

      If ant = "" Then

       antQ = MsgBox("利用者登録が完了していません。登録して下さい。", vbYesNo)

 

       If antQ = vbYes Then

        利用者登録.Show

       Else

        Dim WSH As Object

        Set WSH = CreateObject("WScript.Shell")

        WSH.Popup "本エクセルの利用を終了します", 3, "終了します", vbInformation

        Set WSH = Nothing

        ThisWorkbook.Close SaveChanges:=False

       End If

      End If

End Sub

 

ざっと、こんな感じです。ただ、これだけだと弱いので

一行目を変えてもう一つ作ります。

 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

 

という、セレクションチェンジを利用して、

セルをクリックなどする度に表示させるという

利用者からすると、クソ鬱陶しいことを追加しておきます。

 

Set ant = ThisWorkbook.Sheets("sheet1").Range("A1") のシート名とセルは

各人の都合のよいものへ変更して下さい。

 

 

俺がルールだ!印刷はこのボタンを押すしかできない!

先のセルロックとシートロックに書いた

 

「セルの色をVBAで指示する」

 

ことと

 

データベースにいつ印刷したか、を記録させるために

 

印刷一つもルール化させます。

 

これは「ThisWorkbook」に入力します。

 

Private Sub Workbook_BeforePrint(Cancel As Boolean)

      If Sheets(“sheet1”).Range(“A1”)= "" Then

       MsgBox "このファイルは印刷できません。" & vbCrLf & "稟議書タブの中の印刷ボタンを押下て下さい。", vbCritical

       Cancel = True

      Else

       Cancel = False

      End If

End Sub

 

これだけです。

これを入力することで、ファイル→印刷の流れがストップします。

 

シートにフォームコントロールでボタンを設置し

印刷の流れを登録しましょう。

 

 

今回はちょっと短いですが、以上です。

 

難しいと感じる方がいらっしゃるかも知れません。

とりあえず、コピペから始めてみて下さい

 

失敗しても、VBAに怒られるだけです。

楽しんで改良してみましょう☆

スポンサーリンク
おすすめの記事