Фильтруйте и возвращайте строку, первая строка всегда возвращается, vba

У меня есть поле со значением, которое я хотел бы найти в другом столбце книги. Затем код, использующий автофильтр, возвращает строки, имеющие это значение в том же столбце (столбец 4). Он работает правильно, однако первая строка источника всегда копируется в место назначения, независимо от того, имеет оно значение или не имеет значение, которое ищется в определенном столбце. Смещение или смещение ячейки используется, поскольку первые две строки на обоих листах являются заголовками

Sub CommandButton1_Click()
'Look in data repository for the Combobox filter value and only return those associated rows (can be more than one)

Dim DataBlock As Range, Dest As Range
Dim LastRow As Long, LastCol As Long
Dim SheetOne As Worksheet, SheetTwo As Worksheet
Dim PN As String
PN = ComboBox1.Value

'set references up-front
Set SheetTwo = ThisWorkbook.Worksheets("Report") 'this is the expiditing report
Set SheetOne = Workbooks.Open("C:\Users\Colin\Documents\Nexen\Data Repository V1.xlsm").Sheets("Data") 'this is the expiditing report
Set Dest = SheetTwo.Cells(3, 1) '<~ this is where we'll put the filtered data

'identify the "data block" range, which is where
'the rectangle of information that Ill apply
'.autofilter to
With SheetOne
    LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
    LastCol = .Cells(2, .Columns.Count).End(xlToLeft).Column
    Set DataBlock = .Range(.Cells(3, 1), .Cells(LastRow, LastCol))
    'Set DataBlock = Range("A3:AV65000") 'for testing
End With

'apply the autofilter to column D (i.e. column 4)
With DataBlock
    'can use offset .Offset(2, 0).
    .AutoFilter Field:=4, Criteria1:=PN
    'copy the still-visible cells to sheet 2
    .SpecialCells(xlCellTypeVisible).Copy Destination:=Dest
End With

'turn off the autofilter
With SheetOne
    .AutoFilterMode = False
    If .FilterMode = True Then .ShowAllData
End With

End Sub

Sub CommandButton2_Click()

Dim MyBook As String
Dim MyRange As Range
    'Get name of current wb
    MyBook = ThisWorkbook.Name
  Set MyRange = MyBook.Sheets("Report").Range("T3,AC65000")

'ActiveWorkbook.Close savechanges:=True
 MyBook.Activate


End Sub

![ETR][1]

Так почему я получаю первый ряд обратно независимо? Я перепробовал множество вещей.

1 ответ

Ваш .Range должен быть в Table с заголовком для AutoFilter работать правильно.

Другие вопросы по тегам