# TIA Wincc flexibel VB-Skript Case bereich



## zotos (28 April 2014)

Wie kann ich denn bei TIA WinCC flexibel Skripten einen Bereich abdecken?

```
Select Case myVar
 Case 1
  'statementblock_1 
 Case [B][COLOR=#ff0000]2 To 6[/COLOR][/B] 'geht nicht, ist aber so von Microsoft beschrieben
  'statementblock_2
 Case 7, 8, 9, 10 'geht ist aber umständlich
  'statementblock_n
End Select
```

Mit .. und - habe ich auch schon experimentiert und bin kurz davor es mit IF ELSIF zu basteln.


----------



## georg28 (28 April 2014)

Aus dem Handbuch von WinCC V13 rauskopiert für TIA

CASE "Tag_Value" OF
0 :
"Tag_1" := 1;
1,3,5 :
"Tag_2" :=1;
6..10 :
"Tag_3" := 1;
16,17,20..25 :
"Tag_4" := 1;
ELSE "Tag_5" := 1;
END_CASE;


----------



## zotos (28 April 2014)

Danke für Deine Mühe Du hast da aber SCL Code kopiert und ich habe nach einem VB-Skript gefragt.


----------



## rostiger Nagel (28 April 2014)

Versuch doch mal ob folgendes geht


```
Case > 2 And <6
```


----------



## zotos (28 April 2014)

Nee geht auch nicht, ich habe aber in der hilfe von WinCC flexibel (also nicht TIA) folgenden Hinweis gefunden:


```
[TABLE="width: 87%"]
[TR]
[TD][SIZE=2]Select Case[/SIZE]
[/TD]
[TD][SIZE=2]Ausdrücke, die das [B]Is[/B]-Schlüsselwort oder einen oder mehrere Vergleichsoperatoren enthalten.
Ausdrücke, die einen bestimmten Wertebereich unter Verwendung des [B]To[/B]-Schlüsselworts enthalten.[/SIZE]
[/TD]
[/TR]
[/TABLE]
```

Zufinden unter "Nicht in VBScript enthaltene Visual Basic für Applikationen-Funktionen".


----------



## PN/DP (28 April 2014)

zotos schrieb:


> ```
> Case [B][COLOR=#ff0000]2 To 6[/COLOR][/B] 'geht nicht, ist aber so von Microsoft beschrieben
> 'statementblock_2
> Case 7, 8, 9, 10 'geht ist aber umständlich
> ```


Ich meine, das VBScript kann nur die mit Komma getrennte Ausdruckliste. Ein Bereich mit "To" geht nur im "richtigen" Visual Basic.
Das ist auch so in der VBScript-Beschreibung in der WinCC flexible Hilfe dokumentiert. Was sagt die TIA-Hilfe?

VBScript: Select Case Statement
Visual Basic: Select...Case Statement

Harald


----------



## zotos (28 April 2014)

Dann wird es eben ein ELSIF Massaker.


----------



## JesperMP (28 April 2014)

Anstatt SELECT CASE, dann eine Reihe von IF THEN ELSEIF Statements.


```
IF MyVar = 1 THEN
  'Statements for 1
ELSEIF (MyVar >= 2) AND (MyVar <=6) THEN
  'Statements for 2..6
ELSE
  'Alle andere Fälle
ENDIF
```


----------



## faust (28 April 2014)

Hallo,

die ganz schmutzige Lösung wäre:

Select Case true
    Case MyVar = 1

    Case (MyVar >= 2 And myVar <=6)

End Select


Gruß, Fred


----------



## JesperMP (28 April 2014)

faust schrieb:


> die ganz schmutzige Lösung wäre:
> 
> Select Case true
> Case MyVar = 1
> ...


Funktioniert das tatsächlich ?
Ich meine das nach jeden Case kann nur ein Integerzahl sein.


----------



## rostiger Nagel (28 April 2014)

faust schrieb:


> Hallo,
> 
> die ganz schmutzige Lösung wäre:
> 
> ...



neh das funktioniert auch nicht, hatte ich vorhin auch mal eingetippt, flex meckert da.


----------



## PN/DP (28 April 2014)

JesperMP schrieb:


> Ich meine das nach jeden Case kann nur ein Integerzahl sein.


Das kann auch ein String sein. siehe z.B. das zweite Skript SetSysVar

Die SELECT-Testexpression kann aber nur einmal angegeben werden, in den einzelnen Case können dann nur konstante Ergebnisse der Testexpression aufgeführt werden, aber keine neue condition welche erst zur Laufzeit berechnet wird wie die Idee von faust.

Harald


----------



## faust (29 April 2014)

rostiger Nagel schrieb:


> neh das funktioniert auch nicht, hatte ich vorhin auch mal eingetippt, flex meckert da.



Was wird denn genau bemeckert? Ich habe dieses Konstrukt schon mehrfach in verschiedensten Konstellationen verwendet, sogar mit Case-Statements, die fast völlig unterschiedlich waren. Habe es meist der Übersichtlichkeit wegen getan...


Gruß, Fred


Edit:
Gerade mit WinCC Comfort V13 (entspricht im Wesentlichen dem Flex) kurz erzeugt:

            Select Case True
                Case (optionMessage_messageDialogResult = 1)
                    'nop
                Case (pageCtrl_currentPageNo >= 1000 And pageCtrl_currentPageNo <= 2000)
                    'nop
            End Select


Der Compiler meckert nicht.


----------



## rostiger Nagel (29 April 2014)

faust schrieb:


> Was wird denn genau bemeckert? Ich habe dieses Konstrukt schon mehrfach in verschiedensten Konstellationen verwendet, sogar mit Case-Statements, die fast völlig unterschiedlich waren. Habe es meist der Übersichtlichkeit wegen getan...
> 
> 
> Gruß, Fred
> ...



Hi Fred,
neh das Funktioniert doch, ich hatte es gestern so versucht.

```
Case (myVar >2 And <6)
```

so wie du es gemacht hast funktioniert es


```
Case (myVar >=2 And myVar <=6)
```

gruß RN


----------

