2016-08-25 9 views
1

Je cours une macro VBA dans Excel 2016 pour Mac. La macro fonctionne sur les plates-formes Windows avec Excel 2016 et sur les plateformes Mac antérieures à la version 2016. Le problème semble spécifique à Excel 2016 pour Mac lorsque vous essayez d'exporter un fichier CSV.Macro VBA dans Excel 2016 pour Mac: SaveAs ne fonctionne pas avec un format de fichier CSV

Le code est censé permettre à l'utilisateur de cliquer sur un bouton, qui exportera ensuite une feuille de calcul active vers un fichier CSV. Alors qu'un problème similaire a été documenté ici (Getting "method saveas of object _workbook failed" error while trying to save an XLSM as CSV), malheureusement, tout en changeant xlCSV à 6 a travaillé pour eux, cela n'a pas fonctionné pour moi.

Le code fonctionne jusqu'à la ligne ActiveWorkbook.SaveAs Filename:=newFileName, FileFormat:=6, CreateBackup:=False, qui jette l'erreur:

Run-time error '1004':Method 'SaveAs' of object '_Workbook' failed

Si je change FileFormat-51 (.xlsx) ou 53 (.xlsm) le code se terminera avec succès. Toutefois, si FileFormat est défini sur 6 (.csv), le code renvoie l'erreur ci-dessus. Je suis incapable de SaveAsxlCSV ou xlCSVMac.

Mon script complet est ci-dessous:

Sub btnExportCSV_Click() 
Dim oldFileName As String 
Dim newFileName As String 
Dim timeStamp As String 
Dim fileAccessGranted As Boolean 
Dim filePermissionCandidates 
Dim wsPath As String 

timeStamp = Format(Now, "yyyymmddhhmmss") 

wsPath = Application.ThisWorkbook.Path 

oldFileName = ThisWorkbook.FullName 
newFileName = Mid(oldFileName, 1, InStrRev(oldFileName, ".") - 1) & timeStamp & ".csv" 

' Check if software is Office 2016 for Mac 
' Documentation for this comes from https://dev.office.com/blogs/VBA-improvements-in-Office-2016 
#If MAC_OFFICE_VERSION >= 15 Then 
    filePermissionCandidates = Array(wsPath) 
    fileAccessGranted = GrantAccessToMultipleFiles(filePermissionCandidates) 
#End If 

Application.DisplayAlerts = False 

Sheets("OfflineComments").Activate 
Sheets("OfflineComments").Copy 
ActiveWorkbook.SaveAs Filename:=newFileName, FileFormat:=6, CreateBackup:=False 
ActiveWorkbook.Save 
ActiveWindow.Close 

MsgBox ("Offline comments exported to " & newFileName) 

Application.DisplayAlerts = True 
End Sub 

J'ai essayé:

  • Ajout d'un chemin d'accès complet aux noms de fichiers d'entrée/sortie
  • Veiller à ce que la version d'Excel est cochée et autorisations autorisées par l'utilisateur
  • Différents types de fichiers pour le paramètre FileFormat, mais comme mentionné précédemment, seuls deux types ont réellement fonctionné.
  • Essayer le code mentionné dans l'article ci-dessus, ce qui n'a pas aidé (et c'est pourquoi je poste le code original ici).
+0

Il y a des informations mises à jour ici, maintenant: http://answers.microsoft.com/en -us/msoffice/forum/msoffice_excel-mso_mac/vba-macro-en-excel-2016-pour-mac-saveas-will-not/86d6855f-241d-4b8d-b233-cccd7184c67b Le problème semble être lié aux nouveaux problèmes d'autorisations qui se posent avec le bac à sable d'Apple, pour ceux qui sont intéressés. – Kate

Répondre

0

Essayez ceci:

Application.ThisWorkbook.SaveAs ("C:\User\Folder\test.csv") 

supprimer également la ligne ActiveWorkbook.Save. Vous doublez le J'utilise Excel 2010 et cela fonctionne parfaitement sur ma machine.

+0

Merci pour la suggestion! Malheureusement, cela ne fonctionne pas comme prévu. Alors que le code va s'exécuter et enregistrer avec le nom approprié et l'extension de fichier CSV en utilisant cette ligne 'Application.ThisWorkbook.SaveAs (newFileName)' le format réel du fichier ne semble pas être un fichier CSV. Je reçois des erreurs que le format et les extensions ne correspondent pas lorsque je tente d'ouvrir, et tout le formatage est toujours présent. De plus, en utilisant l'objet 'ThisWorkbook', le code renomme l'original et ne semble pas conserver une version de la feuille d'origine que je voudrais conserver. – Kate

+0

Modification de cette ligne à Sheets ("OfflineComments"). SaveAs Nom de fichier: = newFileName, FileFormat: = 6, CreateBackup: = False' travaillé pendant un certain temps, puis a cessé de fonctionner de manière aléatoire.Maintenant lançant l'erreur 'Erreur d'exécution '1004': la méthode SaveAs de la classe Worksheet a échoué'' – Kate

+0

Hmm, eh bien si ça marche au début et qu'ils cessent de fonctionner plus tard, je suppose que ça a probablement quelque chose à voir avec ton chemin . Y a-t-il des caractères illégaux, ou des espaces doubles peut-être? – TheGuyOverThere

0

Essayez de changer les permissions de demander explicitement le nouveau nom au lieu du chemin en changeant wsPath à NewFileName:

#If MAC_OFFICE_VERSION >= 15 Then 
    filePermissionCandidates = Array(newFileName) 
    fileAccessGranted = GrantAccessToMultipleFiles(filePermissionCandidates) 
#End If 
+0

Merci pour la suggestion @ user6853416, mais cela n'a pas fonctionné malheureusement. Fait intéressant, il ne m'incitera pas à accéder au dossier, mais j'ai quand même reçu la même erreur sur la commande 'SaveAs'. – Kate