Permettre à un user de dupliquer une page dans une forme de formulaire Excel Multi-page

Je publie cette question ici parce que j'ai trouvé une autre question semblable à celle-ci, "Copier les éléments d'une page à l'autre en multipage avec VBA dans Excel" J'ai toujours des questions car je ne suis pas sûr de la façon dont cela fonctionnera. Je devrais encore mettre mes champs de données dans un cadre.

Je dois permettre à l'user d'append autant de pages que nécessaire, alors que certains des contenus de l'user vont se déplacer et certains ne le seront pas.

Serait-il préférable d'avoir un domaine où l'user indique au système combien de fois ils doivent en doubler? Ou dois-je simplement avoir un button qui dit, "dupliquer cette page"

En outre, en plus de la page UserForm étant dupliquée pour l'input de l'user, j'ai besoin du process pour également dupliquer la feuille de calcul Excel pour assortir avec chaque page dupliquée dans le formulaire Userform.

L'aide à ce sujet sera grandement appréciée !!

Réglez un cap supérieur. c'est-à-dire qu'un user ne devrait pas pouvoir append plus d'un nombre spécifique de pages. Cela garantirait que vous ne rencontrez pas d'erreurs imprévues. Par exemple, l'user ne devrait pas pouvoir append plus de 25 pages (juste un exemple). Souvenez-vous, Excel a très faim en termes de memory lorsqu'il s'agit d'append des feuilles de travail illimitées et, par conséquent, la définition d'un cap supérieur est nécessaire. Aussi, imaginez avoir dit 100 pages dans la page multiple. Ce serait trop dérangé.

Serait-il préférable d'avoir un domaine où l'user indique au système combien de fois ils doivent en doubler? Ou dois-je simplement avoir un button qui dit, "dupliquer cette page"

Je crois que vous pouvez avoir les deux options. Cela garantira que

  1. Si l'user souhaite append 6 pages en une seule fois, l'user ne doit pas appuyer sur le button 6 fois.
  2. Si l'user veut append une seule page, l'user peut simplement cliquer sur ce button, au lieu de taper «1» dans une textbox, puis cliquer sur le button dupliqué.

En outre, en plus de la page UserForm étant dupliquée pour l'input de l'user, j'ai besoin du process pour également dupliquer la feuille de calcul Excel pour assortir avec chaque page dupliquée dans le formulaire Userform.

  1. Ceci n'est pas un problème. Vous pouvez toujours utiliser la méthode Worksheets.Add pour append plus de feuilles
  2. Vous pouvez ensuite définir la source de chaque contrôle sur la page sur les feuilles respectives.

Voici un exemple simple

Cela créera une copy de la page et copyra la boîte de text existante vers la nouvelle page et définira sa propriété ControlSource .

CAPTURE D'ÉCRAN

AVANT

entrez la description de l'image ici

APRÈS

entrez la description de l'image ici

CODE

 Option Explicit Private Sub CommandButton1_Click() Dim pgCount As Long Dim wsNew As Worksheet Dim ctl As Control '~~> Get the current count of the pages pgCount = MultiPage1.Pages.Count '~~> Add a new page MultiPage1.Pages.Add '~~> Change '0' to whatever page you want to copy from MultiPage1.Pages(0).Controls.Copy '~~> Paste it in the newly created multipage MultiPage1.Pages(pgCount).Paste '~~> Add a new sheet Set wsNew = ThisWorkbook.Sheets.Add '~~> Give the new sheet a name wsNew.Name = "Erika" '~~> Adding a test value in Range A1 so that it reflects '~~> When we set the ControlSource of the textbox wsNew.Range("A1").Value = "Hello World" For Each ctl In MultiPage1.Pages(pgCount).Controls If TypeOf ctl Is MSForms.TextBox Then ctl.ControlSource = wsNew.Range("A1").Address Exit For End If Next End Sub 

Voici un autre exemple où, au lieu de copyr le contrôle, vous pouvez réellement créer un nouveau contrôle et configurer sa propriété ControlSource .

CAPTURE D'ÉCRAN

(Comme ci-dessus)

CODE

 Option Explicit Private Sub CommandButton1_Click() Dim pgCount As Long Dim wsNew As Worksheet Dim ctl As Control '~~> Get the current count of the pages pgCount = MultiPage1.Pages.Count '~~> Add a new page MultiPage1.Pages.Add '~~> Add a new textbox Set ctl = MultiPage1.Pages(pgCount).Controls.Add("Forms.TextBox.1", _ "TextBox" & pgCount) '~~> Add a new sheet Set wsNew = ThisWorkbook.Sheets.Add '~~> Give the new sheet a name wsNew.Name = "Erika" '~~> Adding a test value in Range A1 so that it reflects '~~> When we set the ControlSource of the textbox wsNew.Range("A1").Value = "Hello World" ctl.ControlSource = wsNew.Range("A1").Address End Sub 

J'espère que cela vous permet de commencer …