Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bei Doppelklick in Zelle/Spalte Autofiltern

Bei Doppelklick in Zelle/Spalte Autofiltern
Doppelklicker
Hallo liebe Excelgemeinde,
ich hätte ein kleines Attentat auf euch vor.
ich wünsche mir von euch den VB-Quellcode für die Lösung des nachfolgenden Wunsches:
ich möchte das per Doppelklick auf einer Zelle in Spalte B des Excelblattes "Auftrag" (gibt mehrere Blätter in der Datei, jedoch soll dies nur in diesen Blatt ausgeführt werden)
eine Userabfrage nach einer Zahl erfolgt
>>>> "Usereingabe = InputBox("Maximale Wert?", "Suche nach", 1, vbOKCancel)"
und dann ein Autofilter über den Bereich A2:J2 erfolgen.
>>> "Range("A2:J2").Select"
dieser Autofilter soll dann für Spalte J nur die Datensätze mit X filtern.
>>> "Selection.AutoFilter Field:=10, Criteria1:="x""
und für Spalte B soll alles angezeigt werden, was kleiner oder gleich der Usereingabe ist.
>>> "AutoFilter Field:=4, Criteria1:=" Doppelklickt man in eine Zelle der Spalte C, soll selbiges Makro ausgeführt werden, nur dass dann
der Autofilter verschwindet und neu aufgebaut wird mit selbiger Funktion wie für Spalte B nur dann halt für Spalte C (incl. den vorfilter für Spalte J) erfolgt.
Angefangen und bischen aufgezeichnet hab ich folgendes (aber ist halt fehlerhaft und noch sicherlich nicht optimiert)
Stolperstein war auch immer mal der Autofilter (mal gesetzt, mal nicht gesetzt, mal nicht vorhanden)
So wer kann mir nun helfen und das Ding mal korrigieren/optimieren?
Versuch:

Private Sub Workbook_Open()
DoppelklickerAktiv
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Sub DoppelklickerAktiv()
Sheets("Auftrag").OnDoubleClick = "Doppelklicker"
End Sub

Sub Doppelklicker()
Set MyShell = CreateObject("WScript.Shell")
Usereingabe = InputBox("Maximaler Wert?", "Suche nach", 1, vbOKCancel)
If ActiveSheet.Name = "Aufträge" Then
Select Case Target.Column
Case 2
Range("A2:J2").Select
Selection.AutoFilter
Selection.AutoFilter Field:=9, Criteria1:="x"
Selection.AutoFilter Field:=4, Criteria1:=" Exit Sub
Case Else
Exit Sub
End Select
End If
End Sub
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Bei Doppelklick in Zelle/Spalte Autofiltern
03.12.2009 13:41:06
fcs
Hallo Doppelklicker,
das folgende Makro im VBA-Editor unter der Tabelle "Auftrag" einfügen.
Gruß
Franz
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim wks As Worksheet, Usereingabe
Set wks = Me
Select Case Target.Column
Case 2, 3 'Autofilter ausführen bei Doppelklick in Spalten B oder C
With wks
'prüfen ob Autofilter gesetzt und ggf. alle Daten anzeigen
If .FilterMode = True Then
.ShowAllData
End If
Usereingabe = InputBox("Maximaler Wert?", "Suche nach", 1, vbOKCancel)
If Usereingabe  "" Then
Cancel = True 'Zelle nicht zum Bearbeiten selektieren
'Filterbereich A2:Jxxx
With .Range(.Cells(2, 1), .Cells(.Cells.SpecialCells(xlCellTypeLastCell).Row, 10))
.AutoFilter 'schaltet ggf. einen vorhandenen Autofilter aus
'Autofilter neu aufbauen
.AutoFilter Field:=10, Criteria1:="x" 'Spalte J filtern
.AutoFilter Field:=Target.Column, Criteria1:="

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Doppelklick zum Autofilter in Excel aktivieren


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Wähle das richtige Arbeitsblatt aus:

    • Im Projekt-Explorer auf der linken Seite suche das Arbeitsblatt "Auftrag".
  3. Füge das Makro ein:

    • Kopiere den folgenden Code und füge ihn in das Codefenster des Arbeitsblatts ein:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
    Dim wks As Worksheet, Usereingabe
    Set wks = Me
    Select Case Target.Column
    Case 2, 3 'Autofilter ausführen bei Doppelklick in Spalten B oder C
        With wks
            If .FilterMode = True Then
                .ShowAllData
            End If
            Usereingabe = InputBox("Maximaler Wert?", "Suche nach", 1, vbOKCancel)
            If Usereingabe <> "" Then
                Cancel = True 'Zelle nicht zum Bearbeiten selektieren
                'Filterbereich A2:Jxxx
                With .Range(.Cells(2, 1), .Cells(.Cells.SpecialCells(xlCellTypeLastCell).Row, 10))
                    .AutoFilter 'schaltet ggf. einen vorhandenen Autofilter aus
                    'Autofilter neu aufbauen
                    .AutoFilter Field:=10, Criteria1:="x" 'Spalte J filtern
                    .AutoFilter Field:=Target.Column, Criteria1:="<=" & Usereingabe 'Filter für Spalte B oder C
                End With
            End If
        End With
    End Select
