2009-08-12 5 views
0

Angenommen, ich möchte zum Beispiel eine Methode, die eine ComboBox hinzufügt. Vielleicht versuche ich dieseWie Sie feststellen, welches Formularmodul Ihre Klasse aufgerufen hat

Public Sub AddComboBox() 
    Dim cb As MSForms.ComboBox 

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

Wie kann ich <Calling form module> bekommen?

+0

"Sie können nicht" scheint die Antwort zu sein. –

Antwort

1

Wie andere bereits gesagt haben, übergeben Sie die Instanz des Formulars an die Klassenmethode. Im Gegensatz zu anderen, werde ich hinzufügen:

  • übergeben Sie die Parameter ByVal

    • Deklarieren Sie das Argument AS MSForms.UserForm.
    • Wenn Sie von der UserForm selbst anrufen, verwenden Sie das Schlüsselwort Me im Aufruf.

    Er ist ein kurzes Beispiel:

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

    Ausgezeichnetes Beispiel. Vielen Dank! –

    1

    Ich denke, Sie schreiben dies in die falsche Richtung. Anstatt herauszufinden, wer die Methode aufgerufen hat, übergeben Sie einfach die <Calling Form Module> an AddComboBox() als ein Argument. Beispiel:

    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

    Ich arbeite in Access und kann den Code nicht zu 100% validieren. Aber LFSR ist sicherlich auf dem richtigen Weg - übergeben Sie das aufrufende Objekt als Argument der Funktion. – Smandoli

    +0

    Danke für das Beispiel! –

    Verwandte Themen