あなたが説明した方法でのパスワード保護は、たとえそれが実行可能であったとしても、不必要に面倒だと思います.
彼は、1 つのパスワードでサイトからダウンロードできるすべてのコピーのロックが解除されないように、Excel スプレッドシートをパスワードで保護するように依頼しました。
Excel だけを使用してこれがどのように可能になるか想像できません。アドインでこれを実行できるかもしれませんが、ファイル レベルでは、少なくとも簡単には実行できないと思います。
誰がスプレッドシートを使用しているかを確認することはできません。
これは本当に重要なビットのようです。誰がファイルを使用しているかを判断するためのゲートキーピング方法としてのみ、パスワードをセキュリティ対策として使用していません。これは他の方法で自動化できますが、最も簡単なのは特定のEnvironment
変数を使用することです。
MsgBox Environ("username")
現在のユーザー名を含むメッセージ ボックスが表示されます。
文字列変数に割り当てることがEnviron("username")
できます。たとえば、Outlook を自動化して、「John Doe がファイルを開いた」などのメールを送信することができます。毎回電子メールを受信することを避けたい場合は、Excel ファイルの名前付き範囲変数を微調整して、マクロが電子メールを 1 回だけ送信するようにすることができます。
または、電子メールを送信する代わりに、ログ/txt ファイルを共有ネットワークの場所に書き込むことができる場合があります (もちろん、ユーザーがネットワークに接続していると仮定します)。
アップデート
これは、Web 上の場所から取ったコードの例です。ユーザーから電子メールを送信します。sendTo
メールアドレスを受信者として使用するには、行を変更する必要があります。
これを Workbook のコード モジュールに入れると、このファイルを開くたびに電子メールが送信されます。
Option Explicit
Private Sub Workbook_Open()
' This example uses late-binding instead of requiring an add'l reference to the
' MS Outlook 14.0 Object Library.
Dim oApp As Object 'Outlook.Application 'Object
Dim ns As Object 'Namespace
Dim fldr As Object 'MAPIFolder
Dim mItem As Object 'Outlook.MailItem
Dim sendTo As Object 'Outlook.Recipient
Dim bOutlookFound As Boolean
On Error Resume Next
Set oApp = GetObject(, "Outlook.Application")
bOutlookFound = Err.Number = 0
On Error GoTo 0
If Not bOutlookFound Then Set oApp = CreateObject("Outlook.Application") 'New Outlook.Application
'# Set the namespace and folder so you can add recipients
Set ns = oApp.GetNamespace("MAPI")
Set fldr = ns.GetDefaultFolder(6) 'olFolderInbox
'# create an outlook MailItem:
Set mItem = oApp.CreateItem(0) 'olMailItem
'# assign a recipient
Set sendTo = mItem.Recipients.Add("YourName@Company.Com")
sendTo.Type = 1 'To olTo
'# assign another recipient
Set sendTo = mItem.Recipients.Add("YourManager@Company.Com")
sendTo.Type = 1
'# Validate the recipients (not necessary if you qualify valid email addresses:
For Each sendTo In mItem.Recipients
sendTo.Resolve
Next
mItem.Subject = "A user has opened the Excel file"
mItem.Body = "This is an automated message to inform you that " & _
Environ("username") & " has downloaded and is using the file."
mItem.Save
mItem.Send
'If outlook was not already open, then quit
If Not bOutlookFound Then oApp.Quit
Set oApp = Nothing
End Sub