ユーザーによる個々のワークシートの保護(Microsoft Excel)
Excelでは、_ExcelTips ._の他の問題で学習したように、個々のワークシートを保護できます([ツール]、[保護]、[シートの保護]の順に選択します)。このアプローチを使用すると、さまざまなhttp:// username-passwordを使用して、個々のワークシートを個別に保護できます。 .com / 14 / what-makes-a-good-password [passwords]。
つまり、1人のユーザーが1つのパスワードを使用して1つのワークシートに変更を加え、別のユーザーが別のパスワードを使用して他のワークシートに変更を加えることができます。
ただし、ワークシートへのアクセスを完全に制限したい場合はどうなりますか?
権限のないユーザーに他のワークシートを見せたくない場合はどうなりますか?この必要性に対応するのは少し難しいですが、それは可能です。基本的なアプローチは次のとおりです。
。 3つのワークシートを持つワークブックを設定します。1つは常に開いており、1つはユーザー1用、3つ目はユーザー2用です。
。ユーザー1とユーザー2のワークシートを非表示にします。
。ブックを開くたびに表示されるフォームを作成し、ユーザー名とパスワードを要求します。
。ユーザー名とパスワードに基づいて適切なワークシートのロックを解除して表示するマクロコードを作成します。
。ブック全体を保護します([ツール]、[保護]、[ブックの保護])。
手順1、2、および5は簡単に実行でき、_ExcelTips_の他の問題で取り上げられています。ただし、このアプローチの要点はステップ3と4です。次のステップに従ってユーザーフォームを作成できます。
。 Alt + F11を押して、VBAエディターを表示します。
。 VBAエディターで、[挿入]メニューから[ユーザーフォーム]を選択します。新しい空白のユーザーフォームが、フォームツールボックスとともに表示されます。
。フォームツールボックスのコントロールを使用して、ユーザーがユーザー名を入力するTextBoxコントロールを追加します。
。名前がtxtUserになるように、TextBoxコントロールのプロパティを変更します。
。フォームツールボックスのコントロールを使用して、ユーザーがパスワードを入力するTextBoxコントロールを追加します。
。名前がtxtPassになるように、TextBoxコントロールのプロパティを変更します。
。 TextBoxコントロールのすぐ下に、CommandButtonコントロールを追加します。
。 CommandButtonコントロールのプロパティを変更して、名前がbtnOK、キャプションがOKになるようにします。
ユーザーフォームを作成すると、マクロコードを配置したばかりのコントロールに関連付ける準備が整います。ユーザーフォームが選択されていることを確認し、F7キーを押してフォームのコードウィンドウを表示します。ウィンドウには、自動生成されたコードが1行か2行含まれている場合があります。これを次のコードに置き換えます:
Dim bOK2Use As Boolean Private Sub btnOK_Click() Dim bError As Boolean Dim sSName As String Dim p As DocumentProperty Dim bSetIt As Boolean bOK2Use = False bError = True If Len(txtUser.Text) > 0 And Len(txtPass.Text) > 0 Then bError = False Select Case txtUser.Text Case "user1" sSName = "u1sheet" If txtPass.Text <> "u1pass" Then bError = True Case "user2" sSName = "u2sheet" If txtPass.Text <> "u2pass" Then bError = True Case Else bError = True End Select End If If bError Then MsgBox "Invalid User Name or Password" Else 'Set document property bSetIt = False For Each p In ActiveWorkbook.CustomDocumentProperties If p.Name = "auth" Then p.Value = sSName bSetIt = True Exit For End If Next p If Not bSetIt Then ActiveWorkbook.CustomDocumentProperties.Add _ Name:="auth", LinkToContent:=False, _ Type:=msoPropertyTypeString, Value:=sSName End If Sheets(sSName).Visible = True Sheets(sSName).Unprotect (txtPass.Text) Sheets(sSName).Activate bOK2Use = True Unload UserForm1 End If End Sub Private Sub UserForm_Terminate() If Not bOK2Use Then ActiveWorkbook.Close (False) End If End Sub
上記のコードはいくつかのことを行います。 2つの手順があることに注意してください。ユーザーがフォームの[OK]ボタンをクリックしたときに実行される長い手順と、フォームが終了したときに実行される手順です。ユーザーが[OK]ボタンをクリックすると、プロシージャはユーザー名とパスワードの組み合わせが正しいことを確認します。そうでない場合は、ユーザーに通知されます。そうである場合、許可されたシート名がドキュメント変数に格納され、適切なシートが表示され、保護されません。
受け入れ可能なユーザー名、シート名、およびパスワードを変更する場合は、このマクロコードの上部にある[ケースの選択]構造に必要な変更を加えることで変更できます。
このコードの2番目のマクロ(UserForm_Terminate)は、ユーザーがユーザー名とパスワードを入力せずにフォームを単純に閉じようとした場合に機能します。この場合、承認プロセスが以前に完了していなかった場合、ワークブックは単に閉じられます。
上記のコードに加えて、次のマクロをブック自体に追加する必要もあります。これらは、ブックを開いたときにユーザーフォームを開き、ブックを閉じたときにワークシートを保護します。
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim w As Worksheet Dim bSaveIt As Boolean bSaveIt = False For Each w In Worksheets If w.Visible Then Select Case w.Name Case "u1sheet" w.Protect ("u1pass") w.Visible = False bSaveIt = True Case "u2sheet" w.Protect ("u2pass") w.Visible = False bSaveIt = True End Select End If Next w If bSaveIt Then ActiveWorkbook.CustomDocumentProperties("auth").Delete ActiveWorkbook.Save End If End Sub Private Sub Workbook_Open() UserForm1.Show End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) If Sh.Name <> "Main" Then If Sh.Name <> ActiveWorkbook.CustomDocumentProperties("auth").Value Then Sh.Visible = False MsgBox "You don't have authorization to view that sheet!" End If End If End Sub
ユーザーがワークブックを閉じることを選択すると(作業は完了します)、該当するワークシートは再び保護され、非表示になります。 (ユーザーシートの名前とパスワードを変更する場合は、ここの[ケースの選択]構造でも変更する必要があります。)次に、マクロは適切なドキュメントプロパティを削除し、ブックを保存します。
ここでのもう1つの興味深いマクロは、Workbook_SheetActivateプロシージャです。
これは、1人のユーザーがフォーマット|を使用しようとした場合に含まれます。シート|再表示して、別のユーザーのワークシートを再表示します。この場合、ユーザーの承認済みシート名(ユーザーが最初に承認されたときにドキュメント変数に格納されている)が、表示されているシートと比較されます。一致しない場合、ユーザーはワークシートを表示できません。また、この手順は「メイン」と呼ばれるワークシートを参照していることに注意してください。このワークシートは、このヒントの冒頭で述べた3番目のワークシートです。
このワークシートは、ブックを開いたときに最初に表示されるワークシートでもあります。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]
。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(1952)は、Microsoft Excel 97、2000、2002、および2003に適用されます。