Спасибо DisplayName, я изменил только 2 или 3 вещи, и теперь это работает. Вот мой код, если кому-то нужен один день
Sub RecoverData()
Application.ScreenUpdating = False
Dim x As Workbook
Dim t As Range
'## Open both workbooks first:
Set x = Workbooks.Open(Application.ActiveWorkbook.Path & "\data.xlsx")
With x.Sheets("Feuil1") ' reference source sheet
Set t = .Rows(1).Find("Vendor name", lookat:=xlWhole) ' try searching wanted header in referenced sheet first row
If Not t Is Nothing Then ' if found
Range(t.Address).AutoFilter Field:=2, Criteria1:=Array("a*", "b*"), Operator:=xlFilterValues
Intersect(.UsedRange, t.EntireColumn).SpecialCells(xlCellTypeVisible).Copy _
Destination:=ThisWorkbook.Sheets("Feuil2").Range("A1") '<<== paste filtered column to destination sheet A1 cell (instead of B1), to match your subsequent removeduplicates call
ThisWorkbook.Sheets("Feuil2").Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
.AutoFilterMode = False
Else
MsgBox "Column Name Not Found"
End If
End With
x.Close savechanges:=False
Application.ScreenUpdating = True
End Sub
Маршрутизированные события имеют особое поведение, но это поведение в значительной степени невидимо если вы обрабатываете событие в элементе, где оно возникает.
Когда маршрутизируемые события становятся мощными, это если вы используете любой из предложенных сценариев: определение общих обработчиков в общем корне, создание собственного элемента управления или определение собственного пользовательского класса элемента управления.
Маршрутизированные прослушиватели событий и маршрутизированные источники событий не должны совместно использовать общее событие в своей иерархии. Любой UIElement или ContentElement может быть прослушивателем событий для любого перенаправленного события. Таким образом, вы можете использовать полный набор перенаправленных событий, доступных в рабочем API-интерфейсе, в качестве концептуального «интерфейса». в результате чего разрозненные элементы в приложении могут обмениваться информацией о событиях. Эта концепция «интерфейса» для перенаправленных событий особенно применима для входных событий.
Маршрутизированные события также можно использовать для связи через дерево элементов, поскольку данные события для события сохраняются для каждого элемента в маршруте. Один элемент может что-то изменить в данных события, и это изменение будет доступно для следующего элемента в маршруте.
Помимо аспекта маршрутизации, есть две другие причины, по которым любое данное событие WPF может быть реализовано как перенаправленное событие вместо стандартного события CLR. Если вы реализуете свои собственные мероприятия, вы также можете рассмотреть следующие принципы:
Источник: MSDN: Обзор маршрутизируемых событий
В WPF широко используется композиция элементов управления, что требует использования события Routed, поскольку композиция набора элементов управления в большинстве случаев отображает одну активность.