Be sure to read the help files on INDIRECT function.

Essentially what INDIRECT is looking to do for you is execute whatever appears within the parentheses as a text string and execute as though it were entered as a formula, eg:

=INDIRECT("'Sheet 1'!A10")

so the text string created is 'Sheet 1'!A10 ... the text string being encased within "... ie "textstring" ... the above is then interpreted by XL

='Sheet 1'!A10

In your formula you've not created a text string...ie you've used:

INDIRECT('P1'!B2:R18)

as opposed to

INDIRECT("'P1'!B2:R18")

... in fact in your example if P1 is constant you need not use INDIRECT at all.... if though the sheet reference (ie P1) were to be variable (as implied earlier in the thread) and say the sheet name was stored in cell A1 you would use:

INDIRECT("'"&A1&"'!B2:R18")

thereby creating a text string of 'sheetname'!B2:R18