2016-12-21 3 views
0

ZielVerwenden eines Makros in verschiedenen Tabellen, unabhängig

Eine Schaltfläche, die Autofilter auf einer Tabelle basierend auf Zellenwerten ausführt.

Problem

Wenn das Blatt zu duplizieren, bezieht sich der Makro in der Tabelle auf dem Originalblatt.

aktuelle Code

Sub Macro1() 
    ActiveSheet.ListObjects("Table33").Range.AutoFilter Field:=6, Criteria1:=">" & Range("K9").Value 
End Sub 

Gibt es eine Möglichkeit, eine Tabelle in einer relativen Weise zuweisen? Die Tabelle erscheint Blatt für Blatt immer in den gleichen Zellen.

Antwort

2

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 
Verwandte Themen