2016-03-14 1 views
0

Доброе утро,Как фильтровать результаты таблицы и получать последний видимый результат без использования 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 
+0

непроверенная, но будет 'strAgentName = rngSupName.SpecialCells (xlCellTypeVisible) .Rows (Range ("F2") End (xlDown) .Row -. 1) .Text' работа? – Soulfire

+0

Это не так, хорошая мысль. Я попытался использовать его для выбора ячейки для тестирования и не выбрал ничего, что было бы фильтровано. – Allen

+0

Я попытался сбросить диапазон, например: 'Set Rng = myTable.Range.SpecialCells (xlCellTypeVisible)' и попытался вывести значение с помощью 'strAgentName = Rng.Rows (Range (« C2 »). End (xlDown). Row - 1) .SpecialCells (xlCellTypeVisible) .Text', но не имел никакого успеха в методе .SpecialCells. Не знаете, что еще попробовать? – Allen

ответ

0

Похоже, что я понял это. Кажется, это было просто, как советовать .SpecialCells после диапазона таблицы, но до указанной строки.

rngSupName.SpecialCells(xlCellTypeVisible).Rows(Range("F2").End(xlUp).Row).Value 
Смежные вопросы