A Function can return a value from itself. For example

Code:
Public Function Sum(ByVal a As Integer, _
ByVal b As Integer) As Integer
Return a + b
End Function
Then you can use this Function as follows

Dim result As Integer = Sum(2, 4)

On the other hand a Sub can not return a value from itself. It must use a
ByRef parameter to get a result. For example

Code:
Public Sub SumSub(ByVal a As Integer, _
ByVal b As Integer) As Integer)
Dim theSum As Integer = a + b
End Sub
This has no way of returning the result and using this like

Dim answer As Integer = SumSub(2, 4)

will generate a complile time error.