我用动态页面创建了一个多页面。启动用户窗体时,如果列中的特定单元格为空,则用户窗体会检查它们的值。然后为每个非空单元格创建一个页面。
这是我的代码段
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
现在我的问题是如何将值从单元格放到从引用隐藏页面复制到动态创建的新页面的文本框中。我昨晚刚开始编程VBA。我是一个Android应用程序开发人员,所以现在很难调整。
答案 0 :(得分:2)
我认为这是你在尝试的?
粘贴控件后,试试这个
'
'~~> 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
关注(来自评论)
如果您有多个相同类型的Controls
,那么我不想复制和粘贴,而是从头开始重新创建它们。这使我可以更好地控制Controls
但是,如果您仍想使用“复制 - 粘贴”方法,请使用.Tag
属性。见这个例子
创建用户表单,如下面的快照所示。
在页面(0)中为每个文本框设置标签。
让我们在userform
中使用此代码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