Передача переменной из модуля класса в пользовательскую форму
Привет, я пытаюсь разработать код, в котором несколько командных кнопок вызывают одну и ту же пользовательскую форму. Я создал модуль класса и заставил его работать так, чтобы все они вызывали пользовательскую форму, но мне нужно имя кнопки, переданное из модуля класса в инициализацию пользовательской формы. Я пробовал использовать свойство 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