Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1416to1420
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

Select Case - Syntxfehler?

Select Case - Syntxfehler?
03.04.2015 17:44:47
Dirk
Hallo und Frohe Ostern,
untenstehender Modulcode liefert die korrekten MsgBoxen nur dann, wenn ich den Block mit dem Select Case auskommentiere u. die If-Anweisungen wieder "aktiviere" (Auskommentierung aufheben).
Mit Select Case wird jedoch bei wert1>0 (also auch bei wert1=25) immer nur die gekennzeichnete MsgBox mit "#1....." angezeigt - wobei wert1 richtig ermittelt, aber immer nur med1 gezeigt wird.
Nach dem ersten Case wird also zum Ende gesprungen.
Wo liegt mein Fehler bzw. kann man hier nicht mit Select Case arbeiten ?
Gruß
Dirk
Option Explicit
Public Sub Wert_Media()
Dim med1, med2, med3 As String
Dim wert1 As Double
med1 = Worksheets("Tabelle4").Range("F11").Text
med2 = Worksheets("Tabelle4").Range("F12").Text
med3 = Worksheets("Tabelle4").Range("F13").Text
wert1 = Worksheets("Tabelle4").Range("C1").Value
'If wert1  0 And wert1  10 And wert1  20 And wert1  30 Then MsgBox "Die Summe ist >30" & vbCr & vbCr & "Es kommt nix weiter !"
Select Case wert1
Case Is  0 And wert1 0  _
angezeigt
Case Is > 10 And wert1  20 And wert1  30
MsgBox "Die Summe ist >30" & vbCr & vbCr & "Es kommt nix weiter !"
End Select
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Select Case - Syntxfehler?
03.04.2015 18:05:09
Nepumuk
Hallo,
einfach so:
Select Case wert1
    Case Is <= 0
        MsgBox "Die Summe ist <=0" & vbCr & vbCr & "Es kommt nix weiter !"
    Case Is < 10
        MsgBox "#1" & vbCr & wert1 & vbCr & med1
    Case Is < 20
        MsgBox "#2" & vbCr & wert1 & vbCr & med2
    Case Is < 30
        MsgBox "#3" & vbCr & wert1 & vbCr & med3
    Case Else
        MsgBox "Die Summe ist >30" & vbCr & vbCr & "Es kommt nix weiter !"
End Select

Gruß
Nepumuk

Anzeige
Das ist syntaktisch falsch, ...
03.04.2015 18:07:22
Luc:-?
…Dirk,
denn Case Is > 0 And wert1 richtet sich nach dem Teil vor And. Du kannst das alles umkehren, dann reicht Case Is > 30, Case Is > 20 usw. Anderen falls ist es etwas komplizierter.
Gruß + FrOst, Luc :-?

Syntaktisch wirkungslos in deinem Sinne ...
03.04.2015 21:06:33
Luc:-?
…wäre richtiger formuliert; Dirk,
da Case Is > 0 And wert1 < 10 so aufgelöst wird:
Case Is > CLng(CBool(0) And wert1 < 10)
Das ergibt immer, egal wie groß wert1 ist, Case Is > 0. Damit wdn allen Folge-Cases nicht mehr ausgeführt.
Luc :-?

Syntxfehler, ja
03.04.2015 18:22:48
Erich
Hi Dirk,
doch, hier kann man gut mit Select Case arbeiten. Probier mal

