2017-07-21 8 views
1

レポートを生成するために使用されるユーザーフォームがあります。 ユーザーフォームを誰かと共有する必要がある場合は、Excelシート全体を共有します。 既存のユーザーフォームをAddin.soとすることは可能ですか?一度インストールすると、そのExcelシートだけでなく、開いているExcelシートからアクセスできるようになります。Excelformシートのユーザーフォーム - 追加することができます

ありがとうございます。

答えて

-1

はい、あなたはuserformを共有できます。

ユーザーフォームを右クリックし、エクスポートします。

また、フォームをインポートすることで追加できます。

おかげ

2

はい、できます、しかし、あなたは準備のビットを行う必要があります。

アドインのワークブック名​​と異なるプロジェクト名があることを確認してください。たとえば、ユーザーのワークブックのプロジェクトがVBAProjectと指定されている場合、アドインのプロジェクト名はMyAddinのようにする必要があります。

だから、あなたが持っている:

  • Book1.xlsm(プロジェクト名= VBAProject)、および
  • MyAddin.xlam(プロジェクト名MyAddin

ステップ:BOOK1以内

  1. を/ VBAProject、参照を追加する(Tools..References)MyAddin。 MyAddinの内
  2. 、早期の結合のために(MyUserForm
  3. ユーザーフォームを作成し、我々は、フォームのインスタンス化PublicNotCreatableを作成する必要がありますが、VBE UIは、フォームのそのプロパティを提供していませんので、我々は、フォームをエクスポートする必要がありますMyUserForm.frmファイルを編集し、Attribute VB_Exposed属性をTrue(デフォルトではFalse)に変更します。それはMyUserForm.frmという名前のエクスポートされたファイルを編集し、次のように既存のラインを調整し、テキストエディタで、次のとおりです。その後、

    Attribute VB_Exposed = True 
    
  4. 保存したファイルの変更、(MyAddinの中で、元のフォームを削除)してMyUserForm.frmをインポートプロジェクトに新しいユーザーフォームにはPublicNotCreatableインスタンスが作成されます。

  5. は、フォームの新しいインスタンスを作成し、それを呼び出す任意のVBAにそれを返すよう、MyAddinに公共のファクトリ関数を追加します。Book1.xlsm

    Public Function GetUserForm() As MyUserForm 
        Set GetUserForm = New MyUserForm 
    End Function 
    
  6. を、あなたは今のようなコードを書くことができます次のとおり、完全早期バインディングのサポートと一緒に。

    Public Sub test() 
    
        Dim frm As MyAddin.MyUserForm 
        Set frm = MyAddin.GetUserForm() 
        frm.Show   
    End Sub 
    
関連する問題