我有一个表格,它接受用户输入数据并从数据中填充表格的其余部分。到目前为止,我已经创建了一个自动从用户数据填充表格的宏。
我想让用户输入他们想要运行宏的次数(因为每个表显示一天的输入)但是每次宏运行时它只是填充相同的空间并且不显示多天的表。
不知道您的宏,假设您有一个通用宏,将用户输入存储在列中:
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
当然,如果您愿意,您也可以将两者组合成一个更大的宏 - 但尤其是。对于较大的宏,最好将其拆分为较小的过程。