2012-06-22 17 views
7

私は同じドキュメント内の他のVBAモジュールで公に利用できるようにしたいVBA関数を書いているとして、それを無効にする方法UDF(ユーザー定義関数)として使用します。私は公共のアクセス修飾子を使用する場合はVBA機能「VBAのみ」にし、しかし、私はそれが利用できるようにしたくない、UDF

は、しかし、私の関数は、ブック内のセルから呼び出すことができUDF-式として利用できるようにされます。私はこれを望んでいない。

アクセス修飾子や私は、この「VBAのみ」動作を取得することができ、他の方法はありますか?

種類が「魔法*値がそれに与えられている場合にのみ機能を実行することを可能にするパラメータを渡す

+1

あなたは、この関数が何をするかに詳細に入ることはできますか?これは、VBAクラスのみを使用し、ワークシートから初期化できないVBAクラスを使用する方法を示唆するものです。少なくとも期待される入力引数を出力値として表示します。 – ja72

+1

関数内application.callerのタイプ名を確認してください。これはテストしていませんが、関数がセルから呼び出されているかどうかを確認する必要があると思います。 –

答えて

0

について - 。あなたは何キーを知っている限りこれはエラー#NAME!を与えますは次のとおりです。

Function VBAOnly(key As Long) 

If key <> 12345 Then 
    VBAOnly = CVErr(xlErrName) 
    Exit Function 
End If 

VBAOnly = True 

End Function 
5

Excelで使用する場合、これが#VALUEエラーを返します

。 10
+3

は 'xlErrName'は:) – Aprillion

+0

おかげで良いだろうが、私はメカニズムがスプレッドシートに関数が見えないようにその存在だろう期待していました。このようにして関数がまだ表示されている場合(autoCompleteなど)、エラーが返されます。これは私が思いついた100%ではありません。 – Skifozoa

+0

+1ディックの提案に+1。 KFleschnerのコメントによる@Skifozoaは、これを私的な機能にします – brettdj

-1

機能だけが中に存在するモジュール内の実行を許可する必要がありPrivate修飾子を使用する。

+0

そうではありません。 Cursory testingはExcelからPrivate関数にアクセスできることを示しています。 –

1

あなたは関数が関数がPublicとして宣言とのいずれにも使用することができ、表示されたモジュールでOption Private Moduleを使用している場合あなたのVBAプロジェクト内の他のモジュールは、Excel自体を含む他のアプリケーションやプロジェクトからアクセスできなくなります。

関連する問題