我希望根据变量插入包含要插入的行数的行。我从底部向后工作,以避免弄乱行号。代码如下。
Option Explicit
Sub InsertRow()
Dim ws As Worksheet
Dim ColA As Range
Dim RowNo As Integer
Dim i As Integer
Set ws = Worksheets("Sheet1")
Set ColA = ws.Range("A2:A944")
For i = 2 To ColA Step -1
RowNo = Range("B" & ":" & ColA.Row).Value
Rows(RowNo, 0).EntireRow.Insert
Next i
End Sub
问题在于:
RowNo = Range("B" & ":" & ColA.Row).Value
我不确定在范围维度中包含变量的正确语法。
答案 0 :(得分:1)
此代码存在一些问题。
For i = 2 To ColA
无法正常工作。快速解决方案是使用For i = 2 To ColA.Rows.Count
;但是,For i = ColA.Rows.Count To 2 Step -1
)ColA.Row
内部将始终返回范围的第一行,在本例中为2。用于指定范围的串联解析为" B:2",它不是有效地址。RowNo = Range("B" & ":" & ColA.Row).Value
似乎试图从一个范围中读取一个值(" B2"?)。这应该是指定要插入多少行的单元格吗?这是基于您的陈述:根据变量
插入行数
通过将RowNo变量设置为单元格值,然后将该值与Rows(RowNo, 0).EntireRow.Insert
一起使用,输入值实际用于确定插入新行的行。这是意图吗?在这种情况下,代码将在循环的每次迭代中在第2行插入一行(942次)。所以我将假设来自" B2"应该是要插入的行数。
Rows(RowNo, 0).EntireRow.Insert
行不需要列索引。试试这段代码:
Sub InsertRow()
Dim ws As Worksheet
Dim ColA As Range
Dim RowNo As Integer
Dim i As Integer
Set ws = Worksheets("Sheet1")
Set ColA = ws.Range("A2:A944")
RowNo = ColA.Row
' Use cell B2 to set the number of rows to insert
Dim intAddRows As Integer
intAddRows = ws.Range("B2").Value
For i = 1 To intAddRows
ws.Rows(RowNo).EntireRow.Insert
Next i
End Sub
但请注意,在范围ColA
的开头插入行(在本例中为第2行)会将输入范围Range("B2")
向下移动指定的行数。您需要修改代码以从更合适的位置获取行数,可能是这样的:intAddRows = InputBox("Number of rows to insert", "Set rows")
。
更新 - 要添加B列中指定的行数:
Sub insertRows()
Dim ws As Worksheet
Dim RowNo As Integer
Dim lastLine As Integer
Dim i As Integer
Set ws = Worksheets("Sheet1")
lastLine = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For RowNo = lastLine To 2 Step -1
For i = 1 To ws.Cells(RowNo, 2)
ws.Rows(RowNo + 1).EntireRow.Insert
Next i
Next RowNo
End Sub