Recently, I turned to Windows messaging to manipulate certain dialogs by simulating button clicks programmatically. I looked through my API references and found only the WM_LBUTTONDOWN and WM_LBUTTONUP messages. I couldn't get them to work until I found, on the MSDN Web site, a message that's not documented in the API text that comes with VBBM_CLICK = &HF5. You set lParam and wParam both to zero to use this message. It works perfectly when it's sent directly to the button. SendMessage is a synchronous call. If the button you want to click might take some time to process its work, and you'd rather make an asynchronous click, use PostMessage instead. This sample shows how to use the BM_CLICK message. Paste this code into a new form, with two command buttons, one option button, and one checkbox:
Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd As Long, ByVal wMsg _
As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function PostMessage Lib "user32" Alias _
"PostMessageA" (ByVal hWnd As Long, ByVal wMsg _
As Long, ByVal wParam As Long, ByVal lParam As Long) _
Private Const BM_CLICK = &HF5
Private Sub Check1_Click()
Debug.Print " Check1_Click"
Private Sub Command1_Click()
Debug.Print " Command1_Click"
Private Sub Command2_Click()
Debug.Print "Entering Command2_Click"
Call SendMessage(Check1.hWnd, BM_CLICK, 0, ByVal 0&)
Call SendMessage(Option1.hWnd, BM_CLICK, 0, ByVal 0&)
Call SendMessage(Command1.hWnd, BM_CLICK, 0, ByVal 0&)
Debug.Print "Exiting Command2_Click"
Private Sub Option1_Click()
Debug.Print " Option1_Click"
The BM_CLICK message works on any button-class control. This includes option buttons and checkboxes.