Проблема заключается в следующей строке:
wb.SaveAs(path);
В соответствии с документацией метода Workbook.SaveAs вы можете / должны указать следующие параметры:
FileName
Строка, которая указывает имя файла для сохранения. Вы можете включить полный путь; в противном случае Microsoft Excel сохраняет файл в текущей папке. FileFormat
Формат файла, используемый при сохранении файла. Список допустимых вариантов см. В перечислении XlFileFormat. Для существующего файла формат по умолчанию - последний указанный формат файла; для нового файла по умолчанию используется формат используемой версии Excel.
На самом деле оба являются необязательными, но если вы опустите FileName
, Excel будет использовать имя стандартного файла и "" текущая папка "кто знает, какая это папка, и если вы пропустите FileFormat
, то Excel будет использовать последний указанный формат файла или для новых файлов стандартный формат, который является нормальным xlsx (в последних версиях Excel).
Другое дело, что используемое расширение файла .xltx
, .xlsx
, .xlsm
обязательно должно соответствовать правильному формату файла. Если это не Excel, выдает ошибку. Это то, с чем вы столкнулись, когда получили сообщение об ошибке:
COMException: дополнительная информация: это расширение нельзя использовать с выбранным типом файла. Измените расширение файла в текстовом поле «Имя файла» или выберите другой тип файла, изменив выбор «Сохранить как».
Поскольку вы указали только FileName
и выбрали .xltx
как расширение файла, но формат файла по умолчанию обычно xlOpenXMLWorkbook
в соответствии со списком в перечислении XlFileFormat .
Так что если вы посмотрите в этом списке, какие форматы файлов вы можете использовать с расширением .xltx
, тогда вы найдете только один допустимый формат файла, а это xlOpenXMLTemplate
. Вот что вам нужно указать:
'example for path/filename you got from your dialog box
path = "C:\YourPath\YourFileName.xltx"
wb.SaveAs(FileName:=path, FileFormat:=xlOpenXMLTemplate);