Как определить, какой модуль формы вызвал ваш класс

#excel #vba

#excel #vba

Вопрос:

Предположим, например, что мне нужен метод, который добавляет поле со списком. Может быть, я попробую это

 Public Sub AddComboBox()
    Dim cb As MSForms.ComboBox

    Set cb = <Callin& form module&&t;.Controls.Add("Forms.ComboBox.1")
End Sub
  

Как я могу получить <Callin& form module&&t; ?

Комментарии:

1. Похоже, что ответом является «Вы не можете».

Ответ №1:

Как говорили другие, передайте экземпляр формы методу класса. В отличие от других, я собираюсь добавить:

  • Объявите аргумент КАК MSForms.Пользовательская форма
  • Передайте параметр ByVal.
  • При вызове из самой пользовательской формы используйте Me ключевое слово в вызове.

Он является кратким примером:

 ' <Module1.bas&&t;
Option Explicit
Sub Main()

  UserForm1.Show vbModeless
  UserForm2.Show vbModeless

End Sub
' </Module1.bas&&t;

' <UserForm1.frm&&t;
Option Explicit

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

' <UserForm2.frm&&t;
Option Explicit

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

' <Class1.cls&&t;
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&&t;
  

Ответ №2:

Я думаю, вы пишете это неправильно. Вместо того, чтобы пытаться определить, кто вызвал метод, просто передайте <Callin& Form Module&&t; to AddComboBox() в качестве аргумента. Вот так:

 Public Sub CallToAddComboBox()
    AddComboBox(<Callin& form module&&t;)
End Sub

Public Sub AddComboBox(Callin&FormModule as <Module Object Type&&t;)
    Dim cb As MSForms.ComboBox

    Set cb = Callin&FormModule.Controls.Add("Forms.ComboBox.1")
End Sub
  

Комментарии:

1. Я работаю в Access и не могу на 100% проверить код. Но LFSR, безусловно, на правильном пути — передайте вызывающий объект в качестве аргумента функции.