Ich habe 3 Beispiele für Sie, die erste findet die Tabelle für die Zelle, die Sie angeben. In diesem Fall müssen Sie die D6
in TableName = ActiveSheet.Range("D6").ListObject.Name
in eine Zelle in der Tabelle ändern. Nachdem die Tabelle gefunden wurde, wird der Filter für diese Tabelle ausgeführt. Alle 3 Beispiele werden ein Meldungsfeld werfen, wenn eine Tabelle nicht gefunden wird, Sie können das auskommentieren oder löschen, wenn Sie es nicht wollen. Sie sollten in der Lage sein, Ihren Knopf an irgendeinen der 3 zu binden und ihn zu benutzen.
Ich habe den Code gefunden, um die Tabelle here zu finden und modifiziert, um mit Ihrem bereitgestellten Code zu arbeiten.
Sub RangeTable()
Dim TableName As String
Dim ActiveTable As ListObject
'Determine if ActiveCell is inside a Table
On Error GoTo NoTableSelected
TableName = ActiveSheet.Range("D6").ListObject.Name 'Change range to cell inside of table
Set ActiveTable = ActiveSheet.ListObjects(TableName)
On Error GoTo 0
'Do something with your table variable (ie Add a row to the bottom of the ActiveTable)
ActiveTable.Range.AutoFilter Field:=6, Criteria1:=">" & Range("K9").Value
Exit Sub
'Error Handling
NoTableSelected:
MsgBox "There is no Table currently selected!", vbCritical
End Sub
Der Code unten in der Zelle ausgewählt haben Sie zur Zeit aussehen wird, finden Sie die damit verbundenen Tabelle und dann den Filter laufen, dass die Tabelle.
Sub ActiveTable()
Dim SelectedCell As Range
Dim TableName As String
Dim ActiveTable As ListObject
Set SelectedCell = ActiveCell
'Determine if ActiveCell is inside a Table
On Error GoTo NoTableSelected
TableName = SelectedCell.ListObject.Name
Set ActiveTable = ActiveSheet.ListObjects(TableName)
On Error GoTo 0
'Do something with your table variable (ie Add a row to the bottom of the ActiveTable)
ActiveTable.Range.AutoFilter Field:=6, Criteria1:=">" & Range("K9").Value
Exit Sub
'Error Handling
NoTableSelected:
MsgBox "There is no Table currently selected!", vbCritical
End Sub
Eine weitere Alternative ist der Code, unter dem läuft einfach die Filter auf der ersten Tabelle auf der Active gefunden Wenn Sie also nur einen Tisch haben, dann sollten diese gut funktionieren. Mit diesem müssen Sie keine Zelle in der Tabelle auswählen, bevor Sie sie ausführen, aber wenn Sie mehr als eine Tabelle pro Blatt haben, können Sie den obigen Code verwenden.
Sub SheetTable()
Dim TableName As String
Dim ActiveTable As ListObject
'Determine if ActiveCell is inside a Table
On Error GoTo NoTableSelected
TableName = ActiveSheet.ListObjects.Item(1)
Set ActiveTable = ActiveSheet.ListObjects(TableName)
On Error GoTo 0
'Do something with your table variable (ie Add a row to the bottom of the ActiveTable)
ActiveTable.Range.AutoFilter Field:=6, Criteria1:=">" & Range("K9").Value
Exit Sub
'Error Handling
NoTableSelected:
MsgBox "There is no Table currently selected!", vbCritical
End Sub