Pour ceux qui sont à la recherche de cela dans le futur, voici la solution complète en utilisant le code de Robin (Merci!), Mais placez une classe pour les pages créées lors de l'exécution. Je ne colle que le code pertinent à cette question, la procédure CopyPage peut également être appelée par l'utilisateur pour ajouter des pages pendant l'exécution. Maintenant, l'utilisateur peut également les déplacer à gauche et à droite entre les pages 2 (index 1) et n.
Dans mon module principal:
Public arrLeftButton() As New CButton
Public arrRightButton() As New CButton
Dans mon CButton Module de classe:
Option Explicit
Public WithEvents CopyButton As MSForms.CommandButton
Public WithEvents DeleteButton As MSForms.CommandButton
Public WithEvents MoveLeft As MSForms.CommandButton
Public WithEvents MoveRight As MSForms.CommandButton
Private Sub MoveLeft_Click()
Dim pag As MSForms.Page
Dim lngPageCount As Long
Set pag = UFmodproject.MultiPage1.SelectedItem
lngPageCount = UFmodproject.MultiPage1.Pages.Count
If pag.Index > 1 Then
pag.Index = pag.Index - 1
End If
End Sub
Private Sub MoveRight_Click()
Dim pag As MSForms.Page
Dim lngPageCount As Long
Set pag = UFmodproject.MultiPage1.SelectedItem
lngPageCount = UFmodproject.MultiPage1.Pages.Count
If pag.Index < lngPageCount - 1 Then
pag.Index = pag.Index + 1
End If
End Sub
Et mon UserForm_Initialize:
Private Sub userform_initialize()
ReDim Preserve arrLeftButton(1 To 1)
ReDim Preserve arrRightButton(1 To 1)
Set arrLeftButton(1).MoveLeft = MultiPage1.Pages(1).Controls("MoveLeft1")
Set arrRightButton(1).MoveRight = MultiPage1.Pages(1).Controls("MoveRight1")
For i = 2 To GetINIString("Project", "NumberOfShipmentTypes", strINIPATH)
Call FormControls.CopyPage
Next
End Sub
Pourtant, dans un autre module standard, il peut donc être appelé d'ailleurs aussi:
Sub CopyPage()
Dim l As Double, r As Double
Dim Ctrl As Control
Dim newCtrl As Object
Dim pCount As Long
pCount = UFmodproject.MultiPage1.Pages.Count
'[...add pages and copy all controls]
For Each newCtrl In UFmodproject.MultiPage1.Pages(pCount).Controls
If Left(newCtrl.Name, Len(newCtrl.Name) - 1) = "MoveLeft" Then
ReDim Preserve arrLeftButton(1 To pCount)
Set arrLeftButton(pCount).MoveLeft = newCtrl
End If
If Left(newCtrl.Name, Len(newCtrl.Name) - 1) = "MoveRight" Then
ReDim Preserve arrRightButton(1 To pCount)
Set arrRightButton(pCount).MoveRight = newCtrl
End If
Next
End Sub
Merci beaucoup Robin, parfait. Donc Page.Index existe, je devais juste déclarer la page comme un objet séparé d'abord, correct? Depuis que mes pages sont créées au moment de l'exécution, j'ai dû modifier pour coder un peu et mettre dans une classe. Je posterai la solution dans un edit à la question, j'espère que c'est la procédure appropriée ici. Merci. –
Salut - content que cela a aidé. Vous pouvez poster une réponse à votre propre question si vous avez une mise à jour de code qui résout votre problème. C'est probablement une meilleure option plutôt que de changer la question. –
@RobinMackenzie sympa :) –