Workbook.FullName
не возвращает допустимый аргумент для коллекции Workbooks
.
Вы можете проверить это, запустив ?Workbooks(ActiveWorkbook.FullName).FullName
в окне немедленного выполнения - это приведет к ошибке. С другой стороны, Workbook.Name
работает , поэтому ?Workbooks(ActiveWorkbook.Name).FullName
не будет ошибкой. Другими словами, Workbooks("C:\Users\fabbius\Documents\SomeFile.xlsx")
недействителен, а Workbooks("SomeFile.xlsx")
- действителен, пока открыт файл с таким именем.
Однако я не вижу преимущества использования FullName
при использовании правильно определенных объектов книги:
Sub export()
Dim exportFileFullPath As String, arrayOfSheetsToCopy As Variant
Dim wsExportFrom As Workbook, wsExportTo As Workbook
Set wsExportFrom = ActiveWorkbook
Set wsExportTo = Workbooks.Add
exportFileFullPath = Replace(wsExportFrom.FullName, ".xlsm", "_export.xlsx", Len(wsExportFrom.Path))
'The Len() is in case the File Path contains ".xlsm" for some reason
wsExportTo.SaveAs fileName:=exportFileFullPath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
arrayOfSheetsToCopy = Array("originalSheet1", "originalSheet2", "originalSheet3")
wsExportFrom.Sheets(arrayOfSheetsToCopy).Copy after:=wsExportTo.Sheets(wsExportTo.Sheets.Count)
End Sub
Конечно, если этот макрос запускается из книги, из которой вы собираетесь экспортировать, то With
и ThisWorkbook
сделать вещи еще проще:
Sub export()
Dim exportFileFullPath As String, arrayOfSheetsToCopy As Variant
exportFileFullPath = Replace(ThisWorkbook.FullName, ".xlsm", "_export.xlsx", Len(ThisWorkbook.Path))
'The Len() is in case the File Path contains ".xlsm" for some reason
arrayOfSheetsToCopy = Array("originalSheet1", "originalSheet2", "originalSheet3")
With Workbooks.Add
.SaveAs fileName:=exportFileFullPath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ThisWorkbook.Sheets(arrayOfSheetsToCopy).Copy after:=.Sheets(.Sheets.Count)
End With
End Sub
Заключительное примечание: вы сохраняете файл до того, как добавляете в него рабочие листы. Должны ли эти строки быть наоборот?