对于我正在处理的项目,我正在编写UserForm以通过向将使用该工作表的人询问某些数据来填写Excel文件。需要多个集合所需的数据才能获得相同类型的数据。因此,我希望多次弹出一个UserForm来填充Excel文件中不同位置的数据。关于我希望程序执行的操作的简短分步指南如下:
步骤1和2没有问题,但我在这些步骤之后拥有的是以下代码。我希望有一种方法可以为 i 的每个值初始化UserForm,它可能应该包含在For循环中,然后再转到下一个 i 。它应该是每次都是相同的UserForm,因为每个集合所需的数据包含相同的内容,只包含其他值。
Private Sub UserForm_Initialize()
For i = 1 To Sheet4.Cells(5, 4)
If Sheet4.Cells(5, 4) = 1 Or i = 1 Then
LastCrossing = "Crossing"
Else
LastCrossing = "Crossing " & i
End If
Set CrossingLoc = Sheet4.Cells.Find(What:=LastCrossing, After:=Sheet4.Cells(1, 1), LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
CaptString = i
UserForm10.Caption = "Crossing " & CaptString
CrossingLoc = CrossingLoc.Row + 3
If Sheet4.Cells(CrossingLoc, 4) = "" Then
i = Sheet4.Cells(5, 4)
End If
Next i
End Sub
是否可以为1到 i 的每个集合多次加载UserForm?如果是这样,你能解释一下我是怎么做到的吗?
也许解决方法是每次在UserForm结束时加载一个新的UserForm,直到 i 已被填充?
P.S。我必须使用的许多代码来自其他人,我的联系方式不是。
答案 0 :(得分:0)
我找到了一种方法,可以在一个UserForm上创建一个循环,要求用户填写金额i
。然后在此循环中运行下一个UserForm,其中询问集i
的所有数据。将其填入并点击CommandButton
然后会将此循环返回到i
的下一个值。
这样,问题中编码的标题也会发生变化。
If i = 1 Then
Selection.Replace What:="Crossing*", Replacement:="Crossing " & i, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
Application.CutCopyMode = False
Range("A1").Select
Range("E4").Value = 1
UserForm13.Show
End If
ElseIf i > 1 Then
' Fill in 01
Range("E4").Value = 1
UserForm13.Show
End If
' Fill in Pipes 02 - i
For i = 2 To TextBox1.Value
CrossingLoc.Select
Selection.Copy
ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Offset(3, 0).PasteSpecial
Selection.Replace What:="Crossing*", Replacement:="Crossing " & i, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
Range("E4").Value = i
UserForm13.Show 'The UserForm that has to be repeated.
End If
Next i
这可能不是屡获殊荣的编码,但它可以解决问题。