Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1084to1088
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Filterkriterium als String übergeben

Filterkriterium als String übergeben
markus2
Hallo Forum,
Ich habe folgendes Problem mit VBA.
Ich möchte einem Autofilter als Kriterium einen String übergeben, welcher dummerweise mit einem Gleichheitszeichen beginnt. Hier ein Beispiel "=XB1+E09"
VBA interpretiert dies logischerweise als Formel. Das möchte ich vermeiden, da es sich um einen Bezeichner handelt - und nicht um eine Formel.

filterkriterium = "=XB1+E09"
Sheets(1).Cells.AutoFilter field:=filter_spalte, Criteria1:=Cstr(filterkriterium)
Ich habe bereits den Autofilter sowie den Spezialfilter probiert.
Ebenso habe ich mit der Umwandlung Cstr herumgespielt. Alles ohne Erfolg.
Gibt es da einen einfachen Trick? :)

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Filterkriterium als String übergeben
09.07.2009 02:21:57
Adelhorst
Hallo markus2.
Mit deinem Vorhaben kennne ich mich noch nicht so aus,a ber versuche doch mal 'filterkriterium' als String zu deklarieren bzw. "'=XB1+E09".
Das 'Häkchen' formatiert den Zelleneintrag dann als Textstring.
Gruss
Adelhorst
AW: Filterkriterium als String übergeben
09.07.2009 03:13:19
markus2
Hallo Adelhorst,
Danke für die Antwort. Deinen Vorschlag habe ich gleich mal getestet.
Leider ohne Erfolg.
Dim aok As String
aok = ThisWorkbook.Sheets(1).aok.Value
Sheets(3).Cells.AutoFilter field:=AOK_spalte, Criteria1:=Cstr(aok)
aok bekommt den Wert "=E1+ZS1"
Der Autofilter nimmt trotzdem "E1+ZS1" als Kriterium (kann man im Autofilter nachgucken)
Übrigens:
Den Trick mit dem doppelten Gleichheitszeichen kann ich in meinem Fall nicht anwenden, da ich später auch einen Spezialfilter verwende. Dieser hat nicht 1 Filterkriterium, sondern gleich ~40 welche alle einzeln erst geprüft, verändert und später zurückverändert werden müssten.
Sheets(3).Cells.AutoFilter field:=AOK_spalte, Criteria1:= "=" & aok  
Ich suche also einen Methode, wie ich VBA erkläre, das er "=E1+ZS1" nicht als Formel interpretieren soll.
Anzeige
AW: Filterkriterium als String übergeben
09.07.2009 07:43:08
Tino
Hallo,
versuche es mal so.
filterkriterium = "==XB1+E09"
Gruß Tino
AW: Filterkriterium als String übergeben
09.07.2009 17:18:42
markus2
Hallo Tino,
daran habe ich auch schon gedacht. Ich erwähnte dies auch in meiner 1. Antwort :)
Für den Autofilter ist diese Variante geeignet.
Leider nicht für den Spezialfilter. Ich will auch erklären warum:
Gegeben ist eine Tabelle mit 16.000 Zeilen, welche gefiltert werden soll.
Gegeben ist ebenfalls ein zweites Blatt mit einer Spalte, in der ~40 Filterkriterien stehen:
Diese sieht in etwa so aus: (Anzahl und Inhalt ist variabel)
AOK
=XB1+XA7
=E17+S1
=E18+S1
=E19+S1
=E20+S1
=E21+S1
E22+S1
=E23+S1
=E24+S1
=E25+S1
=E26+S1
=E28+S1
E29+S1
=E30+S1
=E31+S1
=E32+S2
=E33+S1
E34+S1
E35+S1
E36+S1
=E37+S1
=E38+S1
E39+S1
=E40+S1
E41+S1
=E42+S1
=E43+S1
=E20+S2
E23+S2
=E27+S1
=E32+S1
=E32+S3
=E40+S2
E40C+S3
=XB2+XA8
=XB2+XB8
=YG0+YA1
Der Spezialfilter wird dann wie folgt angewendet:
Sheets(1).UsedRange.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range( _
Sheets(2).Cells(1, 1), Sheets(2).Cells(endzeile, 1))
Alle Kriterien ohne Gleichheitszeichen funktionieren korrekt. Die anderen jedoch nicht.
Um mit der vorgeschlagenen Lösung arbeiten zu können, müsste:
- jede Zelle geprüft werden, ob das erste Zeichen ein "=" ist
- wenn ja, dann setzte ein 2. "=" davor
- merke dir die Zelle, in der du etwas verändert hast
- wende den Spezialfilter an
- lösche das 2. "=" wieder in den vorher gemerkten Zellen
Das ist absolut machbar - jedoch würde es mich ärgern, wenn es keinen einfacheren Weg geben würde.
Denn das richtige Filterkriterium ist ja an sich schon vorhanden.
Er darf es nur nicht als Formal interpretieren.
Nur falls ihr alle sagt "Nein, das geht nur so", dann mache ich das so :)
Anzeige
AW: Filterkriterium als String übergeben
09.07.2009 17:58:07
Tino
Hallo,
versuche mal mit Platzhalter zu arbeiten. (? Oder *)
Gruß Tino
da fällt mir noch ein...
10.07.2009 08:34:13
Tino
Hallo,
, Du kannst beim Spezialfilter auch mit oder arbeiten, indem Du als Kriterium einmal mit und einmal ohne = Zeichen angibst, um dies als Oder zu bekommen musst Du diese nebeneinander schreiben nicht untereinander.
Beispiel:
With Sheets(2)
.Range("A1") = "AOK"
.Range("B1") = "AOK"
.Range("A2") = "'=E29+S1"
.Range("B2") = "'E29+S1"
Sheets(1).UsedRange.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=.Range("A1:B2")
End With
Gruß Tino

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige