1

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

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

4

1 回答 1

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

当然,如果您愿意,您也可以将两者组合成一个更大的宏 - 但尤其是。对于较大的宏,最好将其拆分为较小的过程。

于 2013-02-18T07:32:23.180 回答