ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Focus on combobox (https://www.excelbanter.com/excel-programming/282694-focus-combobox.html)

atkscott

Focus on combobox
 
Does anyone know how to test, in VBA, if a combobox on a sheet has the focus or not?

Tom Ogilvy

Focus on combobox
 
If from the control toolbox toolbar, have you tried using the GotFocus and
Lostfocus events?

--
Regards,
Tom Ogilvy


atkscott wrote in message
m...
Does anyone know how to test, in VBA, if a combobox on a sheet has the

focus or not?



Scott Harmala

Focus on combobox
 
Tom,
The root of my problem is that when a user clicks on the combobox, focus
is transfered and the gotfocus event is triggered. No problem there. If
then the user clicks on the combobox and selects the same list choice,
NO event is triggered. The control already has focus, focus is
mantained, value hasn't changed so there's no change event and for some
reason no click event is triggered. A code condition that CAN follow
after this condition attemts to unprotect this locked sheet.

The unprotect code fails.

Sheets("Main").Unprotect (Sheets("Data").Range("G3"))

I need to detect this condition and if it exists, temporarily move focus
off it and after the unprotect code block runs, return it.


Thanks,
Scott

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!

onedaywhen

Focus on combobox
 
Set a flag in the _GotFocus event, reset it in the _LostFocus event.
Then, to determine whether the control has focus, check the value of
the flag.

As an aside, just for interest, this code determines that the user
changed the value, even if they select the same list choice (also:
consider when the user changes the combo using the keyboard):

Option Explicit

Private Enum owComboStateEnum
owComboStateNormal = 1
owComboStateIsDropping = 2
owComboStateDropped = 3
End Enum

Private m_lngComboState As owComboStateEnum

Private Sub ComboBox1_DropButtonClick()
ComboState = owComboStateIsDropping
End Sub

Private Sub ComboBox1_LostFocus()
ComboState = owComboStateNormal
End Sub

Private Sub ComboBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
Select Case ComboState
Case owComboStateIsDropping
ComboState = owComboStateDropped
Case owComboStateDropped
Debug.Print "Success: ComboBox1 will change from '" & _
ComboBox1.Value & "' to unknown."
ComboState = owComboStateNormal
End Select
End Sub

Private Property Let ComboState(ByVal NewValue As owComboStateEnum)
m_lngComboState = NewValue
End Property

Private Property Get ComboState() As owComboStateEnum
ComboState = m_lngComboState
End Property


Scott Harmala wrote in message ...
Tom,
The root of my problem is that when a user clicks on the combobox, focus
is transfered and the gotfocus event is triggered. No problem there. If
then the user clicks on the combobox and selects the same list choice,
NO event is triggered. The control already has focus, focus is
mantained, value hasn't changed so there's no change event and for some
reason no click event is triggered. A code condition that CAN follow
after this condition attemts to unprotect this locked sheet.

The unprotect code fails.

Sheets("Main").Unprotect (Sheets("Data").Range("G3"))

I need to detect this condition and if it exists, temporarily move focus
off it and after the unprotect code block runs, return it.


Thanks,
Scott

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!


atkscott

Focus on combobox
 
Funning things happen when you get so buried in your code...Thanks
onedaywhen for pointing out the obvious :)

(onedaywhen) wrote in message . com...
Set a flag in the _GotFocus event, reset it in the _LostFocus event.
Then, to determine whether the control has focus, check the value of
the flag.

As an aside, just for interest, this code determines that the user
changed the value, even if they select the same list choice (also:
consider when the user changes the combo using the keyboard):

Option Explicit

Private Enum owComboStateEnum
owComboStateNormal = 1
owComboStateIsDropping = 2
owComboStateDropped = 3
End Enum

Private m_lngComboState As owComboStateEnum

Private Sub ComboBox1_DropButtonClick()
ComboState = owComboStateIsDropping
End Sub

Private Sub ComboBox1_LostFocus()
ComboState = owComboStateNormal
End Sub

Private Sub ComboBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
Select Case ComboState
Case owComboStateIsDropping
ComboState = owComboStateDropped
Case owComboStateDropped
Debug.Print "Success: ComboBox1 will change from '" & _
ComboBox1.Value & "' to unknown."
ComboState = owComboStateNormal
End Select
End Sub

Private Property Let ComboState(ByVal NewValue As owComboStateEnum)
m_lngComboState = NewValue
End Property

Private Property Get ComboState() As owComboStateEnum
ComboState = m_lngComboState
End Property


Scott Harmala wrote in message ...
Tom,
The root of my problem is that when a user clicks on the combobox, focus
is transfered and the gotfocus event is triggered. No problem there. If
then the user clicks on the combobox and selects the same list choice,
NO event is triggered. The control already has focus, focus is
mantained, value hasn't changed so there's no change event and for some
reason no click event is triggered. A code condition that CAN follow
after this condition attemts to unprotect this locked sheet.

The unprotect code fails.

Sheets("Main").Unprotect (Sheets("Data").Range("G3"))

I need to detect this condition and if it exists, temporarily move focus
off it and after the unprotect code block runs, return it.


Thanks,
Scott

*** Sent via Developersdex
http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!



All times are GMT +1. The time now is 10:05 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
ExcelBanter.com