6

さまざまなアドインまたは VBA プロジェクトで参照および使用したい "コア" 関数とサブを持つアドインがあります。コードの再利用と単一更新の原則のため。

たとえば、基準に基づいてコレクション メンバーをフィルタリングし、サブコレクションを返す関数。コード自体はここでは問題になりません。

Public Function listNamesContaining(ByVal NamesInput As Names, ByVal ContainsCriteria As String) As Collection
    Dim NameMember As Name

    Set listNamesContaining = New Collection
    For Each NameMember In NamesInput
        If InStr(1, NameMember.Name, ContainsCriteria, vbTextCompare) Then
            listNamesContaining.Add NameMember
        End If
    Next
End Function

コレクションオブジェクトを返すため、この関数をセル挿入関数に表示したくありませんが、 VBA コード内 の複数の VBA プロジェクトで再利用したいと考えています。

現在の問題の写真、オブジェクト関数がセル挿入式に表示されています:

ここに画像の説明を入力

リサーチ

Option Private Statementを使用して、単一のプロジェクト メソッドのソリューションSO1SO2を見つけました。ただし、他のアプリケーションまたはプロジェクトの制限 により、これでは問題は解決しません。

モジュールに Option Private Module が含まれている場合、モジュール レベルで宣言された変数、オブジェクト、ユーザー定義型などのパブリック パーツは、モジュールを含むプロジェクト内で引き続き使用できますが、他のアプリケーションまたはプロジェクトでは使用できません

次に、MRExcel フォーラムで質問を見つけました - Hiding VBA functions only。Tom Schreiner は、カスタム クラスを使用して Classes 内に関数を実装できることを提案します。そうすれば、セル挿入機能では利用できませんが、他のプロジェクトでは利用できます。

質問

  1. プロジェクト全体でコア VBA 関数 (UDF) を再利用する方法はありますが、セル挿入関数には表示されません。
  2. カスタムクラスのソリューションは 1 つだけですか?
  3. (意見ベース) Excel アドイン (.xlam) を介して複数のプロジェクトでコア メソッドを共有するという私の最初の哲学は合理的なものですか?
4

2 に答える 2