Userform - Return Control Clicked

M

MDubbelboer

I have a userform that is using a multipage with 13-14 pages and on
each page there will be 5-6 controls (labels) that can be selected.

Instead of writing an event procedure for 13-14x5-6 labels is it
possible to write a generic procedure that will return which label was
selected (double clicked)

To clarify, if on multipage 1 I clicked label 3 I would like the Name
of Label3 to be used in launching a new userform with Label3.name used
as one of the variables on the new userform.
If I click on multipage 12 label 63 i would like label63.name to be
returned.

My original thought was to look at MSForms.Controls but I'm having a
hard time. I was trying to use userform_dblclick or multipage_dblclick
however double clicking on a label (the behaviour i'm trying to
capture) does not get captured.

Any Ideas? Thanks in advance,
mark
 
J

JLGWhiz

your statement "I was trying to use userform_dblclick or multipage_dblclick
however double clicking on a label (the behaviour i'm trying to
capture) does not get captured." is confusing. The label does have a
double click event if you right click the Label, then View Code you will see
the DblClick in the Declarations drop down pane. You would have to write the
event code to make it perform as you have described your requirement, just
like any other event code.
 
J

Jim Thomlinson

The object that raises the event is the label and that event is not also
raised in the parent object being either the form or multipage. To that end
you need to write event code for each label. That code however could just be
a call to one procedure designed to take the control as it's argument...

Private Sub Label1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Call test(Label1)
End Sub

Sub test(ByVal obj As Object)
MsgBox obj.Name
End Sub
 
M

MDubbelboer

your statement "I was trying to use userform_dblclick or multipage_dblclick
 however double clicking on a label (the behaviour i'm trying to
 capture) does not get captured." is confusing.  The label does have a
double click event if you right click the Label, then View Code you will see
the DblClick in the Declarations drop down pane.  You would have to write the
event code to make it perform as you have described your requirement, just
like any other event code.

i understand that. i was trying to avoid using the label events
because i did not want to have to make a specific code for each label.

From your statement and jim Thomlinson's statement it looks like I'm
out of luck and will have to do exactly that however.

thanks for reading
 
D

Dave Peterson

John Walkenbach shows how to use a class module to create a group of
commandbuttons on a userform so that clicking any button runs the same code.

You can find John's notes here:
http://spreadsheetpage.com/index.php/tip/handle_multiple_userform_buttons_with_one_subroutine/

I modified his code to use labels instead of commandbuttons.

This goes in the Class1 module:

Public WithEvents LabelGroup As MSForms.Label
Private Sub LabelGroup_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox "Hello from " & LabelGroup.Name & vbLf & LabelGroup.Caption
End Sub

This goes in a General module:

Option Explicit
Dim myLabels() As New Class1
Sub ShowDialog()
Dim LabelCount As Long
Dim ctl As Control

LabelCount = 0
For Each ctl In UserForm1.Controls
If TypeOf ctl Is MSForms.Label Then
LabelCount = LabelCount + 1
ReDim Preserve myLabels(1 To LabelCount)
Set myLabels(LabelCount).LabelGroup = ctl
End If
Next ctl
UserForm1.Show
End Sub
 
M

MDubbelboer

John Walkenbach shows how to use a class module to create a group of
commandbuttons on a userform so that clicking any button runs the same code.

You can find John's notes here:http://spreadsheetpage.com/index.php/tip/handle_multiple_userform_but...

I modified his code to use labels instead of commandbuttons.

This goes in the Class1 module:

Public WithEvents LabelGroup As MSForms.Label
Private Sub LabelGroup_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox "Hello from " & LabelGroup.Name & vbLf & LabelGroup.Caption
End Sub

This goes in a General module:

Option Explicit
Dim myLabels() As New Class1
Sub ShowDialog()
    Dim LabelCount As Long
    Dim ctl As Control

    LabelCount = 0
    For Each ctl In UserForm1.Controls
        If TypeOf ctl Is MSForms.Label Then
            LabelCount = LabelCount + 1
            ReDim Preserve myLabels(1 To LabelCount)
                Set myLabels(LabelCount).LabelGroup = ctl
        End If
    Next ctl
    UserForm1.Show
End Sub

Freaking Eh!

thanks dave, took me a while to get back here but that's awesome.
thanks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top