VBA:插入用户定义的用户选择的行的副本数量

时间:2018-07-25 21:59:48

标签: excel vba

我已经处理了一个巨大的问题已有两个星期了,无论如何我都无法解决。无论我做什么,它都会工作一段时间,直到出现新的流行音乐为止。

目标:在表的特定列中,允许用户键入一个整数,并根据该数量在表中插入x行(它们都是原始行的精确副本)

我有下面的代码是我从另一个站点获得的,并对其进行了修改:

我有一个WorksheetChange事件,它会触发另一个模块中的宏。

下面的代码仅在未过滤的表中起作用,但是一旦用户过滤了表并且宏运行,它就不起作用。这些行已插入,并在用户具有的任何过滤器上可见,但原始行的副本不可见。我没有错误,只是行插入为空。

如何在过滤表中插入用户指定的任意数量的行(不取出过滤器),并将所有内容复制/粘贴到原始行中?

Sub InsertRows(ByVal splitVal As Integer, ByVal keyCells As Range, ws As Worksheet)

    On Error GoTo ErrorHandler
    PW
    ws.Unprotect Password
    ws.DisplayPageBreaks = False

    With keyCells
        .Offset(1).Resize(splitVal).EntireRow.Insert
        .EntireRow.Copy .Offset(1, 0).Resize(splitVal).EntireRow
    End With

ExitHandler:
    ws.Protect Password:=Password, DrawingObjects:=True, Contents:=True, Scenarios:=False _
    , AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True, AllowFormattingRows:=True, AllowFormattingColumns:=True, AllowFormattingCells:=True
    Exit Sub

ErrorHandler:
    WBNorm
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Insert_Rows, line " & Erl & "."
    GoTo ExitHandler

End Sub

1 个答案:

答案 0 :(得分:0)

您是否尝试过以下行为:

  1. 关闭屏幕更新
  2. 删除过滤器
  3. 添加行
  4. 重新启用过滤器

关于如何保存过滤条件并稍后在以下位置重新应用它们,存在一个已回答的问题:In Excel VBA, how do I save / restore a user-defined filter?