设置上限。即用户不能添加超过特定数量的页面。这将确保您不会遇到不可预见的错误。例如,用户不能添加超过 25 页(只是一个示例)请记住,在添加无限工作表时,Excel 在内存方面非常饥饿,因此定义上限是必要的。还想象一下多页中有 100 页。会太乱。
有一个字段让用户告诉系统他们需要复制多少次会更好吗?或者我应该只有一个按钮,上面写着“复制此页面”
我相信你可以同时拥有这两种选择。这将确保
- 如果用户想一次性添加 6 个页面,则用户不必按下按钮 6 次。
- 如果用户只想添加一个页面,那么用户可以简单地单击该按钮,而不是在文本框中输入“1”,然后单击复制按钮。
此外,除了为用户输入复制 UserForm 页面之外,我还需要复制 Excel 工作表以与 Userform 中的每个复制页面相关联的过程。
- 这又不是问题。您可以随时使用
Worksheets.Add
方法添加更多工作表
- 然后,您可以将页面上每个控件的源设置为相应的工作表。
这是一个简单的例子
这将创建页面的副本并将现有文本框复制到新页面并设置它的ControlSource
属性。
截屏
前
后
代码
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
这是另一个示例,您实际上可以创建一个新控件并设置它的ControlSource
属性,而不是复制控件。
截屏
(同上)
代码
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
希望这能让你开始......