Erreur lors de la fermeture d'un classeur ouvert dans VBA Userform
Dans une sous-routine, je veux ouvrir un classeur, faire un peu de lecture, puis fermez-le.
Pour une raison quelconque, j'obtiens une erreur:
Run-time error '1004':
Method 'Close' of object _Workbook failed
J'ai identifié un minime fragment de code pour reproduire le problème.
Créer un nouveau fichier excel. En cela, créer un Userform. Sur ce, créer un Bouton de Commande à la suivante Cliquez sur le code d'événement:
Private Sub CommandButton1_Click()
Dim filename As String
Dim opened_workbook As Workbook
filename = Application.GetOpenFilename() ' User selects valid Excel file
Set opened_workbook = Application.Workbooks.Open(filename)
' File operations would occur here
opened_workbook.Close ' Exception thrown here
MsgBox "If you got here, it worked!"
Unload Me
End Sub
Vraiment ce qui me confond, c'est que cette erreur ne se produit pas avec le même code lorsque le bouton de Commande n'est pas sur un userform (sur un simple bouton droit sur la feuille de calcul).
Je ne sais même pas quoi d'autre à signaler, ou où regarder pour expliquer ce comportement, en plus de StackOverflow!). Je suis en train d'écrire à l'aide de VBA Excel pour Mac 2011 et peut se déplacer vers Windows Excel 2010 si cela fait une différence.
- FWIW, votre code semble fonctionner pour moi sur Windows Excel 2010 avec un formulaire utilisateur (et aussi en tant que code clair).
- Darn 🙁 je suppose que je devrais tester sur Windows moi maintenant. Bien que je serais ravi de voir une solution qui fonctionne pour Windows et Mac.
Vous devez vous connecter pour publier un commentaire.
Oui, dans Excel 2011, c'est un bug (sans-papiers - je n'ai pas trouvé de documentation pour encore). Vous avez de modifier légèrement le code. Essayez cette
Unload Me
en-dessous de laDim
déclarations et il fonctionne. Merci!!!! (J'ai aussi ajouté quelquesScreenUpdating = False
/True
lignes pour l'adoucir un peu).J'ai eu exactement ce problème sur Excel 11 sur Mac (a bien Fonctionné Excel 2013 sur Windows), seule l'erreur s'est produite dans un module sous qui a été appelé à partir de l'objet UserForm.
Si quelqu'un (comme moi) est d'essayer d'utiliser le classeur.proche de la méthode à partir d'un sous/fonction dans un module (ou un autre emplacement) qui n'est pas à l'intérieur de l'objet UserForm lui-même, vous ne pouvez pas utiliser "Moi". "Moi" n'est utilisable qu'à l'intérieur de l'objet UserForm code lui-même.
Au lieu de "Unload Me" utilisation de déchargement, la fonction et le nom de votre objet UserForm.