Select Case wert1
Case Is  30
MsgBox "Die Summe ist >30" & vbCr & vbCr & "Es kommt nix weiter !"
End Select
Was du geschrieben hast, z. B. "Case Is > 10 And wert1 < 20", ist syntaktisch richtig,
wirkt aber sicher anders als du das möchtest. VBA ird hier zunächst das, was nach dem > steht, auswerten,
also den Ausdruck "10 And wert1 In einer Case-Bedingung kann man nicht mit "And" mehrere Bedingungen verknüpfen.
Das ist hier auch gar nicht nötig. Wenn wert1 nicht positiv ist, schlägt das 1. Case zu.
Im 2. Case muss dann nicht mehr geprüft werden, ob wert1 positiv ist.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Syntxfehler, ja
03.04.2015 18:32:04
Nepumuk
Hallo Erich,
In einer Case-Bedingung kann man nicht mit "And" mehrere Bedingungen verknüpfen.
Das stimmt so nicht. (blödes)Beispiel:
Public Sub Test()
    Dim wert1 As Double
    wert1 = 15
    Select Case True
        Case wert1 <= 0
            MsgBox "#0"
        Case wert1 >= 10 And wert1 <= 15
            MsgBox "#1"
        Case wert1 <= 20
            MsgBox "#2"
        Case wert1 <= 30
            MsgBox "#3"
        Case Else ' Case Is > 30
            MsgBox "#4"
    End Select
End Sub

Du siehst, es lassen sich durchaus Bedingungen formulieren.
Gruß
Nepumuk

Anzeige
Danke! - stimmt
03.04.2015 19:18:03
Erich
Hi Nepumuk,
ja, das stimmt - da habe ich mich mit meiner Aussage vergaloppiert. :-(
Nach "Select Case True" geht das natürlich, sogar (na ja) einigermaßen sinnvoll, wie dein Beispiel zeigt.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: Syntxfehler, ja
03.04.2015 20:51:37
Dirk
Hallo Erich,
bitte entschuldige, deine Antwort habe ich zu spät gesehen.
Genau so habe ich es zwischenzeitlich auch realisiert.
Danke auch dir für die Erläuterungen.
Die Syntax: Case Is > 10 And wert1 habe ich fast 1:1 aus einem eBook, das ich hier mal im Archiv gefunden habe (FernUni Hagen, 1999, Seite 41).
Aber stimmt: Dort steht diese And-Bedingung an letzter Stelle vor einem Case Else...
Select Case wert1   'aus eBook
Case Is  8 And wert1 
An dieser Stelle scheint es richtig zu sein. Zufall oder ein echt blödes Beispiel für einen DAU - womit ich mich dann wohl geoutet hätte. :-(
Gruß
Dirk
P.S.: Gerade habe ich das eBook-Beispiel getestet, was ich wohl hätte vorher machen sollen.
wert1 = 11 ; Ergebnis: MsgBox "Zahl ist 9 oder 10"
wert1 = 1,1 ; Ergebnis: MsgBox "Zahl außerhalb des Bereichs"
wert1 = 10 ; Ergebnis: MsgBox "Zahl ist 9 oder 10"
wert1 = 100 ; Ergebnis: MsgBox "Zahl ist 9 oder 10"
Also ich lasse wohl zukünftig die Finger weg von And in Select Case .

Anzeige
gelöst
03.04.2015 19:13:08
Dirk
Hallo Nepumuk, Hallo Luc,
ich habe beide Varianten ausprobiert u. wie von euch nicht anders gewohnt, funktionieren sie PERFEKT !
Mille grazie for the Lösungen... ;-)
Favorisiert habe ich Nepumuks Vorschlag, da ich damit weniger zu ändern habe in meiner Originaldatei.
Dank deiner Erklärungen, Luc, verstehe ich zwar die Syntax und Arbeitsweise von Select Case etwas besser, aber warum gibt es die Möglichkeit der And-Bedingung?
Wenn ohnehin nur bis vOR das And betrachtet wird, dann ist And doch Ü wie Überflüssig .(?) Dessen Sinn verstehe ich irgendwie nicht richtig.
Besten Dank und bis demnächst - FrOst ! (interessante, passende Schreibweise)
Dirk

Anzeige
AW: gelöst
03.04.2015 20:11:35
Nepumuk
Hallo,
Ganz einfach: Logische Operatoren können nur logische Werte zurückgeben. Du würdest mit einen And einen numerischen Wert mit einen logischen Wert vergleichen.
Gruß
Nepumuk

Siehe oben! owT
03.04.2015 21:08:38
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige