I know most people use RegisterUserFunc. But still wanted to throw out an example. Consider the below code
<font class="small">Code:</font><hr /><pre>
Public Function SelectEx2(pObject, ByVal Value)
last = CSTR(pObject.GetROProperty("items count") - 1)
randomValue = CSTR(RandomNumber.Value (0, last-1))
Value = Replace(Value, "#last", last,1,-1,vbTextCompare)
Value = Replace(Value, "#random", randomValue,1,-1,vbTextCompare)

pObject.Select Value
SelectEx2 = pObject.GetROProperty("selected item index")
End Function

RegisterUserFunc "WebList", "Select", "SelectEx2"
RegisterUserFunc "WebRadioGroup", "Select", "SelectEx2"
</pre><hr />

This allows us to use the default as well as extended functionality of QTP test object.

So we can use the above code as below
<font class="small">Code:</font><hr /><pre>
B().P().WebList("...").Select "#random"
B().P().WebList("...").Select "#last"
B().P().WebRadioGroup("...").Select "#random"
B().P().WebRadioGroup("...").Select "#last"
</pre><hr />

This is quite useful when we are not worried about the values to be selected and want some randomness in our test cases.

Hope it helps