我是VBA的新手,需要一些帮助。我发现VBA将查看活动单元格的值并插入等于单元格中的值的行数。
我遇到的问题是,这只适用于活动单元格,我有一个列,我希望这个过程能够实现自动化。有谁知道我应该在下面的代码中改变什么?
Sub InsertSome()
Dim i As Integer, n As Integer, m As Long
n = ActiveCell.Value
m = ActiveCell.Row
For i = 1 To n
Rows(m * i + 1).Insert
Next i
End Sub
提前致谢!
答案 0 :(得分:0)
您必须使用Events
。将此代码插入到您希望其工作的工作表的模块中。每次在C列中选择一个单元格时都会运行。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("C:C")) Is Nothing And Target.Value <> "" Then '<-Change "C:C" to your column
Dim i As Integer, n As Integer, m As Long
n = Target.Value
m = Target.Row
For i = 1 To n
Rows(m * i + 1).Insert
Next i
End If
End Sub
答案 1 :(得分:0)
您可以使用其中一个Worksheet
个活动,例如Worksheet_SelectionChange
或Worksheet_Change
个活动。
此外,您不需要拥有这么多变量,您可以使用Target
对象的属性(相当于ActiveCell
)。 同样,您可以一次添加多行(不需要For
循环)。
<强> 代码 强>
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' modify column "A" to your desired column
If Not Intersect(Target, Range("A:A")) Is Nothing Then
' make sure the value is numeric, positive, and you select a single cell
If Target.Value > 0 And Trim(Target.Value) <> "" And IsNumeric(Target.Value) And Target.Cells.Count = 1 Then
' no need for a loop to add 1 row at a time,
' just use the line below to add the number of rows in the Target (acitveCell) at once
Range(Cells(Target.Row + 1, 1), Cells(Target.Row + Target.Value, 1)).EntireRow.Insert
End If
End If
End Sub