将自动过滤的行插入另一张纸

时间:2020-02-07 21:13:01

标签: excel vba autofilter

我正在尝试自动过滤(在SHEET 1的A列中)SHEET 2中的活动单元格。然后,我有一个 IF语句,它计算可见行的数量,并且如果大于1(以排除标题),那么我想在 SHEET 3 中插入新行,并剪切并粘贴自动过滤的值 SHEET 1 中的行进入 SHEET 3中的新行。

然后,我清除 SHEET 1 中的“自动过滤器”,然后在 SHEET 1 中插入新行,并从剪切并粘贴活动单元格行的值将SHEET 2 放入 SHEET 1中的新行。

如果表格1中没有自动过滤的结果,则 ELSE声明会清除表格中的自动过滤1,将新行插入 SHEET 1 ,然后将 SHEET 2 中活动单元格行的值剪切并粘贴到 SHEET中的新行中1。

当前,如果 SHEET 2 中的“自动过滤器”结果在任何行>第2行中,我似乎都无法使我的代码正常工作。这是我当前的代码,我已发表评论以帮助导航:

Sub Autofilter_Macro()

Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet

Set sh1 = Sheet1
Set sh2 = Sheet2
Set sh3 = Sheet3

Dim rng As Range

Dim AC As Integer
AC = ActiveCell.Row

sh1.AutoFilterMode = False 'Clears any AutoFilters from Sheet1

sh1.Range("A:A").AutoFilter Field:=1, Criteria1:=ActiveCell.Value 'AutoFilters SHEET 1 column "A" based off the ActiveCell Row in SHEET 2

Set rng = sh1.UsedRange.SpecialCells(xlCellTypeVisible) 'Sets rng to visible cells

    If (rng.Rows.Count > 1) Then 'Counts the # of visible rows

        sh3.Rows("2:2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow 'Inserts an empty row (with the same format as the one below it) into row 2 of SHEET 3

        sh3.Range("A2:CK2").Value = rng.Offset(rowOffSet:=1).Value 'Sets the new empty row's values in SHEET 3 = the values of the Autofiltered row in SHEET 1

        sh1.ShowallData 'Clears any Autofilters from SHEET 1

        sh1.Rows("2:2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow 'Inserts an empty row (with the same format as the one below it) into row 2 of SHEET 1

        sh1.Range("A2:CK2").Value = sh2.Range(Cells(AC, 1), Cells(AC, 89)).Value 'Sets the new empty row's values in SHEET 1 = the values of the ActiveCell row in SHEET 2

        MsgBox "Replaced Main Database" 'MsgBox indicating what has executed

    Else

        sh1.Rows("2:2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow 'Inserts an empty row (with the same format as the one below it) into row 2 of SHEET 1

        sh1.Range("A2:CK2").Value = sh2.Range(Cells(AC, 1), Cells(AC, 89)).Value 'Sets the new empty row's values in SHEET 1 = the values of the ActiveCell row in SHEET 2

         MsgBox "New Entry into Main Database"

    End If

sh1.ShowallData 'Clears any Auotfilters from SHEET 1

End Sub

0 个答案:

没有答案