Вы можете объявить или установить объекты диапазона перед передачей их в вашу функцию. Чтобы доказать, что вы передаете правильные значения своей функции, попробуйте это.
Dim r As Range '-- if you don't declare it as a range type you get a variant type as default
Dim c As Range '-- this is used to store the single cell in the For Each loop
Set r = Range("A1:D1") '-- substitute your range as per your example
For Each c In r '-- you could also use r.cells
MsgBox c.Value '-- pass to your function instead of a call to the Message Box
Next
Это создает серию из 4 окон сообщений, содержащих значения в ячейках с A1 по D1 активной рабочей таблицы, если ваш диапазон "r" очень большой, вместо этого передайте его в Debug.Print.