さまざまなアドインまたは 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を使用して、単一のプロジェクト メソッドのソリューションSO1、SO2を見つけました。ただし、他のアプリケーションまたはプロジェクトの制限
により、これでは問題は解決しません。
モジュールに Option Private Module が含まれている場合、モジュール レベルで宣言された変数、オブジェクト、ユーザー定義型などのパブリック パーツは、モジュールを含むプロジェクト内で引き続き使用できますが、他のアプリケーションまたはプロジェクトでは使用できません。
次に、MRExcel フォーラムで質問を見つけました - Hiding VBA functions only。Tom Schreiner は、カスタム クラスを使用して Classes 内に関数を実装できることを提案しています。そうすれば、セル挿入機能では利用できませんが、他のプロジェクトでは利用できます。
質問
- プロジェクト全体でコア VBA 関数 (UDF) を再利用する方法はありますが、セル挿入関数には表示されません。
- カスタムクラスのソリューションは 1 つだけですか?
- (意見ベース) Excel アドイン (.xlam) を介して複数のプロジェクトでコア メソッドを共有するという私の最初の哲学は合理的なものですか?