5

プライベートな vba スクリプトでさえ、ユーザーが呼び出すことができることを知っています。実際に「プライベート」にすると、その名前が非表示になるだけです。

ただし、その特定の VBA プロジェクト内にいる場合にのみ実行できるようにマクロを設定する方法はありますか? Excel や VBScript などからではありません。

4

2 に答える 2

3

コードをロックダウンしたい場合は、

  • マクロ名が公開されないようにコードを非公開にする
  • 保護をロックし、コードを実行する前にプロジェクトが実際にロック解除されていることをテストします

以下のサンプル コードは、実行前にホスト ブックの 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

ここに画像の説明を入力

于 2012-06-02T10:40:14.480 に答える
1

正直なところ、それを回避する確実な方法はありません。特定のチェックを行うことはできますが、できることはそれだけです。

ユーザーが 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

于 2012-06-02T13:45:38.787 に答える