Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1680to1684
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

Brauche ich 3 Varianten eines Befehls?

Brauche ich 3 Varianten eines Befehls?
10.03.2019 10:18:35
Werner
Hallo Forum,
mit meinem aktuellen Projekt bin ich - dank intensiver Foren-Unterstützung - fast am Ziel. Jetzt muss ich nur noch den entsprechenden Befehl absetzen. Der sieht (maximal) so aus:
ActiveSheet.Range(CFRange).AutoFilter _
Field:=Loop1, _
Criteria1:=Crit1, _
Criteria2:=Crit2, _
Operator:=OpName
Maximal deshalb, wie die Parameter Criteria2 und Operator nur dann benutzt werden dürfen, wenn die dazu angegebene Variable nicht leer ist. Damit entstehen 3 Möglichkeiten.
1. Criteria1
2. Criteria1 + Operator
3. Criteria1 + Criteria2 + Operator
Bei Möglichkeit 3 muss der Parameter Operator immer angegeben werden.
Wenn nach "leeren Zeilen" gefiltert werden soll, ist Criteria1 ein "=". Wird dazu der Parameter Operator: benutzt, gibt es einen Laufzeitfehler 1004. Der Makro-Recorder generiert diesen Parameter ebenfalls nicht für die entsprechenden Filterung.
Was kann ich tun, dass ich nicht für jede dieser 3 Möglichkeiten einen eigenen Aufruf realisieren muß?
Wer kann mir weiterhelfen?
Gruß
Werner

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Brauche ich 3 Varianten eines Befehls?
10.03.2019 10:40:39
fcs
Hallo Werner,
versuche es mal so - mit Prüfung der übergebenen Parameter
LG
Franz
    If Crit1 = "=" Then
ActiveSheet.Range(CFRange).AutoFilter Field:=Loop1, Criteria1:=Crit1
ElseIf IsEmpty(OpName) And IsEmpty(Crit2) Then
ActiveSheet.Range(CFRange).AutoFilter Field:=Loop1, Criteria1:=Crit1
ElseIf Not IsEmpty(OpName) And IsEmpty(Crit2) Then
ActiveSheet.Range(CFRange).AutoFilter Field:=Loop1, Criteria1:=Crit1, Operator:=OpName
ElseIf Not IsEmpty(OpName) And Not IsEmpty(Crit2) Then
ActiveSheet.Range(CFRange).AutoFilter Field:=Loop1, _
Criteria1:=Crit1, _
Operator:=OpName, _
Criteria2:=Crit2
Else
MsgBox "Übergabe der Parameter für Autofilter ist fehlerhaft"
End If

Anzeige
AW: Brauche ich 3 Varianten eines Befehls?
10.03.2019 11:04:16
Werner
Hallo Franz (fcs),
Danke für Deine Antwort. Aber auch in Deiner Lösung brauche ich 3 verschiedene Befehle. Eine solche Lösung hatte ich schon. Ich hatte gehofft (und hoffe noch immer) dass es auch andere Möglichkeiten gibt.
Außerdem sind Deine ersten beiden Befehle identisch, weil bei "=" der Parameter "Operator:" nicht angegeben werden darf. Lauffähig wäre es trotzdem. Diese Bedingung wird (für Dich nicht erkennbar) bereits vorab dahingehend ausgewertet, dass dann Operator auf "" gesetzt wird.

Gruß
Werner
AW: Brauche ich 3 Varianten eines Befehls?
10.03.2019 16:36:08
fcs
Hallo Werner,
was ist denn so schlimm, wenn du die Anweisung in mehreren (3 bis 4) Versionen wiederholen muss, damit es funktioniert?
Es sieht natürlich etwas eleganter aus, wenn man es in einer Anweisung schafft.
Aber für mich gilt:
Funktion kommt vor Schönheit. Wobei man eine vernünftige Form der Programmierung natürlich nicht vergessen darf.
Operator ist in der Autofilter-Methode normalerweise ein nummerischer Wert. Es ist wahrscheinlich nicht hilfreich, ihn ggf. auf "" zu setzen.
LG
Franz
Anzeige
Das sind aber doch schon vier Äste vor ELSE
10.03.2019 11:04:54
lupo1

