When I opened in 2010, it appeared to work as expected. The top form (2) opened when I selected a and (3) opened below when I selected b.
Saw the code where you had in and the flow looks simple. Don't understand why it wouldn't excecute in MS 2007... I edited the code a little, adding "Public" to the first subroutine and put in a "Call" for each of the 2 private subroutines. The code still executed as expected, so I would try changing your code to what I have pasted below to see if it works for you.
Code:
Public Sub ShowSubform()
If Combo2 = "a" Then
SubForm2.Visible = True
SubForm3.Visible = False
ElseIf Combo2 = "b" Then
SubForm2.Visible = False
SubForm3.Visible = True
End If
End Sub
Private Sub Combo2_AfterUpdate()
Call ShowSubform
End Sub
Private Sub Form_Current()
Call ShowSubform
End Sub
Couldn't give you a "why", but if it works...