Well, since nobody else wants to answer ...
Question 1:
Passing a range to a sub routine can be precarious, much like a UDF. Here is an example...
Option Explicit
Sub StartProcedure()
EndProcedure ActiveCell
End Sub
Sub EndProcedure(MyRng As Range)
MsgBox "The passed range is from:" & vbNewLine & _
MyRng.Parent.Name & "!" & MyRng.Address
End Sub
Question 2:
ByVal and ByRef are referring (in VBA) that to which an argument has been passed, by a Value or by a Reference. Although when used within/with Objects, ByVal refers to an Object (e.g. the Target in a Worksheet level event). Commonly when declaring variables, the ByRef is used. It's like when using Ranges, no need to declare it as ActiveSheet.Range, because it's implied; so is ByRef. So the following two examples are the same ...
Sub Test1(x As Long)
Msgbox x
End Sub
Sub Test2(ByRef x As Long)
Msgbox x
End Sub
ByRef will change the variable which will be retained. This means you can pass variables back and forth between routines and retain the changes.
The help files on this are pretty shabby - at best. A google search will yield more results. Take an hour of free time and Google-it, just read and read and read. There's stuff out there, it's just hard to find sometimes. 
Question 3:
As far as a "formal naming convention", I'm not sure I understand what you mean. Are you referring to variables? If so, do a search for the popular Hungarian type notation. The MSDN Library is full of useful information such as this. (http://msdn.microsoft.com/)