2009-08-12 4 views
0

Supposons, par exemple, que je souhaite une méthode qui ajoute un contrôle ComboBox. Peut-être que j'essaie celaComment savoir quel module de formulaire a appelé votre classe

Public Sub AddComboBox() 
    Dim cb As MSForms.ComboBox 

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

Comment puis-je obtenir <Calling form module>?

+0

"Vous ne pouvez pas" semble être la réponse. –

Répondre

1

Comme d'autres l'ont dit, passez l'instance de la méthode form à class. Contrairement à d'autres, je vais ajouter:

  • Déclarez l'argument AS MSForms.UserForm
  • passer le paramètre ByVal.
  • Si vous appelez à partir de l'objet UserForm lui-même, utilisez le mot-clé dans l'appel.

Il est un bref exemple:

' <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

Excellent exemple. Merci! –

1

Je pense que vous écrivez ceci dans le mauvais sens. Au lieu d'essayer de déterminer qui a appelé la méthode, il suffit de passer le <Calling Form Module> à AddComboBox() comme argument. Comme ceci:

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

Je travaille dans Access et je ne peux pas valider à 100% le code. Mais LFSR est certainement sur la bonne voie - passer l'objet appelant en tant qu'argument de la fonction. – Smandoli

+0

Merci pour l'exemple! –

Questions connexes