代码之家  ›  专栏  ›  技术社区  ›  Ahmad

在Excel中使用xlDown插入的附加行

  •  0
  • Ahmad  · 技术社区  · 14 年前

    我定义了以下宏,它将行插入到工作表中。在指定的起始地址插入行之后,各种范围将转换为表。我最初的想法是,问题在于 xlDown

    目前,我有7个这样的范围,但问题是,前三个总是有一个额外的行插入-这是以前没有问题的工作,所以事实上,它的行为不端是一个谜我。

    其余范围正确。这个 tableStartAdress rowsToInsert 这个例子总是38。

    Sub InsertTableRows(tableStartAdress As String, rowsToInsert As Integer)
        Dim i As Integer
        Dim rowToCopy As String
    
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
    
        Application.DisplayAlerts = False
        Range(tableStartAdress).Offset(1, 0).Rows.Copy
    
        rowToCopy = Range(tableStartAdress).Offset(1, 0).row & ":" & _           
                       Range(tableStartAdress).Offset(1, 0).row
    
        Rows(rowToCopy).Select
        Selection.Copy
    
        Range(tableStartAdress).Offset(1, 0).Select
        ActiveCell.Resize(rowsToInsert, 1).Select
    
        Selection.Insert Shift:=xlDown
        Application.CutCopyMode = False
    
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
    
    End Sub
    

    下面的图片描述了我的意思。

    How the wkSheet looks before date population .

    填充数据后,前三个范围/表有一个额外的行

    Extra Rows , Extra Row

    其余的都是对的

    Correct blank stuff

    1 回复  |  直到 6 年前
        1
  •  1
  •   Nick Spreitzer    14 年前

    我建议先简化代码。(可能有助于你追踪出问题的地方。)因为你不需要在处理之前选择一个范围。。。。

    rowToCopy = Range(tableStartAdress).Offset(1, 0).Row & _
        ":" & Range(tableStartAdress).Offset(1, 0).Row
    Rows(rowToCopy).Select
    Selection.Copy
    
    Range(tableStartAdress).Offset(1, 0).Select
    ActiveCell.Resize(rowsToInsert, 1).Select
    Selection.Insert Shift:=xlDown
    

    和。。。

    Range(tableStartAdress).Offset(1, 0).EntireRow.Copy
    Range(tableStartAdress).Offset(1, 0).Resize(rowsToInsert, 1).Insert Shift:=xlDown
    

    看起来容易多了。有几个想法:首先,您确定tableStartAddress实际上总是一个单元格(并且是正确的单元格)?你确定rowsToInsert总是38岁吗?除此之外,当前编写的代码将复制整行并将其插入理论上为38行乘1列的范围。我建议您重写它,这样您首先插入任意多行,然后用属于该行的数据填充38x 1范围。