2009-08-12 77 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

「你不是可以」 似乎是答案。 – 2009-08-13 14:03:00

回答

1

正如其他人所說的,將表單實例傳遞給類方法。不像其他人,我要補充:

  • 聲明參數作爲 MSForms.UserForm
  • 傳遞參數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

極好的例子。謝謝! – 2009-08-13 14:00:38

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 2009-08-12 18:57:24

+0

感謝您的示例! – 2009-08-13 14:08:01

相關問題