多次初始化UserForm

时间:2015-11-02 09:43:30

标签: excel vba excel-vba for-loop userform

对于我正在处理的项目,我正在编写UserForm以通过向将使用该工作表的人询问某些数据来填写Excel文件。需要多个集合所需的数据才能获得相同类型的数据。因此,我希望多次弹出一个UserForm来填充Excel文件中不同位置的数据。关于我希望程序执行的操作的简短分步指南如下:

  1. 询问数据集的数量( i )。
  2. 从第1组复制预设的Excel单元格并将它们粘贴在彼此之下,直到它们到达 i 集合。
  3. 要求用户在第1组中填写数据,然后让UserForm将其填入第1组的单元格中。
  4. 对每个数据集重复步骤3,直到填写 i ,然后卸载UserForm。
  5. 步骤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。我必须使用的许多代码来自其他人,我的联系方式不是。

1 个答案:

答案 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

这可能不是屡获殊荣的编码,但它可以解决问题。