End Sub
  1. Schließe den VBA-Editor:

    • Speichere deine Änderungen und schließe den Editor.
  2. Teste das Makro:

    • Kehre zu Excel zurück und doppelklicke auf eine Zelle in Spalte B oder C, um das Makro auszuführen.

Häufige Fehler und Lösungen

  • Fehler: Autofilter funktioniert nicht
    Lösung: Stelle sicher, dass der Autofilter für den Bereich A2:J2 korrekt gesetzt wurde. Überprüfe auch, ob der Filtermodus aktiviert ist.

  • Fehler: Eingabe-Box zeigt keine Eingabe
    Lösung: Stelle sicher, dass du bei der Eingabe einen Wert eingibst. Wenn du die Eingabe-Box schließt ohne einen Wert einzugeben, wird der Filter nicht angewendet.

  • Fehler: Doppelklick funktioniert nicht
    Lösung: Überprüfe, ob das Makro im richtigen Arbeitsblatt gespeichert wurde und ob die Makros in deinen Excel-Einstellungen aktiviert sind.


Alternative Methoden

  • Verwendung von Schaltflächen: Statt Doppelklick kannst du auch Schaltflächen in Excel verwenden, um das Makro auszuführen. Füge eine Schaltfläche über die Entwicklertools hinzu und weise das Makro zu.

  • Tastenkombinationen: Du kannst das Makro auch einer Tastenkombination zuweisen, um den Autofilter schneller zu aktivieren.


Praktische Beispiele

  • Beispiel 1: Doppelklick auf Zelle B5, um alle Datensätze in Spalte J mit "x" und in Spalte B kleiner oder gleich dem eingegebenen Wert zu filtern.

  • Beispiel 2: Doppelklick auf Zelle C10, um den gleichen Filter anzuwenden, jedoch für die Werte in Spalte C.


Tipps für Profis

  • Optimierung des Codes: Du kannst den VBA-Code weiter optimieren, indem du zusätzliche Fehlerbehandlungen einfügst, um unerwartete Eingaben des Benutzers zu berücksichtigen.

  • Nutzung von benannten Bereichen: Verwende benannte Bereiche für deine Daten, um die Lesbarkeit und Wartbarkeit des Codes zu erhöhen.

  • Dokumentation des Codes: Kommentiere deinen VBA-Code ausführlich, damit andere (oder du selbst in der Zukunft) schnell verstehen, was jeder Teil des Codes macht.


FAQ: Häufige Fragen

1. Wie kann ich den Autofilter zurücksetzen?
Du kannst den Autofilter zurücksetzen, indem du die Methode .ShowAllData auf dem Arbeitsblatt aufrufst.

2. Funktioniert das Makro in allen Excel-Versionen?
Das Makro wurde für Excel 2010 und höher getestet. Es kann jedoch in älteren Versionen Unterschiede im Verhalten geben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige