在工作表上多次运行宏

时间:2013-02-18 04:29:53

标签: vba loops excel-vba excel

我有一个表,它接收用户输入数据并从数据填充表的其余部分。到目前为止,我已经创建了一个宏,可以根据用户数据自动填充表格。

我想让用户输入他们想要运行宏的次数(因为每个表显示一天的输入值)但是每次宏运行时它只填充相同的空间并且不显示多个几天的桌子。

1 个答案:

答案 0 :(得分:0)

不知道您的宏,我们假设您有一个通用宏,用于在一列中存储用户输入:

Sub InputMacro()
    Range("B1:B100").Value = InputBox("What do you want to store in column B")
End Sub

如果你想循环使用它,首先需要参数化宏,即在每个循环步骤中使部件变得灵活。例如。如果要运行多个列,可以执行以下操作:

Sub InputMacro_new(intColNumber As Integer, Optional lngRowNumber As Long = 100)
    Cells(1, intColNumber).Resize(lngRowNumber) = _
        InputBox("What do you want to store in column " & _
        Split(Cells(1, intColNumber).Address, "$")(1))
End Sub

现在接受参数intColNumber,即您可以调用InputMacro_New 2来填充B列。请注意,我还提供了可选参数 lngRowNumber默认值为100.您不需要提供此参数 - 但如果您需要,可以覆盖默认值,例如InputMacro_New 2, 50

现在,您可以在另一个调用宏的宏中创建一个循环:

Sub MyLoop()
    Dim intCol As Integer, varMaxCols As Variant
    varMaxCols = InputBox("How many columns do you want to fill?")

    If Not IsNumber(varMaxCols) Then Exit Sub
    ElseIf varMaxCols < 1 Or varMaxCols > 255 Then Exit Sub

    For intCol = 1 To varMaxCols
        InputMacro_new intCol
    Next intCol

End Sub

当然,如果你想要,你也可以将它们组合成一个更大的宏 - 但尤其是。对于较大的宏,最好将其拆分为较小的程序。