Sunday, September 10, 2006

Get The Active Control In A UserForm

— Matt Harris @ 11:05 am

Recently, I had the need to find the active control on a UserForm for a dialog box I was creating for Word 2003. The problem was that most of my controls were on a MultiPage control. Whenever the active control was on the MultiPage, UserForm.ActiveControl returned the MultiPage, not the control I wanted.

My solution was to write the following function, GetActiveControl which would essentially ignore MultiPages and Frames to return the “real” active control:

Public Function GetActiveControl(ByRef Source As UserForm) As Control
Dim Ctl As Control
  Set Ctl = GetSubActiveControl(Source.ActiveControl)
  Set GetActiveControl = Ctl
End Function

Private Function GetSubActiveControl(Ctl As Control) As Control
Dim CtlType As String
  CtlType = TypeName(Ctl)
  Select Case CtlType
  Case "MultiPage"
    Set Ctl = Ctl.SelectedItem.ActiveControl
    Set Ctl = GetSubActiveControl(Ctl)
  Case "Frame"
    Set Ctl = Ctl.ActiveControl
    Set Ctl = GetSubActiveControl(Ctl)
  End Select
  Set GetSubActiveControl = Ctl
End Function

As you can see, I use a private recursive function to do the real work of finding the control. I suppose I could have done it some other way, but this seemed to be the most straightforward.

One comment

One response to “Get The Active Control In A UserForm”

  1. Hammer says:

    Hi, I just saw that you link me in your daily reads. After looking at your extensive list I’m honored to be included.

    Looks like we have some of the same interests. Nice website.

    Best regards,
    Hammer

Archives

  • 1530s Europe Campaign (15)
  • Books (7)
  • BTVS & Angel (24)
  • Cormaria (22)
  • Doctor Who (1)
  • Fanfiction Recs (19)
  • General (36)
  • Harry Potter (19)
  • Humor (16)
  • Java (1)
  • Microsoft Office (2)
  • Northridge Pathfinder (24)
  • OpenOffice.org (1)
  • Pathfinder (30)
  • Politics (4)
  • Programming (6)
  • Programs (5)
  • Reviews (2)
  • Role-Playing Games (D&D et. al.) (85)
  • Science (1)
  • Site News (120)
  • Smallville (2)
  • Stargate (2)
  • Tips (4)




  • Powered by Wordpress