2016-10-21 2 views
0

Le script suivant a été écrit pour ouvrir tous les types de fichiers .xlsm dans un dossier et les enregistrer en tant que types .xlsx dans un nouveau répertoire, mais le script continue d'échouer lors de la tentative d'enregistrement. .xlsx.Le script VBA échoue lorsque vous tentez d'enregistrer sous .XLSX

Le message d'erreur renvoyé est une erreur d'exécution « 1004 »

Toutes les tentatives pour y remédier ont échoué, toute aide est beaucoup appriciated et je vous remercie à l'avance.

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' ne peut pas être assigné une valeur, vous devez lui passer un paramètre - ie' wb.SaveAs myfile & ".xlsx" '(Note: Si vous aviez ouvert un fichier appelé" abc.xlsm "à partir du répertoire" C: \ Temp1 \ Temp2 ", vous allez créer un fichier appelé" abc.xlsm.xlsx "dans le répertoire actif, qui est probablement l'emplacement où l'application Excel est stockée - donc vous voulez probablement vraiment 'wb. SaveAs myPath & Left (monfichier, Len (monfichier) - 5) & ".xlsx" ') – YowE3K

+0

J'ai ajouté les paramètres suivants, mais la même erreur est renvoyée. 'teamname = Left (monfichier, Len (monfichier) - 5) &" .xlsx "' 'Destination = filepath & nomd'équipe' ' wb.SaveAs = Destination' – Paul

+0

Si l'erreur est déclenchée en raison de l'avertissement suivant: ' Excel' ** vraiment ** n'aime pas que vous essayiez d'enregistrer un classeur '' macro activé'' sous la forme d'un fichier ordinaire, ajoutez un 'Application.DisplayAlerts = False' au début de votre code et une' Application.DisplayAlerts = True' comme fin pour forcer le problème. –

Répondre

0

Parce que SaveAs est un Method de l'objet Workbook, il ne peut pas être attribué une valeur, de sorte que vous ne pouvez pas avoir une déclaration de la forme:

wb.SaveAs = ..... 

Le MSDN documentation for SaveAs montre qu'il peut être passé de nombreux paramètres, que ce soit par la position ou par nom:

expression .SaveAs (FileName, FileFormat, mot de passe, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, RésolutionDeConflit, AddToMru, TextCodepage, TextVisualLayout, Local)

expression une variable qui représente un objet de classeur.

L'une des syntaxes valides pour ce que vous avez écrit est:

wb.SaveAs myfile & ".xlsx" 

Cependant, si vous aviez ouvert un fichier appelé "abc.xlsm" du « C: \ Temp1 \ Temp2" répertoire, vous allez créer un fichier appelé « abc.xlsm.xlsx » dans le répertoire courant, ce qui est probablement lorsque l'application Excel est stocké - donc vous voulez probablement vraiment

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

ou peut-être

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

pour forcer Enregistrer être dans un format non-macro-activé.


Mais le point principal à retenir est ... vous ne pouvez pas attribuer une valeur à un Method.