2016-10-21 3 views
0

Создан следующий скрипт, который открывает все типы файлов .xlsm в папке и сохраняет их как .xlsx-типы в новом каталоге, но сценарий продолжает сбой при попытке сохранить как .xlsx.Ошибка VBA Script при попытке сохранить как .XLSX

Сообщение об ошибке Возвращается времени выполнения ошибка «1004»

Все попытки исправить это не удалось, любая помощь очень appriciated и я благодарю вас заранее.

Set fso = CreateObject("scripting.filesystemobject") 
Set fils = fso.GetFolder("FILE LOCATION").Files 

FldrPicker = "FILE LOCATION" 
With FldrPicker 
myPath = FldrPicker 
End With 
myExtension = "*.xlsm" 
myfile = Dir(myPath & myExtension) 

filepath = "NEW FILE LOCATION" 

Do While myfile <> "" 
Set wb = workbooks.Open(Filename:=myPath & myfile) 
Application.DisplayAlerts = False 
wb.SaveAs = myfile & ".xlsx" 
wb.Close Savechanges:=True 
Application.DisplayAlerts = True 
Loop 
+2

'wb.SaveAs' не может быть назначено значение, вам необходимо передать ему параметр - то есть' wb.SaveAs myfile & ".xlsx" '(Примечание: если вы открыли файл под названием« abc.xlsm «из каталога« C: \ Temp1 \ Temp2 »вы создадите файл с именем« abc.xlsm.xlsx »в активном каталоге, который, вероятно, там, где хранится приложение Excel, поэтому вы, вероятно, действительно хотите« wb ». SaveAs myPath & Left (myfile, Len (myfile) - 5) & ".xlsx" ') – YowE3K

+0

Я добавил следующие параметры, но при этом возвращается одна и та же ошибка. 'teamname = Left (myfile, Len (myfile) - 5) &" .xlsx "' 'Destination = filepath & teamname' ' wb.SaveAs = Destination' – Paul

+0

Если ошибка запускается из-за предупреждения о том, что ' Excel' ** действительно ** не нравится, что вы пытаетесь сохранить книгу с макросами в виде обычного файла, добавьте «Application.DisplayAlerts = False» в начало вашего кода и «Приложение».DisplayAlerts = True' в качестве причины для устранения проблемы. –

ответ

0

Поскольку SaveAs является Method из Workbook объекта, оно не может быть присвоено значение, так что вы не можете иметь заявление формы:

wb.SaveAs = ..... 

MSDN documentation for SaveAs показывает, что может быть передано множество параметров, либо позиции или по имени:

экспрессии .SaveAs (имя_файла, FileFormat, пароль, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, Конфликтные, AddToMru, TextCodepage, TextVisualLayout, Местный)

выражение Переменная, которая представляет собой объект Workbook.

Один из допустимых синтаксисов для того, что вы написали это:

wb.SaveAs myfile & ".xlsx" 

Однако, если вы открыли файл с именем "abc.xlsm" из «C: \ Temp1 \ Temp2" каталог, вы будете создавать файл с именем „abc.xlsm.xlsx“ в текущем каталоге, который, вероятно, где приложение Excel хранится - так что вы, вероятно, на самом деле хотите

wb.SaveAs FileName:=myPath & Left(myfile, Len(myfile) - 5) & ".xlsx" 

или, возможно,

wb.SaveAs FileName:=myPath & Left(myfile, Len(myfile) - 5) & ".xlsx", _ 
       FileFormat:=xlOpenXMLWorkbook 

, чтобы заставить Сохранить быть в формате без макросъемки включена.


Но главное, чтобы помнить ... вы не можете присвоить значение для Method.