What worked for me was the following...
1) Define a global parameter in the main module as follows:
Public gMyForm As MSForms.UserForm
2) In the UserForm_Initialize() sub:
Set gMyForm = Me
3) To call the function:
Dim l_dummy as Variant
l_dummy = myFunction(gMyForm)
4) Function signature plus a few lines of random code:
Function myFunction(ByRef p_form As MSForms.UserForm)
Dim l_my_value type string
l_my_value = p_form.myControl.Value
The only weirdness, which doubtless someone can explain, is the need to specify the l_dummy return parameter else you get the type mismatch error. Worked like a charm otherwise..
Hope this helps someone.