我有一个表,它接收用户输入数据并从数据填充表的其余部分。到目前为止,我已经创建了一个宏,可以根据用户数据自动填充表格。
我想让用户输入他们想要运行宏的次数(因为每个表显示一天的输入值)但是每次宏运行时它只填充相同的空间并且不显示多个几天的桌子。
答案 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
当然,如果你想要,你也可以将它们组合成一个更大的宏 - 但尤其是。对于较大的宏,最好将其拆分为较小的程序。