If  IsEmpty(OpName) And IsEmpty(Crit2) Then
ActiveSheet.Range(CFRange).AutoFilter Field:=Loop1, Criteria1:=Crit1
ElseIf Not IsEmpty(OpName) And IsEmpty(Crit2) Then
ActiveSheet.Range(CFRange).AutoFilter Field:=Loop1, Criteria1:=Crit1, Operator:=OpName
ElseIf Not IsEmpty(OpName) And Not IsEmpty(Crit2) Then
ActiveSheet.Range(CFRange).AutoFilter Field:=Loop1, _
Criteria1:=Crit1, _
Operator:=OpName, _
Criteria2:=Crit2
Else
MsgBox "Übergabe der Parameter für Autofilter ist fehlerhaft"
End If
Es sollte aber auch gehen:
ActiveSheet.Range(CFRange).AutoFilter Field:=Loop1, Criteria1:=Crit1, _
Operator:=OpName, _
Criteria2:=Crit2

Dafür muss vor der Anweisung Operator und Criteria2 auf IsEmpty gecheckt werden - und dann bei TRUE Mengenbeschreibungen für eine Gesamtmenge DUMMY-mäßig hinzugefügt werden.
Anzeige
AW: Das sind aber doch schon vier Äste vor ELSE
10.03.2019 11:07:25
Werner
Hallo lupo1,
auch Dir Danke für Deine Antwort. Leider verstehe ich nicht, wie ich das umsetzen soll.
Gruß
Werner
Hier ein Beispiel
10.03.2019 11:15:07
lupo1
Apfel &gt 100 Gramm entspricht
Apfel &gt 100 Gramm und
Birne &gt= 0 Gramm
Wenn Du die Empty-Dinger entsprechend hinbekommst, reicht letztere Anweisung für alle Fälle aus.
AW: Brauche ich 3 Varianten eines Befehls?
10.03.2019 10:52:23
Sepp
Hallo Werner,
teste mal.
  ActiveSheet.Range(CFRange).AutoFilter _
    Field:=Loop1, _
    Criteria1:=Crit1, _
    Criteria2:=IIf(Len(Crit2), Crit2, ""), _
    Operator:=IIf(Len(OpName), OpName, xlOr)

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Brauche ich 3 Varianten eines Befehls?
10.03.2019 11:22:45
Werner
Hallo Sepp,
auch Dir herzlichen Dank.
Ich werde es im Laufe des Tages probieren und melde mich wieder.
Es sieht auf jeden Fall "sehr gut" aus. So eine Lösung hatte ich mir vorgestellt, wusste aber nicht, wie sie zu realisieren ist.
Gruß
Werner
AW: Brauche ich 3 Varianten eines Befehls?
10.03.2019 14:23:12
Hajo_Zi
Hallo Werner,
offen bedeutet es soll noch eine Antwort kommen.
Warum ist dein Beitrag Offen.
Du willst doch was machen. Soll jemand vorbei kommen?

AW: Brauche ich 3 Varianten eines Befehls?
10.03.2019 16:47:31
Werner
Hallo Hajo,
ich habe doch geschrieben, dass ich den Vorschlag von Sepp probieren möchte, und mich dann nochmals melde. Das mache in nun hiermit.
Hallo Sepp,
Deinen Vorschlag habe ich getestet, allerdings mit wenig Erfolg. Bei manchen Aufrufen (z. B. Farbfilter) darf der Parameter "Operator:" nicht angegeben werden. Auch "Operator:=vbNullString" bringt einen Laufzeitfehler. Und wenn man mit Criteria1:="=" und Criteria2:=vbNullString sowie Operator:=vbNullString arbeitet, wird daraus intern ein Criteria2:="=" und ein "Operator:=xlAnd". Dies habe ich über den Projekt-Explorer herausgefunden.
Ich bedanke mich bei allen, die mir geschrieben habe.
Inzwischen ist mir klar, dass es nur eine Lösungsmöglichkeit gibt: mit 3 verschiedenen Aufrufen.
Mein Problem ist damit erldigt.
Gruß
Werner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige