插入具有行数的行以作为变量插入?

时间:2016-06-16 07:12:58

标签: excel excel-vba vba

我希望根据变量插入包含要插入的行数的行。我从底部向后工作,以避免弄乱行号。代码如下。

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

我不确定在范围维度中包含变量的正确语法。

1 个答案:

答案 0 :(得分:1)

此代码存在一些问题。

  1. ColA是范围而不是整数。虽然本身不​​是问题,但这意味着For i = 2 To ColA无法正常工作。快速解决方案是使用For i = 2 To ColA.Rows.Count;但是,
  2. 向后工作是有意义的,所以这意味着您需要执行For循环,从较高的数字到较低的数字(For i = ColA.Rows.Count To 2 Step -1
  3. for循环ColA.Row内部将始终返回范围的第一行,在本例中为2。用于指定范围的串联解析为" B:2",它不是有效地址。
  4. 目前尚不清楚为什么代码RowNo = Range("B" & ":" & ColA.Row).Value似乎试图从一个范围中读取一个值(" B2"?)。这应该是指定要插入多少行的单元格吗?这是基于您的陈述:
  5.   

    根据变量

    插入行数

    通过将RowNo变量设置为单元格值,然后将该值与Rows(RowNo, 0).EntireRow.Insert一起使用,输入值实际用于确定插入新行的行。这是意图吗?在这种情况下,代码将在循环的每次迭代中在第2行插入一行(942次)。所以我将假设来自" B2"应该是要插入的行数。

    1. Rows(RowNo, 0).EntireRow.Insert行不需要列索引。
    2. 试试这段代码:

      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