2009-08-12 5 views
0

例えば、私はComboBoxを追加するメソッドが必要だとします。多分私はこれを試してみてくださいあなたのクラスを呼び出したフォームモジュールを特定する方法

Public Sub AddComboBox() 
    Dim cb As MSForms.ComboBox 

    Set cb = <Calling form module>.Controls.Add("Forms.ComboBox.1") 
End Sub 

<Calling form module>はどうすれば入手できますか?

+0

"あなたがすることはできません" の答えのように見えます。 –

答えて

1

他の人が言ったように、フォームのインスタンスをクラスメソッドに渡します。他の人とは違って、私は追加するつもりです:

  • は MSForms.UserForm
  • AS引数を宣言し、パラメータのByValを渡します。
  • ユーザーフォームからの呼び出しでは、 コールでMeキーワードを使用します。

彼は簡単な例です:

' <Module1.bas> 
Option Explicit 
Sub Main() 

    UserForm1.Show vbModeless 
    UserForm2.Show vbModeless 

End Sub 
' </Module1.bas> 

' <UserForm1.frm> 
Option Explicit 

Private Sub UserForm_Activate() 
    Dim c As Class1 
    Set c = New Class1 
    c.AddComboBox Me 
End Sub 
' </UserForm1.frm> 

' <UserForm2.frm> 
Option Explicit 

Private Sub UserForm_Activate() 
    Dim c As Class1 
    Set c = New Class1 
    c.AddComboBox Me 
End Sub 
' </UserForm2.frm> 

' <Class1.cls> 
Option Explicit 

Public Sub AddComboBox(ByVal MSForms_UserForm As MSForms.UserForm) 
    Dim cb As MSForms.ComboBox  
    Set cb = MSForms_UserForm.Controls.Add("Forms.ComboBox.1") 
End Sub 
' </Class1.cls> 
+0

優れた例。ありがとう! –

1

あなたはこれを間違った方法で書いていると思います。誰がメソッドを呼び出したかを調べるのではなく、<Calling Form Module>AddComboBox()に引数として渡すだけです。このように:

Public Sub CallToAddComboBox() 
    AddComboBox(<Calling form module>) 
End Sub 

Public Sub AddComboBox(CallingFormModule as <Module Object Type>) 
    Dim cb As MSForms.ComboBox 

    Set cb = CallingFormModule.Controls.Add("Forms.ComboBox.1") 
End Sub 
+0

私はAccessで働いており、私はそのコードを100%検証することができません。しかし、LFSRは確かに適切な方向にあります。呼び出し元のオブジェクトを関数の引数として渡します。 – Smandoli

+0

例をありがとう! –