2016-10-21 3 views
0

Das folgende Skript wurde geschrieben, um alle .xlsm-Dateitypen in einem Ordner zu öffnen und sie als .xlsx-Typen in einem neuen Verzeichnis zu speichern, aber das Skript schlägt fehl, wenn versucht wird, zu speichern .xlsx.VBA-Skript schlägt fehl beim Speichern als .XLSX

Die Fehlermeldung zurückgegeben wird, ist ein Laufzeitfehler ‚1004‘

Alle Versuche, dies versäumt zu beheben sind, wird jede mögliche Hilfe viel appriciated und ich danke Ihnen im Voraus.

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' kann kein Wert zugewiesen werden, Sie müssen einen Parameter übergeben - dh' wb.SaveAs myfile & ".xlsx" '(Hinweis: Wenn Sie eine Datei namens" abc.xlsm "Im Verzeichnis" C: \ Temp1 \ Temp2 "erstellen Sie eine Datei namens" abc.xlsm.xlsx "im Active Directory, in der sich wahrscheinlich die Excel-Anwendung befindet - wahrscheinlich möchten Sie also" wb ". SaveAs myPath & Left (MeineDatei, Len (MyFile) - 5) & ".xlsx" ') – YowE3K

+0

Ich habe die folgenden Parameter hinzugefügt, aber derselbe Fehler wird zurückgegeben. 'teamname = Links (myfile, Len (meinedatei) - 5) &" .xlsx "' 'Ziel = filepath & teamname' ' wb.SaveAs = Destination' – Paul

+0

Wenn der Fehler wegen der Warnung, dass ' Excel '** wirklich ** mag es nicht, dass Sie versuchen, eine 'Makro-fähige' Arbeitsmappe als einfache Datei zu speichern, fügen Sie am Anfang Ihres Codes und einer' Anwendung eine 'Application.DisplayAlerts = False' hinzu.DisplayAlerts = True "als das Ende, um das Problem zu erzwingen. –

Antwort

0

Da SaveAs ein Method des Workbook Objekt ist, kann es nicht ein Wert zugewiesen werden, so dass Sie nicht eine Aussage der Form haben:

wb.SaveAs = ..... 

Die MSDN documentation for SaveAs zeigt, dass es können viele Parameter übergeben werden, entweder durch die Position oder durch name:

Ausdruck .SaveAs (Filename, Fileformat, Passwort, WriteResPassword, ReadOnlyRecommended, Create, Access, ConflictResolution, AddToMru, TextCodepage, Textvisuallayout, Local)

Ausdruck Eine Variable, die ein Arbeitsbuch Objekt darstellt.

Einer der gültigen Syntax für das, was Sie geschrieben haben, ist:

wb.SaveAs myfile & ".xlsx" 

Wenn Sie jedoch eine Datei "abc.xlsm" aus dem „C genannt geöffnet hatte: \ Temp1 \ Temp2" abc.xlsm.xlsx ‚im aktuellen Verzeichnis Verzeichnis, finden Sie eine Datei aufgerufen werden, zu schaffen‘, was wahrscheinlich ist, wo die Excel-Anwendung gespeichert ist - so dass Sie wahrscheinlich wirklich

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

oder möglicherweise

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

das Speichern zu zwingen, in einem nicht-Makro-fähigen Format.


Aber der wichtigste Punkt ist, ... Sie keinen Wert auf einen Method zuweisen können.

Verwandte Themen