レポートを生成するために使用されるユーザーフォームがあります。 ユーザーフォームを誰かと共有する必要がある場合は、Excelシート全体を共有します。 既存のユーザーフォームをAddin.soとすることは可能ですか?一度インストールすると、そのExcelシートだけでなく、開いているExcelシートからアクセスできるようになります。Excelformシートのユーザーフォーム - 追加することができます
ありがとうございます。
レポートを生成するために使用されるユーザーフォームがあります。 ユーザーフォームを誰かと共有する必要がある場合は、Excelシート全体を共有します。 既存のユーザーフォームをAddin.soとすることは可能ですか?一度インストールすると、そのExcelシートだけでなく、開いているExcelシートからアクセスできるようになります。Excelformシートのユーザーフォーム - 追加することができます
ありがとうございます。
はい、あなたはuserformを共有できます。
ユーザーフォームを右クリックし、エクスポートします。
また、フォームをインポートすることで追加できます。
おかげ
はい、できます、しかし、あなたは準備のビットを行う必要があります。
アドインのワークブック名と異なるプロジェクト名があることを確認してください。たとえば、ユーザーのワークブックのプロジェクトがVBAProject
と指定されている場合、アドインのプロジェクト名はMyAddin
のようにする必要があります。
だから、あなたが持っている:
Book1.xlsm
(プロジェクト名= VBAProject
)、およびMyAddin.xlam
(プロジェクト名MyAddin
)ステップ:BOOK1以内
MyAddin
。 MyAddinの内MyUserForm
)ユーザーフォームを作成し、我々は、フォームのインスタンス化PublicNotCreatable
を作成する必要がありますが、VBE UIは、フォームのそのプロパティを提供していませんので、我々は、フォームをエクスポートする必要がありますMyUserForm.frm
ファイルを編集し、Attribute VB_Exposed
属性をTrue
(デフォルトではFalse)に変更します。それはMyUserForm.frm
という名前のエクスポートされたファイルを編集し、次のように既存のラインを調整し、テキストエディタで、次のとおりです。その後、
Attribute VB_Exposed = True
保存したファイルの変更、(MyAddinの中で、元のフォームを削除)してMyUserForm.frmをインポートプロジェクトに新しいユーザーフォームにはPublicNotCreatable
インスタンスが作成されます。
は、フォームの新しいインスタンスを作成し、それを呼び出す任意のVBAにそれを返すよう、MyAddin
に公共のファクトリ関数を追加します。Book1.xlsm
で
Public Function GetUserForm() As MyUserForm
Set GetUserForm = New MyUserForm
End Function
を、あなたは今のようなコードを書くことができます次のとおり、完全早期バインディングのサポートと一緒に。
Public Sub test()
Dim frm As MyAddin.MyUserForm
Set frm = MyAddin.GetUserForm()
frm.Show
End Sub