Большинство именованных диапазонов копируются правильно, а некоторые нет. Глядя в диспетчер имен скопированного файла, диапазоны, которые не копируются правильно, по-прежнему относятся к исходному файлу, а не к копии. Те, которые правильно копируют, указывают на локальную копию, как и должны.
Sub Test()
Dim TemplateTemplate As Worksheet, SummaryTemplate As Worksheet
Dim datafile As Workbook
With ActiveWorkbook
Set TemplateTemplate = .Sheets("Template")
Set SummaryTemplate = .Sheets("Summary")
End With
' Open up a new workbook
` Set datafile = Workbooks.Add
`' Copy worksheets to new "datafile"
SummaryTemplate.Copy After:=datafile.Sheets(datafile.Sheets.Count) ' All named ranges copied
TemplateTemplate.Copy After:=datafile.Sheets(datafile.Sheets.Count) ' Missing 4 named ranges
TemplateTemplate.Copy After:=datafile.Sheets(datafile.Sheets.Count) ' Missing 4 named ranges
End Sub
Нет сообщений об ошибках, но 4 из 10 именованных диапазонов из TemplateTemplate не копируются правильно. Если я закомментирую копию SummaryTemplate, то все диапазоны от TemplateTemplate будут скопированы. Если я изменяю порядок, то есть TemplateTemplate, скопированный до SummaryTemplate, тогда все диапазоны копируются корректно. Глядя на Name Manager, нет ничего уникального в определении 4 диапазонов в исходном файле. Глядя в Диспетчер имен для копий, неправильные копии относятся к исходному файлу, а не к файлу копии («файл данных»).