2010-02-17 5 views
2

Je suis en train d'écrire une macro VBA dans Excel qui est censé ouvrir "fileB.xls", puis fermer immédiatement après son ouverture. Puisque nous allons parler de 3 fichiers Excel, je vais appeler le premier fichier A.VBA "ThisWorkbook.Close" Ne ferme pas ce classeur!

Le code des boutons du formulaire utilisateur pour le fichier A ressemble à ceci. Une fois que "fichierB.xls" s'ouvre, il lance un formulaire pour collecter des informations sur l'utilisateur.

Cependant, le fichier d'origine ne se ferme pas après l'ouverture de "fileB.xls".

Sub Workbook_Open() 
    'Code in FileB ' 
    'Display a form to obtain information from the user. ' 
    frmOpenFile.Show 
End Sub 

Il peut être intéressant de noter que fileB ouvre un troisième et dernier fichier Excel (FileC). Le code similaire au code de FileA est utilisé dans FileB et fonctionne correctement lors du lancement de FileC (FileB se ferme bien). L'idée est qu'il existe un fichier "maître" dans lequel vous choisissez le formulaire que vous devez remplir. Ce fichier maître se ferme ensuite et permet à l'utilisateur de remplir le formulaire, et en fonction de l'entrée de l'utilisateur, un fichier Excel final est ouvert. Donc, juste pour réitérer le problème, FileA s'ouvre, lance un userform, l'utilisateur clique sur un bouton, File B démarre, FileA ne se ferme pas quand il le faut.

Je serais reconnaissant pour toute aide!

EDIT: Je dois noter que si vous réécrivez FileA pour ouvrir directement FileC, FileA se ferme correctement. L'utilisateur peut-il former à partir de FileB empêcher le fichier A de fermer?

Répondre

4

Oui, il est le userform. La forme d'utilisateur dans le fichier C est non modale. C'est l'inverse de celui du fichier B. Lorsque le fichier B s'ouvre, le formulaire utilisateur s'ouvre et toute l'exécution du code s'arrête jusqu'à sa fermeture. Avec le fichier C, l'exécution du code se poursuit. Si vous modifiez les propriétés de formulaire utilisateur ShowModal à False du fichier B, elles fonctionneront de la même manière.

Dans le VBE, ouvrez le Userform en question et appuyez sur F4 pour ouvrir la boîte de dialogue Propriétés. Trouvez la propriété ShowModal et passez à False.

+1

Vous, monsieur, êtes un Dieu parmi les hommes. Je m'étais cogné la tête contre cela pendant la majeure partie de la matinée. – Sumason

0

Si votre classeur FileA a été modifié, l'utilisateur sera invité à enregistrer le classeur.

Ceci peut être caché à la vue en fonction du code que vous utilisez.

Pour éviter cette invite, tant que vous n'avez pas besoin d'enregistrer les modifications, ce code fonctionnera:

ThisWorkbook.Close SaveChanges = False 
+0

Merci pour l'aide. Malheureusement, le problème persiste, mais je devrais vraiment l'avoir ici, ne jamais savoir ce que les utilisateurs pourraient faire. – Sumason

+0

Si vous avez besoin d'enregistrer les modifications, changez simplement les changements de saveur en true. – guitarthrower

Questions connexes