To programmatically open and close the list portion of a ComboBox control, all you need is sending the CB_SHOWDROPDOWN message to the control. Here is a routine that encapsulate the SendMessage API function:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _ hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ lParam As Any) As LongConst CB_SHOWDROPDOWN = &H14FConst CB_GETDROPPEDSTATE = &H157 ' Show or hide the list portion of a combobox Sub ComboBoxOpenList(cbo As ComboBox, Optional showIt As Boolean = True) SendMessage cbo.hwnd, CB_SHOWDROPDOWN, showIt, ByVal 0&End Function
Retrieving the current visibility state of the list portion of a ComboBox can be done by sending a message, too. Here is a wrapper function that does it all:
' Returns True if the list portion of a combobox is visibleFunction ComboBoxIsListVisible(cbo As ComboBox) As Boolean ComboBoxIsListVisible = SendMessage(cbo.hwnd, CB_GETDROPPEDSTATE, 0, _ ByVal 0&)End Function