J'ai actuellement construit un outil dans Excel 2003 qui affiche une série de formulaires de saisie de données. Le client a demandé qu'il y ait des boutons «Formulaire précédent» et «Formulaire suivant» sur les formulaires.Ouverture répétée de formulaires utilisateur à partir d'un userform - provoque des problèmes d'objet
Le code utilisé pour se déplacer entre les formes est la suivante
Sub NextForm(strFormName As String)
Dim intCurPos As Integer
Dim strNewForm As String
'Find out which form we are currently on from a list in a range
intCurPos = WorksheetFunction.Match(strFormName, Range("SYS.formlist"), 0)
If intCurPos = WorksheetFunction.CountA(Range("SYS.formlist")) Then
'We want to use the first one
intCurPos = 0
End If
'Get the name of the form to open
strNewForm = WorksheetFunction.Index(Range("SYS.formlist"), intCurPos + 1)
'Load the form into the Userforms Collection
Set newForm = VBA.UserForms.Add(strNewForm)
'Show the form
newForm.Show
End Sub
La question que j'ai est que lorsque vous faites cela 25 fois (oui je sais) le système se bloque. Je me rends compte que c'est parce que chaque fois que vous arrivez à la ligne newForm.Show ci-dessus le code ne se termine pas et reste donc en mémoire.
Les formulaires sans modèle arrêteraient ce problème mais l'utilisateur pourrait alors charger d'autres formulaires et faire d'autres choses qui pourraient causer des problèmes majeurs.
Quelqu'un a-t-il des suggestions pour vous aider? D'une manière ou d'une autre, pour forcer l'exécution du code, mais ne pas arrêter la capacité modale du formulaire?
Plan rapproché mais appréciez toute aide.
Les 25 formulaires doivent-ils être ouverts? Avez-vous essayé de décharger un formulaire, puis ouvrez le suivant? – CaBieberach
Avez-vous envisagé d'utiliser le contrôle MultiPage sur votre userform, c'est-à-dire de charger un userform et d'utiliser Next et Back pour parcourir les onglets sur MultiPage ... –
@CaBieberach: Chaque formulaire est déchargé avant l'ouverture du suivant. Cependant le point de code où le traitement s'est arrêté pour le Formulaire 1 reste en mémoire, et ainsi de suite pour les autres 24. Ce n'est que lorsque le formulaire final est fermé qu'Excel revient pour exécuter le code (qui est dans ce cas un Exit Sub) . –