web-dev-qa-db-fra.com

Comment faire un "Enregistrer sous" dans le code vba, en sauvegardant mon classeur Excel actuel avec l'horodatage?

J'ai un classeur Excel qui sur le bouton du formulaire, cliquez sur Je veux enregistrer une copie du classeur avec le nom du fichier étant la date actuelle.

Je continue d'essayer le suivant ActiveWorkbook.SaveAs ("\\filePath\FormFlow To MSExcel\" & Left(Now(), 10)) mais je reçois Run-time error '1004': Method 'SaveAs' of object'_Workbook' failed.

Quelqu'un peut-il m'aider avec ça? Je suis encore très nouveau dans le développement pour Excel.

17
Analytic Lunatic

Le chemin auquel vous essayez d'accéder n'existe probablement pas. Il semble que vous essayez de sauvegarder dans un emplacement relatif et que vous n’ayez pas d’extension de fichier dans cette chaîne. Si vous devez utiliser des chemins relatifs, vous pouvez analyser le chemin de ActiveWorkbook.FullName

EDIT: Une meilleure syntaxe serait également

ActiveWorkbook.SaveAs Filename:=myFileName, FileFormat:=xlWorkbookNormal
22
chancea

Le moyen le plus simple d’utiliser cette fonction est de commencer par "Enregistrer une macro". Une fois que vous avez commencé l’enregistrement, enregistrez le fichier à l’emplacement de votre choix, avec le nom de votre choix, puis définissez bien sûr le type de fichier, probablement le "classeur activé par macro Excel" ~ ~ 'XLSM'.

Arrêtez l'enregistrement et vous pouvez commencer à inspecter votre code.

J'ai écrit le code ci-dessous qui vous permet d'enregistrer un classeur en utilisant le chemin d'accès du fichier, en le nommant "Evénement [date dans la cellule" A1 "]

Option Explicit

Sub SaveFile()

Dim fdate As Date
Dim fname As String
Dim path As String

fdate = Range("A1").Value
path = Application.ActiveWorkbook.path

If fdate > 0 Then
    fname = "Event " & fdate
    Application.ActiveWorkbook.SaveAs Filename:=path & "\" & fname, _
        FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Else
    MsgBox "Chose a date for the event", vbOKOnly
End If

End Sub

Copiez le code dans un nouveau module, puis écrivez une date dans la cellule "A1", par exemple. 01-01-2016 -> assigner le sous-marin à un bouton et le lancer. [Note] vous devez créer un fichier de sauvegarde avant que ce script ne fonctionne, car un nouveau classeur est enregistré dans l'emplacement de sauvegarde automatique par défaut!

10
Anders Christensen

Il se peut que votre format par défaut ne corresponde pas à l'extension de fichier. Vous devez spécifier le format de fichier avec le nom du fichier, en vous assurant que le format correspond à l'extension:

With someWorkbook
.SaveAs "C:\someDirector\Awesome.xlsm", fileformat:=xlOpenXMLWorkbookMacroEnabled
End With

OTOH, je ne vois pas d'extension sur votre nom de fichier .SaveAs. Peut-être devrez-vous en fournir un lorsque vous le ferez par programme. Cela a du sens - ne pas avoir à fournir d’extension à partir de l’interface graphique est pratique, mais nous, les programmeurs, devons écrire du code non ambigu. Je suggère d'ajouter l'extension et le format correspondant. Voir cette page msdn pour une liste des formats de fichiers. Pour être honnête, je ne reconnais pas beaucoup les descriptions.

xlExcel8 = 56 est le format .xls

xlExcel12 = 50 est le format .xlsb

xlOpenXMLWorkbook = 51 est le format .xlsx

xlOpenXMLWorkbookMacroEnabled = 52 est le format .xlsm

xlWorkbookDefault est également répertorié avec une valeur de 51, ce qui me laisse perplexe car je pensais que le format par défaut pourrait être modifié.

1
riderBill

Je sais que ceci est un ancien post mais je cherchais quelque chose de similaire ... Je pense que votre problème était que lorsque vous utilisez Now (), le résultat sera "6/20/2014" ... Ceci est un problème pour un fichier nom comme il a "/" dedans. Comme vous le savez peut-être, vous ne pouvez pas utiliser certains symboles dans un nom de fichier.

À votre santé

0
Corey

J'utilise avec succès la méthode suivante dans un fichier,

Mais revenez avec exactement la même erreur ... Seule la dernière ligne affiche une erreur

Newpath = Mid(ThisWorkbook.FullName, 1, _
 Len(ThisWorkbook.FullName) - Len(ThisWorkbook.Name)) & "\" & "ABC - " & Format(Date, "dd-mm-yyyy") & ".xlsm"
ThisWorkbook.SaveAs (Newpath)
0
Isu

Je me débattais, mais le dessous a finalement fonctionné pour moi!

Dim WB As Workbook

Set WB = Workbooks.Open("\\users\path\Desktop\test.xlsx")

WB.SaveAs fileName:="\\users\path\Desktop\test.xls", _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
0
Pedro Luque