A function returns a value (or CAN) where as a sub (procedure) doesn't (at least not directly). In a function the As blah blah blah is declaring the return type or the type of the value that it will return. Since a sub can't return a value like that it gives you an error. A sub can however change the value of an argument and expose those changes to the rest of the program if the argument is passed in ByRef.
VB Code:
'function way
Private Function GetFwtTax(ByVal sngWeekPay As Single) As Single
Return 1.1
End Function
dim ret as Single=GetFwtTax(1) 'returns 1.1
'sub way
Private Sub GetFwtTax(ByVal sngWeekPay As Single,[b]ByRef[/b] sngReturn as Single)
sngReturn=1.1
End Sub
dim ret as Single
GetFwtTax(1,ret) 'ret now equals 1.1