3

我在这里发布这个问题是因为我实际上发现了另一个与此类似的问题,“使用 Excel 中的 VBA 在多页中将元素从一页复制到另一页”我仍然有疑问,因为我不确定这将如何工作。不过,我仍然需要将我的数据字段放入一个框架中。

我需要允许用户根据需要添加尽可能多的页面,而一些用户的内容会随之移动,而有些则不会。

有一个字段让用户告诉系统他们需要复制多少次会更好吗?或者我应该只有一个按钮,上面写着“复制此页面”

此外,除了为用户输入复制 UserForm 页面之外,我还需要复制 Excel 工作表以与 Userform 中的每个复制页面相关联的过程。

对此的帮助将不胜感激!

4

1 回答 1

0

设置上限。即用户不能添加超过特定数量的页面。这将确保您不会遇到不可预见的错误。例如,用户不能添加超过 25 页(只是一个示例)请记住,在添加无限工作表时,Excel 在内存方面非常饥饿,因此定义上限是必要的。还想象一下多页中有 100 页。会太乱。

有一个字段让用户告诉系统他们需要复制多少次会更好吗?或者我应该只有一个按钮,上面写着“复制此页面”

我相信你可以同时拥有这两种选择。这将确保

  1. 如果用户想一次性添加 6 个页面,则用户不必按下按钮 6 次。
  2. 如果用户只想添加一个页面,那么用户可以简单地单击该按钮,而不是在文本框中输入“1”,然后单击复制按钮。

此外,除了为用户输入复制 UserForm 页面之外,我还需要复制 Excel 工作表以与 Userform 中的每个复制页面相关联的过程。

  1. 这又不是问题。您可以随时使用Worksheets.Add方法添加更多工作表
  2. 然后,您可以将页面上每个控件的源设置为相应的工作表。

这是一个简单的例子

这将创建页面的副本并将现有文本框复制到新页面并设置它的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

希望这能让你开始......

于 2012-11-29T07:58:04.620 回答