Передача переменной из модуля класса в пользовательскую форму

Привет, я пытаюсь разработать код, в котором несколько командных кнопок вызывают одну и ту же пользовательскую форму. Я создал модуль класса и заставил его работать так, чтобы все они вызывали пользовательскую форму, но мне нужно имя кнопки, переданное из модуля класса в инициализацию пользовательской формы. Я пробовал использовать свойство get и публичную функцию, но не могу заставить его работать. Переменная, которую я хочу передать, - это «ScreenShotCap» в виде строки Кто угодно, кто может помочь?

КОД МОДУЛЯ КЛАССА

      Option Explicit

Public ScreenShotCap As String
Public WithEvents CmdBtn As MSForms.CommandButton


Property Set obj(btns As MSForms.CommandButton)

'Defines the property of the object called
    Set CmdBtn = btns
    
End Property


Private Sub CmdBtn_Click()

'Gets the button caption
    ScreenShotCap = CmdBtn.Name

'Loads the userform
    ufScreenshot.Show
  
End Sub

КОД ПОЛЬЗОВАТЕЛЯ

      Private Sub UserForm_Initialize()

Dim btnNo As Variant
Dim imNo1, imNo2, imNo3 As Integer


'Gets the number of the button
    btnNo = Right(ScreenShotCap, 1)

'Sets the image number
    imNo1 = Int(btnNo + 2)
    imNo2 = Int(btnNo + 3)
    imNo3 = Int(btnNo + 4)
    
'Loads the image from MSForms into userform
    If ScreenShotCap = Worksheets("SW_TEST").OLEObjects("CommandButton1").Name Then
        Application.ScreenUpdating = False
            Me.Image1.Picture = Worksheets("SW_TEST").OLEObjects("Image1").Object.Picture
            Me.Image2.Picture = Worksheets("SW_TEST").OLEObjects("Image2").Object.Picture
            Me.Image3.Picture = Worksheets("SW_TEST").OLEObjects("Image3").Object.Picture
        Application.ScreenUpdating = True
    Else
        Application.ScreenUpdating = False
            Me.Image1.Picture = Worksheets("SW_TEST").OLEObjects("Image" & imNo1).Object.Picture
            Me.Image2.Picture = Worksheets("SW_TEST").OLEObjects("Image" & imNo2).Object.Picture
            Me.Image3.Picture = Worksheets("SW_TEST").OLEObjects("Image" & imNo3).Object.Picture
            
        'after any change vba has to be told to refresh the UserForm for the change to appear
            Me.Repaint
        Application.ScreenUpdating = True
    End If
  
End Sub

1 ответ

Решение

Переместите коды в UserForm_Initialize() в новую подпрограмму с параметром или просто переименуйте ее в:

      Public Sub LoadButtonImage(ScreenShotCap As String)

Тогда в вашем CmdBtn_Click() суб:

      Load ufScreenshot.Show
ufScreenshot.LoadButtonImage CmdBtn.Name 
uScreenshot.Show
Другие вопросы по тегам