Как добавить кнопку фильтра и сортировки в ячейку?

Как в ячейку вставить кнопку фильтра и сортировки как на картинке?

Изображение


person Skyler Cheah    schedule 08.10.2015    source источник
comment
Спасибо за ответ!   -  person Skyler Cheah    schedule 09.10.2015


Ответы (2)


или лучше, нажмите на заполненную ячейку, а затем «Главная» >> «Форматировать как таблицу». Он дает вам множество вариантов фильтрации, сортировки и копирования формул, а также интересный дизайн.

Форматировать как скриншот таблицы

person George    schedule 08.10.2015
comment
Разум = Взорван! Я работал над подпрограммой, чтобы добавить filter в ws, все прошло нормально, затем я хотел также добавить кнопку одним щелчком мыши для сортировки, но, похоже, это невозможно, это просто сборка как фильтр. Но мне больше нравится настольный вариант, теперь гораздо больше новых вещей для изучения. - person FreeSoftwareServers; 30.09.2020

Вот некоторый код, который можно использовать с ответом Джорджа об использовании таблицы.

Я сразу же столкнулся с проблемой добавления таблиц, когда фильтры работают нормально. Вы не можете преобразовать диапазон запроса в таблицу, но можете добавить фильтр. См. --› https://stackoverflow.com/a/40492129/5079799 и отказ от ответственности. Это мой блог, где я буду разместить обновленный код https://www.freesoftwareservers.com/display/FREES/Filter+Worksheet+-+Table+-+Query+-+Excel+VBA

Public Sub DatatoTable(ws As Worksheet)
   
    Dim TblStyle As String
    TblStyle = "TableStyleMedium20"
    
    Dim TblName As String
    TblName = ws.Name
     
    Dim TblRng As Range
    Set TblRng = GetUsedRange(ws)
    
    ws.Activate
    TblRng.Select
    Set lo = TblRng.ListObject
    If Not lo Is Nothing Then
         Debug.Print "Table Found"
    Else
     ws.ListObjects.Add(xlSrcRange, TblRng, , xlYes).Name = TblName
     Range(TblName & "[#All]").Select
     ws.ListObjects(TblName).TableStyle = TblStyle
    End If
End Sub
Public Function GetUsedRange(ws As Worksheet) As Range
 Dim lRow As Integer, lCol As Integer, fCol As Integer, fRow As Integer
 fCol = Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlLeft).Column
 lCol = Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
 fRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlDown).Row
 lRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
 Set GetUsedRange = ws.Range(Cells(fRow, fCol), Cells(lRow, lCol))
End Function
Sub Test()
 
 Call DatatoTable(ActiveSheet)
 
End Sub
person FreeSoftwareServers    schedule 30.09.2020