Comment faire pour forcer SaveAs au lieu d'Enregistrer
Je veux éviter à l'utilisateur de sauvegarder le classeur avec le même nom et qu'il est ouvert avec, et de proposer SaveAs option.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If ThisWorkbook.Name = "abc" Then
Cancel = True
SaveAsUI = True
End If
Aussi essayé
If ThisWorkbook.Name = "abc" Then SaveAsUI = True
Ce code ne fonctionne pas. Boîte de dialogue enregistrer sous n'apparaît pas.
À côté essayer
If ThisWorkbook.Name = "abc" Then ThisWorkbook.ReadOnly = True
'Error - can't assign to read only property.
- Définissez l'attribut de l'classeur en lecture seule pour forcer un
SaveAs
. Cette méthode signifie que vous êtes protégé sans compter sur VBA manipulation. - veuillez voir ma mise à jour de question.
ThisWorkbook.ReadOnly
est un attribut de lecture seule (voir la f1-aide) - vous devez utiliser une autre méthode afin de rendre le classeur en lecture seule, par exemple, mesWorkbooks.Open
suggestion ouChangeFileAccess
réponse de @brettdj ci-dessous.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez tester pour un nom de fichier uniquement - dire
abc.xlsm
puis le code ci-dessous va s'arrêter laSave
(mais passeSaveAs
) puis de définir laReadOnly
attribut FalseSave
ne peut pas être utilisé à nouveau sur ce dossier au cours de cette sessionJ'ai deux suggestions, mais dans le but de savoir qui est le meilleur que vous avez à nous dire plus de détails sur le code environnant et comment vous ouvrir/créer des fichiers etc.
Utiliser un modèle. Si vous mettez votre code dans un modèle et ajouter un nouveau classeur, il ne peut être sauvé sans la boîte de dialogue enregistrer sous.
Faire le classeur en lecture seule lors de l'ouverture. Cela peut être fait dans beaucoup de façons, en fonction de la conception de votre projet (par exemple
Workbooks.Open
avecReadOnly
paramètre).Workbook.Open
événementL'autre réponse (lecture seule ou d'un modèle) sont à la fois bonnes suggestions
Toutefois, si vous voulez vraiment de code, essayez cette
Remarque: codé pour Excel 2007/2010 (
If ThisWorkbook.Name "abc.xlsm" Then
)Vous woill besoin de changer si vous utilisez Excel 2003