It is pretty much widely accepted that this is not \'best practise\'.
dim rng as range
with thisworkbook \'<~~ possibly set an external workbook
w
The answer seems to be: only if the code is located in a Worksheet object. I strongly suspect that this is because the Worksheet objects are the only ones that are both extensible and have a Range function. When Range is called from a Worksheet, that object's Range function has scope. When the code is located in ThisWorkbook or a user module or class, the Range function with the closest available scope is the global Range object (assuming of course that there isn't a user defined Range function). That one is tied to the Application, which has to resolve it based on the passed parameters and forward the call to the correct Worksheet.
No, the . is not required where the cell references inside the brackets are qualified, unless the code is in a Worksheet module. That said it is faster to run set rng = .range(.cells(...), .cells(...)) than it is to run set rng = range(.cells(...), .cells(...)) so including the . does some good.
For a Worksheet module, the . is required.
My opinion is slightly different here.
YES it is required. You can't always control where the user may run the code from.
Please consider these few test cases
SCENARIO
Workbook has 2 worksheets. Sheet1 and Sheet2
TEST 1 (Running from a module)
Both Code give same result
TEST 2 (Running from a Sheet code area of Sheet1)
Both Code give same result
TEST 3 (Running from a Sheet code area of Sheet2)
'~~> This code fails
set rng = range(.cells(2, 1), .cells(rows.count, 1).end(xlup))
You will get Application Defined or Object defined error
And hence it is always advisable to properly qualify your objects so that the code can run from anywhere