Habe eine Excel-Liste, in der u.a. auch Kundennamen hinterlegt sind. Wenn ich jetzt nach einem bestimmten Kunden sortieren möchte, muß ich in den „AutoFilter“ auf „Benutzerdefiniert“ gehen. Dann muß ich noch „enthält“ auswählen und dann erst kann ich den Kundennamen eingeben, und mir wird das Ergebnis geliefert.
Habe jetzt einfach mal in die Zelle „K1“ einen Kundennamen eingegeben und versucht, daß das Makro automatisch diesen Namen ausliest und und das Eingabefeld im AutoFilter einsetzt. Mit diesem Code gelingt mir das auch:
Sub Kunde()
Selection.AutoFilter Field:=3, Criteria1:=[K1], Operator:=xlAnd
End Sub
Allerdings arbeitet der Autofilter dann mit der Einstellung „entspricht“, statt „enthält“. Habe auch schon rausgefunden, daß mit …*[K1]*… (also * vor und hinter der eckigen Klammer) die Einstellung „enthält“ gewählt sein müßte, allerdings bekomme ich dann immer die Fehlermeldung:
>Fehler beim Kompilieren: Erwartet: Ausdruck
wie ich das sehe, kannst Du folgendermassen unterscheiden:
Criteria1:="=Abc" wirkt so: entspricht 'Abc'
Criteria1:="=Abc\*" wirkt so: beginnt mit 'Abc'
Criteria1:="=\*Abc\*" wirkt so: enthält 'Abc'
Jetzt kannst Du das Ganze noch mit einer Inputbox verbinden:
Sub AutoFilterAn()
Dim Suchbegriff As String
Suchbegriff = InputBox("Bitte Kriterium eingeben:", "AutoFilter")
If Suchbegriff = "" Then
Selection.AutoFilter Field:=1
Else
Selection.AutoFilter Field:=1, Criteria1:="=\*" & Suchbegriff & "\*"
End If
End Sub
Somit müsste das Makro genau das machen, was Du möchtest…
THAT´S IT !!!
Kompetenter und superschneller Support! Spitzen-Seite … werde ich weiterempfehlen!
Zwei kleinere Probleme hätte ich noch:
1.
Wenn ich nach den Kunden suchen lasse und später wieder die komplette Liste anzeigen lasse, stehet der Cursor meist am Anfang der Tabelle. Das ist aber gerade bei meiner sehr umfangreichen Tabellen nicht dienlich. Besser wäre es, wenn der Cursor am Ende der Tabelle stehen würde. Das kann man zwar mit „Strg + Ende“ erreichen, aber da ich meist noch so 30 – 40 Zeilen nur mit Formeln habe, setzt sich der Cursor am Ende dieser Formeln. Gibt es eine Möglichkeit, das der Cursor sich ans Ende der Felder setzt, wo tatsächlich was drinsteht (nicht Formeln)?
Wenn ich irgendwann an der letzten „Formel-Zeile“ angekommen bin, muß ich wieder neue Formeln für die nächsten Zeilen erzeugen, damit ich weiter arbeiten kann. Das kann ich ja ganz einfach durch runterkopieren hinbekommen. Allerdings ist das ein bischen lästig und außerdem stehen die anderen Herrschaften hier im Unternehmen schon vor einem fast unüberwindbarem Problem, wenn ich mal im Urlaub bin…
Gibt´s ´ne Möglichkeit, das ganze so zu gestalten, dass automatisch –wenn in die letzte Spalte geschrieben wird- in die nächste Spalte die Formel kopiert wird. Damit hätte sich dann auch mein obiges Problem gelöst:wink:)
Dieses Makro durchläuft eine bestimmte Spalte von oben nach unten und bleibt in der ersten leeren Zelle stehen. Das funktioniert bei Dir natürlich nur, wenn zwischendurch keine Leerzeilen stehen…
Public Sub GeheLetzteZeile()
Dim Z As Integer
Dim S As Integer
Z = 1 'Hier Tabellenanfang (Zeilen-Nr.) eintragen
S = 1 'Hier die zu durchsuchende Spalte (Spalten-Nr. a=1 b=2 usw.) eintragen
With ActiveWorkbook.ActiveSheet
Do While Not .Cells(Z, S) = ""
Z = Z + 1
Loop
.Cells(Z, S).Activate
End With
End Sub
Zu Deiner zweiten Frage wird’s schon etwas schwieriger… Auch dieses Problem ließe sich mit einem Makro lösen. Ich habe jetzt nicht die Zeit, Dir ein Beispiel zu programmieren. Aber vielleicht kannst Du Dir selbst helfen: Zeichne einfach mal mit dem Excel-Makrorecorder auf, während Du eine Formel-Zeile kopierst und an der entsprechenden Stelle einfügst. Dieser Code, kombiniert mit obigem Makro (um die erste freie Zeile zu finden) müsste dann (zwar nicht automatisch, aber auf Knopfdruck) eine (zwei, zehn, hundert) neue Formelzeilen erzeugen…!
Und schon wieder konnte mir auf Anhieb geholfen werden:wink:)
Allerdings kriege ich das 2. Problem mit Deinem Vorschlag nicht gelöst.
Wenn Du noch mal ´ne Minute Zeit hast, wäre ich Dir dankbar, wenn mir nochmal schnell was programmieren könntest.