2017-03-10 5 views
0

Ich habe einige VBA-Code, den ich verwenden wollte, um eine Zeile anstelle einer Spalte zu filtern. Ich habe jedoch einige Probleme, die ich nicht zu lösen scheint, an dieser Stelle habe ich mich selbst verwirrt.Filtering Row basierend auf Kontrollkästchen

Sub FilterRow() 
    Dim b As Object, cs As Integer 
    Set b = ActiveSheet.CheckBoxes(Application.Caller) 
    With b.TopLeftCell 
     cs = .Row 
    End With 

    Dim rng As Range, cel As Range, totalRng As Range 
    If ActiveSheet.AutoFilterMode = True Then 
     ActiveSheet.AutoFilterMode = False 
    End If 

    For Each cel In totalRng 
     If cel.Row <> cs Then 
      cel.EntireColumn.Hidden = True 
     Else 
      cel.EntireColumn.Hidden = False 
     End If 
    Next cel 

End Sub 

Ziel ist die Codeprüfung Spalten zu haben C: DX dieser spezifischen Reihe für einen Wert, wenn ein Wert NICHT dann diese Spalte zu verstecken gefunden ist. Letztendlich werden alle leeren Zellen in dieser bestimmten Zeile entfernt.

+0

Es ist unklar, ob Sie in der Lage sein möchten, verdeckte Spalten aus den Lücken in verschiedenen Zeilen zu sammeln, oder ob jeder neue Checkbox-Klick eine vorherige Filterung zugunsten seiner eigenen aufdecken soll. – Jeeped

Antwort

0

vorausgesetzt So FilterRow wird das Makro, das Sie das Kontrollkästchen zugewiesen haben, wird Folgendes tun, was ich denke, Sie versuchen zu tun:

Sub FilterRow() 
    Dim b As Object, cs As Integer 
    Set b = ActiveSheet.CheckBoxes(Application.Caller) 

    With b.TopLeftCell 
     cs = .row 
    End With 

    Dim rng As Range, cel As Range, totalRng As Range 
    Set totalRng = Range("C" & cs & ":DX" & cs) 

    If b.Value = 1 Then 
     If ActiveSheet.AutoFilterMode = True Then 
     ActiveSheet.AutoFilterMode = False 
     End If 

     For Each cel In totalRng 
     If cel.Value = "" Then 
      cel.EntireColumn.Hidden = True 
     Else 
      cel.EntireColumn.Hidden = False 
     End If 
     Next cel 
    Else 
     ' Set up autofilter here 
     totalRng.EntireColumn.Hidden = False 
    End If 

End Sub 

Da dieses Makro ausgelöst wird, wenn das Kontrollkästchen entweder aktiviert oder deaktiviert, habe ich die Logik so geändert, dass sie alle Spalten anzeigt, wenn das Kontrollkästchen deaktiviert ist (dh, wenn das Kontrollkästchen deaktiviert ist).

+0

Wenn ich das Kontrollkästchen deaktiviere, erhalte ich einen Laufzeitfehler '1004' Die AutoFilterMode-Eigenschaft der Worksheet-Klasse konnte nicht eingestellt werden. – Dazzled

+0

Sorry, das ist definitiv mein schlechtes. Sie können autofilter auf false setzen ([siehe hier] (https://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.autofiltermode.aspx)), aber Sie wieder aktivieren würde Code in den else-Teil der if-Anweisung eingeben, um den Autofilter erneut einzurichten. Ich habe den Code entsprechend aktualisiert. – Amorpheuses

+0

Verstanden, danke! Klappt wunderbar. – Dazzled

Verwandte Themen