Excel VBA фильтр таблиц и удаление видимых ячеек не работает - PullRequest
0 голосов
/ 03 мая 2018

У меня есть код ниже, который все прекрасно работал. Я добавил раздел для фильтрации различных именованных таблиц на соответствующих листах, удаления видимых строк, подсчета строк и фильтрации и повторного удаления. Этот раздел кода [после «Next kfp 'Фильтр таблиц и удаление», добавивший много места для поиска проще) работал как отдельный макрос в другой книге, но он ничего не делает при добавлении в этот код (я только что добавил часть кода до и после проблемной части. Если потребуется больше, я могу отправить весь код, если это поможет).

Любая помощь будет оценена.

For kfp = 0 To UBound(FillPages)
' Get the page and table information.
Set sh = Sheets(FillPages(kfp))
TableName = "Table_" & Replace(sh.Name, " ", "_")
Set tbl = sh.ListObjects(TableName)

'clear out any old data in the table
ClearTable sh.Name, TableName

' Loop through headers on table on the sheet
For kth = 1 To tbl.HeaderRowRange.Count
    HeaderNameT = tbl.HeaderRowRange(kth)

    ' Does the template have a match in the map
    Set rng = Range("Table_Map[Template]").Find(HeaderNameT, LookIn:=xlValues, lookat:=xlWhole)

    ' If a match is found
    If Not rng Is Nothing Then
        HeaderNameD = rng.Offset(0, -1)
        ' copy the column from data to template
        Range("Table_Data[" & HeaderNameD & "]").Copy Range(TableName & "[" & HeaderNameT & "]")
    End If
Next kth
Next kfp





'Filter tables and Delete
Dim i As Long
'Filter, delete, count: Out of Stock sheet
    With Worksheets("Out of Stock").ListObjects("Table_Out_of_Stock")
        .Range.AutoFilter
        .Range.AutoFilter Field:=.ListColumns("Roster").Index, Criteria1:="<>4"
        .Range.Offset(1).EntireRow.Delete
        .Range.AutoFilter
        .Range.AutoFilter Field:=.ListColumns("RP Type").Index, Criteria1:="=NoRoster"
        .Range.Offset(1).EntireRow.Delete
        .Range.AutoFilter
        .Range.AutoFilter Field:=.ListColumns("SOH").Index, Criteria1:="<>0"
        .Range.Offset(1).EntireRow.Delete
        .Range.AutoFilter
    End With

' Count Instances and add to cells: Out of Stock sheet
Dim InstVal As Integer
    InstVal = Worksheets("Out of Stock").ListObjects("Table_Out_of_Stock").ListRows.Count
    Worksheets("Out of Stock").Range("O14") = InstVal

    With Worksheets("Out of Stock").ListObjects("Table_Out_of_Stock")
        .Range.AutoFilter
        .Range.AutoFilter Field:=.ListColumns("SOH").Index, Criteria1:="<>0"
        .Range.Offset(1).EntireRow.Delete
        .Range.AutoFilter
    End With

'Filter, delete, count: Overstock
    With Worksheets("Overstock").ListObjects("Table_Overstock")
        .Range.AutoFilter
        .Range.AutoFilter Field:=.ListColumns("Ranging").Index, Criteria1:="<>4"
        .Range.Offset(1).EntireRow.Delete
        .Range.AutoFilter
    End With

' Count Instances and add to cells: Out of Stock sheet
    InstVal = Worksheets("Overstock").ListObjects("Table_Overstock").ListRows.Count
    Worksheets("Overstock").Range("P14") = InstVal
'Filter, delete, count: Outdated Stock Counts
    With Worksheets("Outdated Stock Counts").ListObjects("Table_Outdated_Stock_Counts")
        .Range.AutoFilter
        .Range.AutoFilter Field:=.ListColumns("Ranging").Index, Criteria1:="<>4"
        .Range.Offset(1).EntireRow.Delete
        .Range.AutoFilter
        .Range.AutoFilter Field:=.ListColumns("SOH").Index, Criteria1:="=0"
        .Range.Offset(1).EntireRow.Delete
        .Range.AutoFilter
    End With
' Count Instances and add to cells: Outdated Stock Counts
    InstVal = Worksheets("Outdated Stock Counts").ListObjects("Table_Outdated Stock Counts").ListRows.Count
    Worksheets("Outdated Stock Counts").Range("N14") = InstVal
'Filter, delete, count: Dormant Stock
    With Worksheets("Dormant Stock").ListObjects("Table_Dormant_Stock")
        .Range.AutoFilter
        .Range.AutoFilter Field:=.ListColumns("Ranging").Index, Criteria1:="<>4"
        .Range.Offset(1).EntireRow.Delete
        .Range.AutoFilter
        .Range.AutoFilter Field:=.ListColumns("SOH").Index, Criteria1:="<=0"
        .Range.Offset(1).EntireRow.Delete
        .Range.AutoFilter
    End With
' Count Instances and add to cells: Dormant Stock
    InstVal = Worksheets("Dormant Stock").ListObjects("Table_Dormant_Stock").ListRows.Count
    Worksheets("Dormant Stock").Range("L14") = InstVal

    'Filter, delete, count: Negative Stock
    With Worksheets("Negative Stock").ListObjects("Table_Negative_Stock")
        .Range.AutoFilter
        .Range.AutoFilter Field:=.ListColumns("Ranging").Index, Criteria1:="<>4"
        .Range.Offset(1).EntireRow.Delete
        .Range.AutoFilter
    End With

' Count Instances and add to cells: Negative Stock
    InstVal = Worksheets("Negative Stock").ListObjects("Table_Negative_Stock").ListRows.Count
    Worksheets("Negative Stock").Range("M14") = InstVal

    With Worksheets("Negative Stock").ListObjects("Table_Negative_Stock")
        .Range.AutoFilter
        .Range.AutoFilter Field:=.ListColumns("SOH").Index, Criteria1:=">=0"
        .Range.Offset(1).EntireRow.Delete
        .Range.AutoFilter
    End With
'Error Handling section.
ErrorHandler:
Select Case Err.Number
        'Common error #1: file path or workbook name is wrong.
        Case 1004
            Application.ScreenUpdating = True
            MsgBox "The workbook could not be found in the path" & vbCrLf & MyPath & "."
        Exit Sub
       'General case: turn screenupdating back on, and exit.
        Case Else
            Application.ScreenUpdating = True
        Exit Sub
End Select

End Sub
...