For your case, please use "CRT1!name" in place of "name" to get those names, such as targetWorkbook.getWorksheets().getRangeByName("CRT1!CRT1___report.header"));
And I will provide overloaded method for Worksheets.getRangeByName() to get Name object with given name text without specifing sheet reference for your convenience soon. Thank you for being patient.
We will provide you the fix soon after some tests. The fix provides an overloaded method for Worksheets.getRangeByName(String rangeName) as getRangeByName(String rangeName, boolean strictScope), where the boolean flag means whether restrict Name object's scope when search it. For Worksheets.getRangeByName(String), if not specify the scope, will only search for the NamedRange object whose scope is workbook. It is identical to invoking getRangeByName(String, true); For Worksheets.getRangeByName(String, false), will search for the NamedRange object with any scope.
Using "CRT1!name" is just give a clue for searching from Name collection, it is better for performance when specify correctly the scope of searched Name, but not so distinct. For convenience, if you don't care about the scope, I think you can use getRangeByName(name, false) directly without specify scope in "name" to get any Name object