如何dynamic地将单元格值放入excel的多页文本框中?

我创build了一个包含dynamic页面的多页面。 当用户窗体启动时,用户窗体检查列中特定单元格上的值是否为空。 然后为每个非空单元格创build一个页面。

这是我的代码片段

Private Sub UserForm_Initialize() Dim i As Integer Dim custDate As Date Dim vID As String 'ActiveWorkbook.Worksheets("Sheet1").Activate i = 0 custDate = DateValue(Now) Range("A1").Offset(1, 0).Select Do While Not IsEmpty(ActiveCell.Value) 'MsgBox ActiveCell.Address If custDate = ActiveCell.Value Then 'first column(A) are dates MultiPage1.Pages.Add MultiPage1.Pages(0).Controls.Copy 'page 1 is the reference page i = i + 1 'row counter ActiveCell.Offset(0, 2).Select 'go to column(C) on the same row where visit ids are located vID = ActiveCell.Value MultiPage1.Pages(i).Paste 'copy page 1 contents to new page for each row on the active worksheet 'I guess this is where you put the code to put values 'on a txtbox that was from the reference page which is page 1 ActiveCell.Offset(0, -2).Select 'go back to column(A) to check back dates End If ActiveCell.Offset(1, 0).Select 'move to the next row Loop MultiPage1.Value = i 'select the new page on the userform End Sub 

现在我的问题是如何将值从一个单元格的文本框,从参考隐藏页面复制到dynamic创build的新页面。 我刚刚开始编程VBA昨晚。 我是一个Android应用程序开发人员,所以在这个时候很难调整。

我想这是你正在尝试的?

粘贴控件后,试试这个

 ' '~~> Rest of your code ' MultiPage1.Pages(i).Paste For Each ctl In Me.MultiPage1.Pages(i).Controls If TypeOf ctl Is MSForms.TextBox Then '~~> Your code here ctl.Text = vID Exit For End If Next ' '~~> Rest of your code ' 

另外声明这是你的代码的顶部

 Dim ctl As Control 

跟随(从评论)

如果你有多个相同types的Controls ,我宁愿不要复制和粘贴,而是从头开始重新创build它们。 这使我更好地控制这些Controls

但是,如果您仍想使用“复制粘贴”方法,请使用.Tag属性。 看到这个例子

创build一个用户窗体,如下面的快照所示。

在Page(0)中为每个文本框设置标签。

在这里输入图像描述

让我们在用户表单中使用这个代码

 Option Explicit Dim ctl As Control Private Sub CommandButton1_Click() Debug.Print "Page (0):-" For Each ctl In Me.MultiPage1.Pages(0).Controls If TypeOf ctl Is MSForms.TextBox Then Debug.Print ctl.Name; "==="; ctl.Tag End If Next Debug.Print "---" Debug.Print "Page (1):-" MultiPage1.Pages(0).Controls.Copy MultiPage1.Pages.Add MultiPage1.Pages(1).Paste For Each ctl In Me.MultiPage1.Pages(1).Controls If TypeOf ctl Is MSForms.TextBox Then Debug.Print ctl.Name; "==="; ctl.Tag End If Next Debug.Print "---" Debug.Print "Page (2):-" MultiPage1.Pages.Add MultiPage1.Pages(2).Paste For Each ctl In Me.MultiPage1.Pages(2).Controls If TypeOf ctl Is MSForms.TextBox Then Debug.Print ctl.Name; "==="; ctl.Tag End If Next End Sub 

当你运行代码时,你会在屏幕上看到这个输出

在这里输入图像描述

如果您注意到.Tag不会更改。 所以如果我们有更多的控制,我们可以有效地使用这个 看到这个例子

 Option Explicit Dim ctl As Control Private Sub CommandButton1_Click() MultiPage1.Pages(0).Controls.Copy MultiPage1.Pages.Add MultiPage1.Pages(1).Paste For Each ctl In Me.MultiPage1.Pages(1).Controls If TypeOf ctl Is MSForms.TextBox Then Select Case ctl.Tag Case "A" '~~> Your code goes here to put text in this textbox ctl.Text = "AAAA" Case "B" '~~> Your code goes here to put text in this textbox ctl.Text = "BBBB" End Select End If Next End Sub 

当你运行它,你会得到

在这里输入图像说明

HTH