マクロを使用して Excel スプレッドシートのセルをパスワードで保護できますか?

マクロを使用して Excel スプレッドシートのセルをパスワードで保護できますか?

Excel スプレッドシートをタイムクロックとして設定しています。従業員は、その週のタイムクロック ファイルを開き、指定された場所に週の終了日を入力します。ここからは、入力にはマウスのみを使用します。従業員は、曜日と、出勤、昼食に行く、昼食から戻る、帰宅というアクションの適切なセルを選択します。カーソルを正しいセルに置いた後、アクションの正しい時間を入力するボタン (マクロにリンクされたボタン) をクリックします。従業員が目的のセルに移動して、任意の時間を入力できないようにする方法がわかりません。ボタン マクロの一部として、セルをパスワードで保護することを追加しようとしましたが、うまくいきませんでした。従業員が時間を変更できないようにセルを保護する方法を誰か知っていますか? または、これをすべてまとめて行うもっと簡単な方法はありますか?

答え1

ユーザーには Excel ファイルへの書き込み権限があります...

これを Excel 内で技術的に強制することはできないと思います。別のソフトウェアが必要だと思います。しかし、Excel マクロのスキルには感心します。

詳しく説明すると:

  • ユーザーがセルを変更できる場合、ユーザーが自分でセルを変更する (値を入力する) ことに対しては保護されません。
  • ユーザーがセルを変更できない場合、セルはユーザーによる値の入力からは保護されますが、マクロから正しい情報が書き込まれることもできません。

これは、パスワードなしでは読み取ることもできないセルの暗号化とは異なります。

世の中にはタイムカード ソフトウェアがたくさんあると思いますが、そのほとんどは収集したデータを Excel にエクスポートできると思います。私があなたの立場なら、スプレッドシート以外にも視野を広げると思います。

答え2

VBA イベント ハンドラーによるセルの変更を禁止することができます。

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    With Target
        If If Not Intersect(Target, Range("A1:B10")) Is Nothing Then Application.Undo
    End With
    Application.EnableEvents = True
End Sub

VBA マクロを使用してセルの値を設定すると、このイベントが発生するかどうかはわかりません。数式によって誘発される変更では発生しないことはわかっています。ただし、セルを変更する前に変更を設定し、変更後に設定を解除できるようにするためのグローバル変数を簡単に定義できます。

また、Worksheet_SelectionChangeユーザーがセル内にカーソルを配置できないように、イベントをトラップすることもできます。許可されていないセルに対しては、カーソルを定義済みのセル (A1 など) に再配置するか、最後に許可されたカーソルの位置を記憶してそこに再配置するより複雑なコードを記述します。

関連情報