Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

Suchfeld

Betrifft: Suchfeld von: Daniel
Geschrieben am: 24.09.2014 11:15:33

Hallo liebe VBA´ler,

Ich habe mir da eine Tabelle mit 2 Makros zusammengebastelt, die man in dem Sceenshot oben sieht. Das erste bezieht sich auf die Zeile 1 und ist eine Art Autofiltersuche(wenn in ein Feld der Zeile 1 etwas eingegeben wird, wird die Spalte unter der Eingabe nach dem Begriff durchsucht und wiedergegeben). Makro2 ist der Filter aus Button, der beim klicken die Tabelle wiederherstellt.



Meine Frage wäre, Wie muss der Code geändert werden, damit beim Klick auf den Button nicht nur alle Daten wieder ersichtlich werden in der Tabelle, sondern gleichzeitig auch in Zelle A1 die Eingabe des Suchfelds reseted/gelöscht wird.
Zweite Frage wäre, da sich die Sucheingabe auf die komplette Zeile 1 bezieht(ich brauche aber nur die Sucheingabe in Zelle A1), wie ich die Sucheingabe auf Zelle A1 beschränken kann(also B1,C1.usw. sollen nicht als Sucheingabe verwendet werden können.

Folgenden Code habe ich für beide hinterlegt:

Sub Filter()



If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Selection.AutoFilter Field:=1


End Sub

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    Dim raBereich As Range
    Dim raZelle As Range            ' Variable für die Zelle als Range
'   Wirkung des Codes auf Zeile 1 der Tabelle im Filterbereich zulassen
    Set raBereich = Intersect(Target, Range(Cells(1, ActiveSheet.AutoFilter.Range(1).Column), _
        Cells(1, ActiveSheet.AutoFilter.Range(1).Column + ActiveSheet.AutoFilter.Filters.Count - _
 _
 1)))
'   Eingabe erfolgte im festgelegten Bereich
    If Not raBereich Is Nothing Then
'       Bildschirmaktualisierung aus
        Application.ScreenUpdating = False
'       Reaktion auf Eingabe abschalten
        Application.EnableEvents = False
'       Schleife über alle Zellen der Zeile 1 der Tabelle
        For Each raZelle In raBereich
'           Bezieht sich auf den Filterbereich
            With ActiveSheet.AutoFilter.Range
'               Eingabe wurde gelöscht
                If raZelle = "" Then
'                   Autofilter für das betreffende Fald zurücksetzen
                    .AutoFilter Field:=raZelle.Column + 1 - ActiveSheet.AutoFilter.Range(1). _
Column
'                   in die betreffende Zelle eintragen
                    raZelle = "Suche "
                Else
'                   Suchkriterium ist eine Zahl
                    If IsNumeric(raZelle) Then
'                       Autofilter für das betreffende Feld setzen, Filterkriterium "entspricht" _
 _

                        .AutoFilter Field:=raZelle.Column + 1 - ActiveSheet.AutoFilter.Range(1). _
 _
Column, _
                            Criteria1:="=" & raZelle
'                   Suchkriterium ist ein Datum
                    ElseIf IsDate(raZelle) Then
'                       Autofilter für das betreffende Feld setzen
'                       es werden 2 Kriterien verwendet, weil mit Kriterium "=" das Datum nicht  _
 _
gefiltert wird
                        .AutoFilter Field:=raZelle.Column + 1 - ActiveSheet.AutoFilter.Range(1). _
 _
Column, _
                            Criteria1:=">=" & raZelle.Value2, Criteria2:="<=" & raZelle.Value2
                    Else
'                      Autofilter für das betreffende Feld setzen, Filterkriterium "Enthält"
                        .AutoFilter Field:=raZelle.Column + 1 - ActiveSheet.AutoFilter.Range(1). _
 _
Column, _
                            Criteria1:="=*" & raZelle & "*"
                    End If
                End If
            End With
        Next raZelle
'       Reaktion auf Eingabe einschalten
        Application.EnableEvents = True
'       Bildschirmaktualisierung ein
        Application.ScreenUpdating = True
    End If
End Sub
Private Sub CommandButton1_Click()
    If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
    Selection.AutoFilter Field:=1
End Sub

  

Betrifft: AW: Suchfeld von: fcs
Geschrieben am: 24.09.2014 13:23:28


Hallo Daniel,

passte die folgende Zeile an:

    Set raBereich = Intersect(Target, Range(Cells(1, ActiveSheet.AutoFilter.Range(1).Column), _
        Cells(1, ActiveSheet.AutoFilter.Range(1).Column)))
lösche die Zeile bzw. mache einen Kommentar draus.
                    raZelle = "Suche "
Ändere das Schaltflächen-Makro in
Private Sub CommandButton1_Click()
    If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
    Range("A1")=""
End Sub
Gruß
Franz


  

Betrifft: AW: Suchfeld von: Daniel
Geschrieben am: 24.09.2014 14:52:11

Vielen Dank für die Antwort Franz. Das mit der Zeile1 und der Suche hat funktioniert, dass er nur in A1 sucht. Allerdings löscht er die Zelle A1 nicht wieder nachdem ich den Button klicke. Wäre toll, wenn du/irgendjemand hier noch Abhilfe wüsste..
Viele Grüße,
Daniel


  

Betrifft: AW: Suchfeld von: fcs
Geschrieben am: 24.09.2014 15:01:20

Hallo Daniel,

du musst halt in dem Makro, das die Schaltfläche startet diese 2 Zeilen einbauen.

    If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
    Range("A1")=""
Ansonsten braucht du nur den Inhalt von A1 löschen. Das zeigt auch alle Daten an und die Zelle ist leer.

Gruß
Franz