Проблема расширенного фильтра с несколькими критериями для столбца - PullRequest
0 голосов
/ 27 апреля 2020

Я использую расширенный фильтр для копирования данных с основной рабочей таблицы 'SD C' и добавления в различные таблицы рабочих книг с меньшим количеством заголовков. Критерии фильтра создаются на другом листе.

Теперь я использую тот же код для тех же данных, но добавляю его в другие таблицы рабочих книг ранее в коде, и он работает абсолютно нормально. На прошлой неделе тот же код работал для этой новой книги, но сегодня он решил начать выдавать ошибки .... без изменения какого-либо кода.

Я потратил 6 часов, пытаясь выяснить проблему, но нет пока успехи.

Я сделал пару тестов, чтобы увидеть, где возникают проблемы:

  • Когда я использую те же заголовки, что и таблица назначения (но помещаю их на новый лист ) и вручную выполните расширенный фильтр, он работает нормально.
  • Когда я попытался вручную выполнить расширенный фильтр для одной целевой книги, это сработало, а затем в следующий раз после этого ничего не произошло. Очень странно ...
  • Я проверил все заголовки, чтобы убедиться, что они совпадают, пробелов нигде нет. Тем не менее, когда я запускаю расширенный фильтр вручную, ничего не добавляется к таблицам назначения.
  • Я проверил диапазоны в окне просмотра, когда макрос запускается шаг за шагом, и все выглядит нормально. (пока не появится ошибка с расширенным фильтром)

Я не понимаю, как это работало раньше, и внезапно начал выдавать ошибки. Тогда это работало для одного стола, а затем нет. Кажется, это одна книга, в которой есть проблемы, или, может быть, я использую несколько критериев для одного столбца? (но это работает вручную). Чего мне не хватает?

Я получаю сообщение об ошибке, когда расширенный фильтр должен запускаться в макросе: Ошибка времени выполнения '1004': сбой метода AdvancedFilter класса диапазона в строке кода

SDCRange.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=OOSdirectCrit, CopyToRange:=copyToRng, Unique:=False

Код, который я использую в настоящее время (который работает ранее в коде, просто добавляя в разные таблицы книги)

Sub StockAvail(wb As Workbook, ws As Worksheet)

Dim SATemp As String
Dim SATempF As String
Dim wsSDC As Worksheet
Set wsSDC = MainWB.Worksheets(1)

SATemp = Dir(TemplPath & "\*Stock Availability*.xls*")
SATempF = TemplPath & "\" & SATemp

'Check if workbook open if not open it
If Not wbOpen(SATempF, wb) Then
    Set wb = Workbooks.Open(SATempF)
End If

'Call function add Vendor,Region, etc
Call VInfoAdd(wb, ws)


'Create Filter Criteria ranges
With MainWB.Worksheets.Add
    .Name = "FltrCrit"
    Dim FltrCrit As Worksheet
    Set FltrCrit = MainWB.Worksheets("FltrCrit")
End With

'Create Filter Criteria ranges
With FltrCrit
    Dim OOSdirectCrit As Range
    Dim myLastColumn As Long

    'Create OOS - Direct Filter Criteria Range
    .Cells(1, "A") = "Out of Stock - Direct"
    .Cells(2, "A") = "MS"
    .Cells(3, "A") = "=4"
    .Cells(2, "B") = "SOH"
    .Cells(3, "B") = "=0"
    .Cells(2, "C") = "Sup.Vend."
    .Cells(3, "C") = "<>MA05"
    .Cells(2, "D") = "Sup.Vend."
    .Cells(3, "D") = "<>MA07"
    .Cells(2, "E") = "Sup.Vend."
    .Cells(3, "E") = "<>MA09"
    .Cells(2, "F") = "Sup.Vend."
    .Cells(3, "F") = "<>MA11"


    'get last column, set range name
    With .Cells

        'find last column of data cell range
        myLastColumn = .Cells(2, Columns.Count).End(xlToLeft).Column

        'specify cell range
        Set OOSdirectCrit = .Range(.Cells(2, "A:A"), .Cells(3, myLastColumn))

    End With


'Copy Filtered data to specified tables
Dim tblFiltered As ListObject
Dim copyToRng As Range, SDCRange As Range

'OOS - Direct
'Store Filtered table in variable
Set tblFiltered = wb.Worksheets("Out of Stock (Direct Supply)").ListObjects("Table_Out_of_Stock_Direct")

'Remove Filtered table Filters
tblFiltered.AutoFilter.ShowAllData

'Set Copy to range on Filtered sheet table
Set copyToRng = tblFiltered.HeaderRowRange
Set SDCRange = wsSDC.ListObjects("Table_SDCdata").Range

'Use Advanced Filter
SDCRange.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=OOSdirectCrit, CopyToRange:=copyToRng, Unique:=False


Код для 2 отдельные таблицы с разными критериями, первая из которых исключает коды D C, а вторая - только коды D C. Я включил только первый код выше, так как это первая проблема (2-я такая же, но должна быть исправлена, если я могу найти проблему с первой, так как это та же проблема)

Любая помощь будет с благодарностью, я заблудился в том, где искать проблемы с этим на данный момент.

...