Why does VBA exist? : I have this function (which I based off a function [here][1]):

    Function Foo(ByVal r As range) As String
        MsgBox "WHAT. The function worked? Wow!"
    End Function

I have tried calling it like so:

    Let max_row = cells.CurrentRegion.Columns.Count
    Set r = range(cells(2, ID_COL), cells(max_row, ID_COL))
    Foo r

And I Always Get the Error: "run-time error 13, type mismatch" once the code hits the call to Foo.

Additionally, putting parentheses around the "r" 

    Foo(r)

Auto corrects to:

    Foo (r)

Which gives the error: "Object Expected" 
I assume this means that parentheses deference a pointer to its value, and are not meant for function calls, because VBA was not designed to be a good or even adequate language. 

I have also tried writing the function as:

    Function Foo(r As range) As String
        MsgBox "WHAT. The function worked? Wow!"
    End Function

But with no success.

Any ideas?

  [1]: http://stackoverflow.com/questions/15888353/concatenate-multiple-ranges-using-vba