Home > Net >  Passing a variable from class module to userform
Passing a variable from class module to userform

Time:09-28

Hej, I am trying to design a code, where a number of commandbuttons call the same userform. I have created the class module and got it to work so that they all call the userform, but I need the name of the button passed on from the class module into the userform initialize. I have tried it with property get and a public function, but can't get it to work. The variable I want to pass is the "ScreenShotCap" as string Anyone, who can help?

CLASS MODULE CODE

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

USERFORM CODE

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

CodePudding user response:

Move the codes in UserForm_Initialize() to a new sub with a parameter or just rename it to:

Public Sub LoadButtonImage(ScreenShotCap As String)

Then in your CmdBtn_Click() sub:

Load ufScreenshot.Show
ufScreenshot.LoadButtonImage CmdBtn.Name 
uScreenshot.Show
  • Related