![ワークシートを保護せずに特定のセルの内容を保護する](https://rvso.com/image/1497075/%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B7%E3%83%BC%E3%83%88%E3%82%92%E4%BF%9D%E8%AD%B7%E3%81%9B%E3%81%9A%E3%81%AB%E7%89%B9%E5%AE%9A%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E4%BF%9D%E8%AD%B7%E3%81%99%E3%82%8B.png)
複数のタブを持つ Excel 2016 ワークブックがあり、各タブは特定の営業担当者専用です。各営業担当者はフォームからログインし、その担当者のワークシートのみがロック解除されて編集できます。
彼の過去のデータを示すテーブルが存在します。テーブル内のほとんどのデータを更新または変更できます。特定のセルを更新し、ワークブックを保存して閉じます。ワークブックを閉じるプロセスで、シートが再度ロックされます。退社する前に、他の営業担当者のシートを見ることはできますが、ロックされているため編集できません。
ここで問題が起こります。各営業担当者シートの特定の列 (すべての担当者に共通) には、管理者が入力したデータが含まれています。このデータは営業担当者が確認できる必要がありますが、変更することはできません。
保護されていないワークシート上の既存のコンテンツの変更から特定の列を保護する方法について何かご意見はありますか。
答え1
VBA コードを見ないと、ロック/ロック解除がどのように行われるかを判断するのは困難です。locked
セルの属性を設定し、ワークシートの保護機能と保護解除機能を使用することで実行されると想定しています。
必要なのは、編集が許可されているすべてのセルを選択し、それらのカスタム範囲を作成することです。Excel は手元にありませんが、あると思いますData
>Define Custom Range
同じ場所から範囲を選択すると、Excel のセルが自動的に選択されます。
カスタム範囲を操作する代わりに、管理データが同じ列にない場合は、必要な列を選択できます。これにより、がactivesheet.range("K:L").select
可能になります。
VBA コードでは、ワークシートのロックを解除した後、この範囲を選択してlocked
これらのセルの設定を変更し、シートを再度保護する必要があります。終了時には逆の操作 (保護解除、すべてのロック設定、保護) を実行する必要があります。
適切な VBA コードを見つけるには、マクロに記録しながら手動でアクションを実行し、コードをコピーします。
答え2
LPChip は私を正しい道に導いてくれました。本当に感謝しています。私が使用したプロセスは次のとおりです。
- 営業担当者シートで、シート全体のロック属性をfalseに設定します。
- その営業担当者のテーブルで、テーブル全体のロック属性をtrueに設定します。
- LPChip の提案に従って、誰も編集できないようにするすべての列のカスタム範囲を作成しました。これを手動で実行し、範囲名 (LockedColumns) を割り当てました。
次にシートを保護します。これがこのシートと他のすべての営業担当者のシートの開始条件となります。
営業担当者がログオンし、正しい資格情報を使用して自分のシートに移動すると、舞台裏で VBA コードによって次の処理が実行されます。
- テーブルを選択し、ロック属性をfalseに設定します
- Range.("LockedColumns").selectを選択し、ロック属性をtrueに設定します。
- ワークシートを保護します。
これにより、承認された営業担当者は許可されたセルにデータを入力でき、変更を望まないセルのデータを変更できなくなります。営業担当者は他の営業タブを見ることはできますが、変更することはできません。営業担当者がログオフするかワークブックが閉じられると、閉じる前にキャプチャし、VBA コードで、1. テーブル全体を再度選択し、ロック属性を true に設定してワークシートを保護します。保存してから、次のユーザーのためにメニュー タブにリダイレクトします。
私は困惑していましたが、LP のおかげで目が覚めました。改めて感謝します。