2017-10-15 24 views
0

J'ai un seul formulaire utilisateur avec 3 pages de «niveau supérieur» (en utilisant la fonctionnalité multipage), puis 4 pages imbriquées chacune dans 2 des pages de niveau supérieur. Voir l'exemple d'image ci-dessous. J'ai du mal à faire référence par programmation aux pages imbriquées.EXCEL VBA: Sélection de pages spécifiques dans un Userform lorsque plusieurs pages sont imbriquées

Screenshot of Nested Multipage Userform

Dans cet exemple, les sous-titres et les noms page sont les mêmes. Par conséquent, la page avec la légende de Page4 est également nommée Page4. J'ai trouvé quelqu'un autre code de ligne qui est censé retourner l'index de page lorsque le nom de la page lui est passée:

===

Fonction fMpIndex (ByVal PageName As String)

Dim PageCounter As Long 

    With MultiPage1 

     For PageCounter = 0 To .Pages.Count - 1 

     If .Pages(PageCounter).Name = PageName Then fMpIndex = PageCounter: Exit Function 
     Next PageCounter 
    End With 
fMpIndex = -1 

Fin fonction

===

Cela fonctionne très bien pour les pages de haut niveau, cependant, lorsque je tente quelque chose comme:

MsgBox ("Ce index de page est" & fMpIndex ("Page5"))

pour l'une des pages imbriquées (dans cet exemple, les deux pages 4 & 5), cette méthode renvoie une valeur de -1 , indiquant que la page n'existe pas, mais évidemment c'est le cas. Est-ce un problème de portée? Est-ce que le code ci-dessus ne recherche que les pages de niveau supérieur et non les pages imbriquées?

Quelle est la manière la plus sûre et la plus fiable de référencer par programme une page spécifique par son nom, sa légende ou les deux? Je suppose que ce serait quelque chose comme:

qui userform.which la page strip.which page.name (« Page5 »)

Dans cet exemple, je ne dispose que 1 userform, mais je veux savoir: si J'ai eu 2 userforms? De plus, dans l'exemple ci-dessus, je suppose déjà que l'on doit spécifier laquelle des 2 bandes de page est référencée ... c'est une supposition pour le moment de ma part et peut-être pas nécessaire.

Idéalement, je veux un moyen d'utiliser une référence absolue à chaque page dans le formulaire utilisateur, qu'il s'agisse d'une page de niveau supérieur ou d'une page imbriquée. Si c'est en effet quelque chose comme la spécification ci-dessus, quelqu'un peut-il s'il vous plaît fournir un exemple de code?

Merci,

Dan

Répondre

0

Dans la capture d'écran, les seules pages MultiPage1 sont Page1, Page2 et Page3. Ceux-ci peuvent être référencés en utilisant (par exemple) MultiPage1.Pages("Page1"). MultiPage1.Pages("Page4") n'existe pas.

Page1 contient MultiPage2, et ses pages sont Page4 et Page5. Ceux-ci peuvent être des références utilisant MultiPage2.Pages("Page4").

Vous pouvez référencer des pages dans un contrôle MultiPage par index, comme dans MultiPage1.Pages(iPageIndex), où iPageIndex passe de 0 au nombre de pages moins un. Dans votre capture d'écran, MultiPage1.Pages(1) références Page2, et MultiPage2.Pages(0) références Page4.