Shayはボランティア組織と協力しており、ボランティア専用のExcelワークブックを作成しています。彼らはそれをコピーしたり外部の個人と共有したりしたくないので、Shayは、特定のコンピューターでのみ機能し、他のコンピューターでは機能しないようにワークブックを保護する方法があるかどうか疑問に思います。

ブックのセキュリティを強化する方法はいくつかありますが、最善の方法を決定する前に考慮すべき考慮事項があります。

ほぼすべてのアプローチが、ユーザーにある程度不便をかけることになることを理解してください。また、採用するアプローチは、ユーザーが内部ネットワークのみを使用しているか、ネットワークに接続していないボランティアであるかによって異なります。

開始する簡単な方法は、ワークブックをパスワードで保護してから、ボランティアにパスワードを知らせることです。これの2つの欠点は、ボランティアに渡したパスワードは、ボランティアでなくなった後も、ボランティアがワークブックを渡す可能性のあるすべての人に対して引き続き機能することです。これは、ボランティアごとに個別のパスワードを設定した場合でも当てはまります。

他のアプローチは、ワークブックへのマクロの追加に依存します。

優れた方法は、マクロがブックを開いているコンピューターの名前を確認することです。これはそのようなマクロの例です:

Private Sub Workbook_Open()

Dim sComputerName As String     Dim sPossible As String     Dim sTemp As String

sPossible = "[NEWDELL][Computer1][Order Entry][Dan's System]"

sPossible = sPossible & "[Computer2][Computer3]"



sComputerName = Environ("computername")

sTemp = "[" & sComputerName & "]"



If InStr(sPossible, sTemp) Then         MsgBox "Welcome to the workbook."

Else         MsgBox "You are not authorized to open this workbook."

Workbooks(ActiveWorkbook.Name).Close SaveChanges:=False     End If End Sub

マクロの背後にある考え方は、sPossible文字列で、ブックを開くことが許可されている各コンピューターの名前を定義することです。あなたがする必要があるのは、マシン名が正確に正しく綴られていることを確認し、それらをsPossible文字列の角括弧で囲むことです。 Environ関数は実際のコンピューター名を返し、括弧内のsTemp変数に配置されます。次に、InStr関数を使用して、可能なマシンのリストにあるかどうかを確認します。

そうである場合は、メッセージボックスが表示されます。そうでない場合は、メッセージボックスが表示され、変更を保存せずにブックが閉じられます。

もう少し安全なものが必要な場合は、Environ関数を使用して「http://username-password.com/[username]」を返すこともできます

value。これにより、コンピューターで使用されているアカウントのユーザー名がわかります。

このマクロアプローチは比較的単純ですが、正しく機能するためには、コンピューター名(および/またはユーザー名)を知っている必要があります。また、ユーザーがプログラムの起動時にShiftキーを押したままにしてマクロをバイパスするのに十分なExcelの知識がないことも前提としています。ユーザーがそれだけ知っていると思われる場合は、次のような追加の手順を実行する必要があります。

  • ワークブックに1つのワークシートが表示されていることを確認してください。他のすべてのワークシートは、ユーザーが通常の手順で表示できないように「非常に非表示」にする必要があります。

  • ユーザーが許可されているとマクロが判断した場合は、表示されている1つのワークシートを非表示にし、「非常に非表示」のワークシートをすべて表示します。

  • ブックを閉じたら、プロセスを逆にしてすべてのワークシートを非表示にし(各ワークシートのVisibleプロパティをxlSheetVeryHiddenに設定)、単一のワークシートを再び表示します。

このアプローチを使用すると、ユーザーがマクロを無効にしても(起動時にShiftキーを押したまま)、ワークシートを表示するにはマクロが必要なため、ワークシートにアクセスできないようにします。

上記のアプローチのバリエーションを利用して、Environ関数に依存する代わりに、システムの特定の場所にある所定のファイルの存在をマクロでチェックすることができます。

もちろん、これは、適切なファイルを適切な場所に配置するために、事前にシステムを手に入れる方法が必要であることを意味します。

最後に、どのマクロベースのアプローチを選択する場合でも、ブックのVBAプロジェクトがパスワードで保護されていることを確認する必要があります。これにより、誰かがマクロコードを見て、保護で何が起こっているのかを理解することができなくなります。

ワークブックを保護しようとするときは、他にも常に覚えておく必要のあることがあります。適切な保護手段は、十分な知識と忍耐力で常に回避できます。ユーザーがそれほど技術的に洗練されていなければ、問題はないはずです。ただし、Excelとマクロについてよく知っている場合は、すべての賭けが無効になります。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(13666)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。