If you want to pass a parameter to a subroutine, use this code:
Call doFormat(txtPerson)
You can also call the subroutine without the Call statement. However, if you don’t include the Call statement, you can’t include parentheses:
doFormat (txtPerson)
In VB, expressions in parentheses are evaluated before they’re processed. So by putting parentheses around the control name, you’re telling it to evaluate it. Because a control can’t be evaluated, it gives you the value of the default property. This code actually passes the Text string value-because Text is the default property-to the subroutine instead of passing the control. Because the routine expects a textbox and not a string, it generates the type mismatch.