プライベートな vba スクリプトでさえ、ユーザーが呼び出すことができることを知っています。実際に「プライベート」にすると、その名前が非表示になるだけです。
ただし、その特定の VBA プロジェクト内にいる場合にのみ実行できるようにマクロを設定する方法はありますか? Excel や VBScript などからではありません。
コードをロックダウンしたい場合は、
以下のサンプル コードは、実行前にホスト ブックの VBA が保護されていないことを確認します。
これはあなたのニーズを満たしていますか?
Private Sub TestMe()
Dim objVB As Object
Set objVB = ThisWorkbook.VBProject
If objVB.Protection = 0 Then
Call TestSub
Else
MsgBox "Sorry sport - unauthorised", vbCritical
End If
End Sub
Private Sub TestSub()
MsgBox "Project unprotected - i've been run", vbOK
End Sub
正直なところ、それを回避する確実な方法はありません。特定のチェックを行うことはできますが、できることはそれだけです。
ユーザーが VBA コードにアクセスできないことが確実な場合は、brettdj が提案したことが最善の方法です。プロジェクトを保護します。マクロ名がわからない場合、Excel または Excel の外部からマクロを実行することはできません ;)
マクロを作成する基本的な目的は、マクロのPrivate
実行を妨げることではなく、ユーザーから見えないようにすることです。ほとんどの場合、Excel で非公開にする必要があるマクロは、組み込みの Worksheet または Workbook イベント、またはユーザーがアクセスする必要のない他のマクロによって参照されるマクロのみです。ユーザーは、必要に応じて、VBA の外部からアクセスすることもできます。
そうは言っても、マクロの実行を制限することはできます (ただし、STOP ではありません - マクロ セキュリティを無効にすることには言及していません)。認証フラグを渡します。「承認」を受け取った場合にのみ実行されます。
例えば
Option Explicit
Private Sub Sample(Auth As Boolean)
If Auth = True Then
'~~> Your macro code goes here
End If
End Sub
このマクロを VBA から呼び出す場合は、次のように呼び出す必要があります。
Sample True
また
Call Sample(True)
これにより、上記のマクロは、許可した場合にのみ実行されます。
この方法により、ユーザーは VBS からこれを実行できなくなりますか?
番号。それはしません。ただし、ユーザーが「承認」を指定または付与するまで実行されません。
HTH