2

Excel の標準コード モジュールにパブリック関数を追加すると、関数の挿入ウィザードのキャッチオール カテゴリ「ユーザー定義」に表示されます。

次の方法はありますか?

  1. 関数を公開したままにし (他のモジュールから呼び出されるようにする)、Excel 関数ウィザードからは非表示にしますか?
  2. 関数を組み込みのカテゴリ (例: "Financial"、"Statistical"、"Logical") に表示しますか?
  3. 独自のカテゴリ (「ナンセンス」など) を作成し、そこに機能を表示しますか?

上記のケースのいずれかを機能させることができればよいのですが、それぞれが可能かどうか知りたいです。

注: コミュニティがより適切であると判断した場合は、喜んで 3 つの質問に分けます。3つの質問の中でわずかな違いしかない単一の答えがあるかもしれないと私は考えています.

4

4 に答える 4

4

[...]関数を公開したままにし(他のモジュールから呼び出される可能性があるため)、Excel関数ウィザードからは非表示にする方法はありますか?

モジュールの一番上に置きOption Private Moduleます。終わり。

http://msdn.microsoft.com/en-us/library/aa266185(v=vs.60).aspx

于 2014-11-22T05:35:15.867 に答える
2

VBA Date functions に関する質問の脚注でこれに答えました。VB 'Attribute' ステートメントを使用して関数の説明と関数ウィザードのカテゴリ IDを作成する方法について、私がそこに書いたものをそのままコピー アンド ペーストします。

Excel 2003 をまだ使用している方へのヒント:

あなた (またはあなたのユーザー) がワークシートから IsDateEx() を呼び出す場合は、これらの 2 行を関数ヘッダーのすぐ下に配置し、エクスポートされた .bas ファイルでテキスト エディターを使用してファイルを再インポートします。これは、VB 属性が役立つためです。 、ただし、Excel の VBA IDE のコード エディターからはアクセスできません。

Attribute IsDateEx.VB_Description = "Returns TRUE if TestDate is a date, and is within ± 20 years of the system date.\r\nChange the defaulte default ± 20 years boundaries by setting values for LimitPastDays and LimitFutureDays\r\nIf you are checking an array of dates, ALL the values will be tested: set FirstColumnOnly TRUE to check the leftmost column only."

これですべて 1 行です。ブラウザによって挿入される改行に注意してください。...そして、ISNUMBER()、ISERR()、ISTEXT() などと並んで、isDateEX を「情報」カテゴリの関数ウィザードに入れるこの行:

Attribute IsDateEx.VB_ProcData.VB_Invoke_Func = "w\n9"

日付と時刻の関数の下に表示したい場合は、「w\n2」を使用してください。独自のコードからの「使用済み定義」関数の泥沼でそれを失うことはありません。人々によって開発されたすべてのサードパーティのアドイン時折のユーザーを助けるのに十分なことをしていない人。

これが Office 2010 でも機能するかどうかはわかりません。

...そして、それが私が提案できるすべてです。関数ウィザードのカテゴリと関連する関数 (およびパラメーター!) 記述子は、VBA 開発者にとって実際にはアクセスできません。これらの一部は、IDE で VB.Attribute ステートメントにアクセスできる昔ながらの VB コーダーが利用できます。テキストファイルを少し操作するだけで、コードに組み込むことができます。

于 2012-07-06T16:58:05.407 に答える
2

Application.MacroOptionsあなたが求めているコマンドです

この例では、 TestMacroというユーザー定義マクロをMy Custom Categoryという名前のカスタム カテゴリに追加します。

Function TestMacro()
    MsgBox ActiveWorkbook.Name
End Function

Sub AddUDFToCustomCategory()
    Application.MacroOptions Macro:="TestMacro", Category:="My Custom Category"
End Sub
于 2012-06-21T19:42:04.260 に答える
2

パブリック関数は、"通常の" *.bas モジュールに存在する場合、Excel の数式バーにのみ表示されます。クラスに属するパブリック関数は、数式バーには表示されません。これを静的クラスをシミュレートできるという事実と一緒に追加すると、関数を効果的に非表示にすることができます。

クラス モジュールを作成してエクスポートするとAttribute VB_PredeclaredId = False、ヘッダーに表示されます。これを true に設定すると、クラスのデフォルトのグローバル インスタンスが作成されます。このインスタンスは、より現代的な言語の静的クラスのように使用できます。

たとえば、という名前の新しいクラス モジュールを作成し、Mathこの関数を追加します。

Public Function Add(a As Integer, b As Integer) As Long
    Add = a + b
End Function

ファイルをエクスポートして削除し、メモ帳で開きます。事前宣言された Id を true に変更します。

VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "Math"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

ファイルを保存してプロジェクトにインポートします。

現在、通常のモジュールでは、修飾された呼び出しで関数を呼び出すことができます。他のクラス メソッドと同様です。これで、作業するクラスのデフォルトのインスタンスができました。Neworをいじる必要はありませんSet。ただ機能します。

Sub Test()
    Debug.Print Math.Add(1,2)
End Test
于 2014-11-20T21:56:14.353 に答える