8

同じドキュメント内の他のVBAモジュールで公開したいVBA関数を作成していますが、UDF(ユーザー定義関数)として使用したくありません。

ただし、パブリックアクセス修飾子を使用すると、ワークブック内のセルから呼び出すことができるUDF数式として関数を使用することもできます。これは欲しくない。

この「VBAのみ」の動作を取得するのに役立つアクセス修飾子またはその他の方法はありますか?

敬具

4

6 に答える 6

5

これを Excel で使用すると、#VALUE エラーが返されます。

Function VBAOnly() As Variant

    If TypeName(Application.Caller) <> "Range" Then
        VBAOnly = 1 'or some other return value
    Else
        VBAOnly = CVErr(xlErrValue)
    End If

End Function
于 2012-06-22T16:51:15.957 に答える
1

Functionaを書く代わりに、aを書き、引数Subを介して戻り値を設定します。ByRefこのようにして、関数は Excel から見えなくなり (Alt F8、または [開発] タブ > [マクロ] を除く)、Excel のインテリセンスには表示されません。

それ以外の

Function Add(Num1 As Double, Num2 As Double)
    Add = Num1 + Num2
End Function

使用する

Sub AddInvisible(ByRef Result As Double, Num1 As Double, Num2 As Double)
    Result = Num1 + Num2
End Sub

ノート

  1. これByRefは厳密には必要ではありませんが (VBA では引数はデフォルトで参照されるため) Result、戻り値を運ぶ便利なリマインダーとして機能します。
  2. コードに必要な変更を加える必要があります。次に例を示します。

    z = Add(x,y)

になるだろう

AddInvisible z,x,y

以下に示すように:

Sub DemoAddInvisible()

    Dim Num1 As Double
    Dim Num2 As Double
    Dim Result As Double 'Result initialises to 0

    Num1 = 1
    Num2 = 2
    AddInvisible Result, Num1, Num2

    MsgBox Result ' See that Result has become 3

End Sub

これらすべての欠点は、新しいコードがやや理解しにくいことです。

于 2018-06-29T11:27:27.193 に答える
-1

修飾子を使用するPrivateと、関数が存在するモジュールでのみ実行を許可する必要があります。

于 2012-06-22T20:12:39.060 に答える
-1

"magic* 値が指定された場合にのみ関数の実行を許可するパラメーターを渡します。

例 -キー#NAME!何であるかがわからない場合、次のエラーが発生します。

Function VBAOnly(key As Long)

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

VBAOnly = True

End Function
于 2012-06-22T13:30:27.650 に答える