Доброе утро,Как фильтровать результаты таблицы и получать последний видимый результат без использования SELECT?
Я пытаюсь отфильтровать таблицу на отдельном листе, захватить значение в последней видимой ячейке и скопировать ее на текущий рабочий лист. Я могу заставить все это работать при ручном перемещении между рабочими листами или при выборе рабочего листа в коде, но я хочу получить данные без использования select. Есть ли способ преодолеть это?
Если я не перехожу к нему, он захватывает значение из нефильтрованного/не видимого поля. Я думаю, что мне нужно сделать, это получить другое заявление, которое работает без на странице для этого:
rngRepName.Rows(Range("C2").End(xlDown).Row - 1).Text
Вот код, я признателен за любую помощь!
Set myTable = Worksheets("Agent Chart").ListObjects("tblAgentChart")
Set rngRepID = myTable.ListColumns("REPID").DataBodyRange
Set rngRepName = myTable.ListColumns("REPNAME").DataBodyRange
Set rngSupID = myTable.ListColumns("SUPID").DataBodyRange
Set rngSupName = myTable.ListColumns("SUPNAME").DataBodyRange
intRowCount = Worksheets("Raw Data").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count - 1
For i = 1 To intRowCount
On Error Resume Next
strAgentId = Worksheets("Raw Data").Range("F2").Offset(i - 1, 0).Value
strSentStatus = Worksheets("Raw Data").Range("G2").Offset(i - 1, 0).Value
If strSentStatus <> "Yes" And strSentStatus <> "No" And strSentStatus <> "Archived" Then
'strAgentId = Range("F2").Offset(i - 1, 0).Value
If strAgentId <> "" Then 'skipping blanks
'Turn on filter if not already turned on
myTable.ShowAutoFilter = False
myTable.ShowAutoFilter = True
Set Rng = myTable.Range.SpecialCells(xlCellTypeVisible)
FilterField = WorksheetFunction.Match("REPID", Rng.Rows(1), 0)
SupFilterField = WorksheetFunction.Match("SUPID", Rng.Rows(1), 0)
'Filter Specific Agent
If strAgentId <> "Support" And strAgentId <> "SUPPORT" Then
Rng.AutoFilter Field:=FilterField, Criteria1:=strAgentId, Operator:=xlFilterValues
Rng.CurrentRegion.Sort Key1:=Rng.Range("G1"), Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1, DataOption1:=xlSortNormal
'Set User Name
strAgentName = rngRepName.Rows(Range("C2").End(xlDown).Row - 1).Text
strSupervisorName = rngSupName.Rows(Range("F2").End(xlDown).Row - 1).Text
If strAgentName <> "" Then
'Agent
Worksheets("Raw Data").Range("F2").Offset(i - 1, 0).Value = strAgentName
'Set Supervisor Name
Worksheets("Raw Data").Range("E2").Offset(i - 1, 0).Value = strSupervisorName
Else
Rng.AutoFilter Field:=SupFilterField, Criteria1:=strAgentId, Operator:=xlFilterValues
'Set User Name
strAgentName = rngSupName.Rows(Range("F2").End(xlDown).Row - 1).Text
If strAgentName <> "" Then
'Agent
Worksheets("Raw Data").Range("F2").Offset(i - 1, 0).Value = strAgentName
'Set Supervisor Name
Worksheets("Raw Data").Range("E2").Offset(i - 1, 0).Value = ""
End If
End If
Else
Worksheets("Raw Data").Range("E2").Offset(i - 1, 0).Value = "Support"
Worksheets("Raw Data").Range("F2").Offset(i - 1, 0).Value = "Support"
End If
End If
End If
On Error GoTo 0.
Next
End Sub
непроверенная, но будет 'strAgentName = rngSupName.SpecialCells (xlCellTypeVisible) .Rows (Range ("F2") End (xlDown) .Row -. 1) .Text' работа? – Soulfire
Это не так, хорошая мысль. Я попытался использовать его для выбора ячейки для тестирования и не выбрал ничего, что было бы фильтровано. – Allen
Я попытался сбросить диапазон, например: 'Set Rng = myTable.Range.SpecialCells (xlCellTypeVisible)' и попытался вывести значение с помощью 'strAgentName = Rng.Rows (Range (« C2 »). End (xlDown). Row - 1) .SpecialCells (xlCellTypeVisible) .Text', но не имел никакого успеха в методе .SpecialCells. Не знаете, что еще попробовать? – Allen