Visual Basic Script (VBS) ist
eine auf Visual Basic basierende Scriptsprache. Ein VB-Script
benötigt immer einen Interpreter "Scripting Engine" zum
Auszuführen. "Scripting
Engines" sind in verschiedenen Programmen integriert, z.B. HTML-Browsern und eben auch in CATIA V5.
Selbstverständlich kommt Windows selbst auch mit einem
VB-Interpreter daher und ermöglicht somit das direkte Ausführen von
VB-Scripten. Im Gegensatz zu Visual Basic (VB) und Visual Basic
for Applications (VBA) verzichtet die Scripting Engine auf das
deklarieren von Variablen, deshalb können die hier
bereitgestellten Code-Schnipsel nicht immer 1 zu 1 in VBA
Projekte übernommen werden.

VBS
Grundlagen
Seiteninhalt:

Catia möchte, dass der
Hauptteil des Scripts zwischen Sub CATMain()
und dem dazugehörigen End Sub steht. Aus
diesem Grund wird man diesen Aufbau hier oft
begegnen. Wenn man die Beispiele in einer ".vbs"
Dateie verbauen möchte, so lässt man Sub CATMain() und
das dazugehörige End Sub einfach weg.
Nur für
Scripts die direkt unter CATIA laufen sollen ! |
|
Sub
CATMain()
' hier steht der
eigentliche Programmteil
End
Sub |

Variable
in VBS
Mal von Feldvariablen
(Arrays) abgesehen, ist es in VBS nicht zwingend
notwendig
eine Variable zu deklarieren. Das heißt, weder ihren
Datentyp zu bestimmen, noch sie anzumelden.
Folglich kann an jeder Stelle im Script eine Buchstaben-/Zahlenkombination direkt als Variable genutzt werden. Dennoch
ist das Deklarieren natürlich auch möglich.
|
public
GobalVariable ' globale
Variable anmelden
Sub
CATMain()
dim Variable1
' nur anmelden
dim Variable2
as String ' anmelden
und Typ zuweisen
dim Variable3
as Integer ' anmelden
und Typ zuweisen
End
Sub |
|
Boolean |
Enthält entweder True oder False. |
Integer |
Ganzzahliger Wertebereich von
-32.768 bis 32.767 |
Single |
Gleitkommazahlen mit einfacher
Genauigkeit |
Double |
Gleitkommazahlen mit doppelter
Genauigkeit |
Sting |
Zeichenkette |
|
Im Gegensatz zu allen
anderen Variablen müssen Arrays in VBS deklariert werden.
Dabei wird auch die maximale Anzahl der Arrays
(Felder) bestimmt.
|
Sub
CATMain()
dim ArrayVariable1(5)
' 5 gibt Anzahl der Felder an,
da bei 0 begonnen wird, hat das Array 6 Felder
End
Sub |
Werte zuweisen:
|
Variable1 = true
' Wahrheitswert ture oder false
Variable2 = "Text"
' Zeichen bzw. Zeichenkette
Variable3 = 123
' Zahl
FeldVariable1 (0)
= "erstes Element"
' erstes Element einer
eindimensionalen Feldvariable (Array) als
Text
FeldVariable2 (1) =
"zweites Element"
' zweites Element einer
eindimensionalen Feldvariable (Array)
als Text
FeldVariable1(0,1)
=
"erste Dimension - erstes Element"
' zweidimensionale Feldvariable
FeldVariable1(1,2)
=
"zweite Dimension - drittes Element"
' zweidimensionale Feldvariable |
Dynamische
Feldvariablen (Arrays)
Bei dynamischen Arrays
kann die Anzahl der Felder während der Laufzeit
bestimmt und erweitert werden.
|
Sub
CATMain()
dim DynArrayVariable()
Felder =
5
ReDim DynArrayVariable(Felder)
' Anzahl Felder bestimmen
Felder = Felder +3
ReDim Preserve DynArrayVariable(Felder)
' Anzahl der Felder erweitern, und
vorhandene Feldinhalte beibehalten
End
Sub |
Inhalt
einer Feldvariable umkehren
mit der folgenden Sub
kann der Inhalt einer Feldvariable (Reihenfolge des
Inhalts) umgekehrt werden.
|
Sub
ReverseArray(ByRef aArray)
l = UBound(aArray)
h = Int(l/2)
for i = 0
to h
s = aArray(i)
aArray(i) = aArray(l-i)
aArray(l-i) = s
next
End Sub |
Inhalt
einer Feldvariable
löschen

Datentyp einer
Variable ermitteln
Da in VBS weder der Datentyp noch
die Variable selbst deklariert werden muss, kann es unter
Umständen mal nötig sein den aktuellen Datentyp einer Variable
zu ermitteln, das geht so:
|
Sub
CATMain()
MsgBox
TypeName(variable), vbInformation
End
Sub |
Datentyp (Variableinhalt)
umwandeln:
CStr(Variable)
' Wandelt in Typ
String
(Text) |
CVar(Variable)
' Wandelt in Typ Variant
|
CInt(Variable)
' Wandelt in Typ Integer, mit
Rundung |
CDate(Variable)
' Wandelt in Typ Datum
|
CSng(Variable)
' Wandelt in Typ Singel
|
CCur(Variable)
' Wandelt in Typ Währung
|
CDbl(Variable)
' Wandelt in Typ Double
|
CBool(Variable)
' Wandelt in Typ Boolean
|
CLng(Variable)
' Wandelt in Typ Long, mit
Rundung |
|
Beispiel: String in
einen Integer wandeln |
|
Sub
CATMain()
Zahl = CInt(Text) '
wandelt die Zeichen in der Variable Text in einen Integer und
weist sie der Variable Zahl zu
End
Sub |
|

+ |
Addition |
^ |
Potenz |
- |
Subtraktion |
|
|
* |
Multiplikation |
|
|
/ |
Division |
|
|
|
Round -
Zahl kaufmännisch runden
|
Sub
CATMain() Zahl = 2,123456
Zahl =
round(Zahl,2)
' das
Ergebnis wird 2,12 sein
MsgBox Zahl
End
Sub |
NXOpen: System.Math.Zahl =
round(Zahl,2)
' System muss per
"Imports System" eingebunden werden |
Sqr -
liefert die
Quadratwurzel einer Zahl
|
Sub
CATMain()
Zahl =
Sqr(9)
' das
Ergebnis wird 3 sein
MsgBox Zahl
End
Sub |
Abs -
liefert den positiven
Wert einer Zahl zurück
|
Sub
CATMain()
PosZahl =
Abs(-5.25)
' das
Ergebnis wird 5.25 sein
MsgBox PosZahl
End
Sub |
Fix -
liefert den ganzzahligen
Wert einer Gleitkommazahl zurück
|
Sub
CATMain()
GanzZahl
= Fix(-5.25)
' das
Ergebnis wird -5 sein
MsgBox GanzZahl
GanzZahl = Fix(5.75)
' das
Ergebnis wird 5 sein
MsgBox GanzZahl
End
Sub |
Int -
rundet immer auf die
nächst niedrigere Ganzzahl
|
Sub
CATMain()
GanzZahl
= Int(-5.25)
' das
Ergebnis wird -6 sein
MsgBox GanzZahl
GanzZahl = Int(5.75)
' das
Ergebnis wird 5 sein
MsgBox GanzZahl
End
Sub |
isNumeric -
prüft ob es sich bei
einer Zeichenkette (String) um einen Zahlenwert
handelt
|
Sub
CATMain()
Ausgabe = isNumeric("5.25")
'die Ausgabe wird "true" sein
Ausgabe = isNumeric("egal")
'die Ausgabe wird "false" sein
End
Sub |
Sgn - liefert
das Vorzeichen einer Zahl
|
Sub
CATMain()
Vorzeichen = Sgn(-5.25)
' das Ergebnis wird -1 (Integer) sein
MsgBox Vorzeichen
Vorzeichen = Sgn(0)
' das Ergebnis wird 0 (Integer)
sein
MsgBox Vorzeichen
Vorzeichen = Sgn(5.25)
' das Ergebnis wird 1 (Integer)
sein
MsgBox Vorzeichen
End
Sub |
Rnd -
liefert eine Zufallszahl
(Eigentlich handelt es sich
nicht wirklich um eine Zufallszahl, sondern die Zahl
wird über die Systemuhr ermittelt)
|
Sub
CATMain()
Randomize ' reicht
einmal am Begin einer Prozedur/Funktion
Zufallszahl = Int(100*Rnd)+1
' liefert eine Zufallszahl
von 0-100
MsgBox Zufallszahl
End
Sub |
> |
größer |
>= |
größer gleich |
< |
kleiner |
<= |
kleiner gleich |
= |
gleich |
|
|
<> |
ungleich |
|
|
|

Asc - liefert den
ANSI-Code eines ANSI-Zeichen
|
Sub
CATMain()
Zahl = Asc("A")
' das Ergebnis wird 65 sein
MsgBox Zahl
End
Sub |
Chr - liefert das
ANSI-Zeichen zu einem ANSI-Code
|
Sub
CATMain()
Zeichen = Chr(65)
' das Ergebnis wird A sein
MsgBox Zeichen
End
Sub |
LCase und
UCase - wandelt alle Buchstaben eines Strings in
Kleinschrift (lower case) bzw. Großschrift (upper
case) um
|
Sub
CATMain()
MsgBox LCase("HIER WIRD
ALLES KLEIN SEIN")
MsgBox UCase("hier wird alles groß
sein")
End
Sub |
Len - liefert
die Anzahl der Zeichen einer Zeichenkette (String)
|
Sub
CATMain()
Anzahl = Len("Das ist ein Test")
' das Ergebnis wird 16 sein
MsgBox Anzahl
End
Sub |
Split - teilt
einen String an einem angegebenen Zeichen
siehe auch in Verbindung mit
CharCount.
|
Sub
CATMain()
Geteilt = split("das;wird;geteilt",";")
' Geteilt als Array
MsgBox Geteilt(0)
MsgBox Geteilt(1)
MsgBox Geteilt(2)
End
Sub |
InStr - liefert
die Position eines bestimmten Zeichen (oder
Zeichenkette) in einer Zeichenkette (String)
|
Sub
CATMain()
Test = "Das ist ein Test"
Pos = InStr(1,Test, "e")
' das Ergebnis wird 2 sein - wird der String
nicht gefunden, so ist Pos 0
MsgBox Pos
End
Sub |
Einen String umdrehen (Zeichenreihenfolge umkehren)
|
Sub
CATMain()
MsgBox StrReverse("ABC")
' das Ergebnis wird CBA sein
End
Sub |
Strings
zusammenhängen (verketten)
|
Sub
CATMain()
AString = "te"
BString = "st"
MsgBox AString & BString
' die Ausgabe wird ' test ' sein
End
Sub |
Zeichen in einem String austauschen/ersetzen
|
Sub
CATMain()
AString = "teba"
MsgBox Replace(AString, "ba",
"st")
' die Ausgabe wird ' test ' sein
End
Sub |
Zuschneiden eines
Strings:
Mid - scheidet
ein Teilstring aus einer Zeichenkette (String)
|
Sub
CATMain()
Zeichenkette = "Test"
Mid(Zeichenkette,
3,
1)
' das Ergebnis wird "s" sein
Mid(Zeichenkette,
2,
2)
' das Ergebnis wird "es" sein
End
Sub |
Left und Right
Zeigt die ersten 3 Zeichen, das Ergebnis
wird "tes" sein |
Zeigt die letzten drei Zeichen, das Ergebnis
wird "est" sein |
|
Sub
CATMain()
Text = "Test"
MsgBox Left(Text,3)
End
Sub |
|
|
Sub
CATMain()
Text = "Test"
MsgBox right(Text,3)
End
Sub |
|
Schneidet die letzten beiden Zeichen ab,
Ergebnis ist "Te" |
Schneidet die ersten beiden Zeichen ab,
Ergebnis ist "st" |
|
Sub
CATMain()
Text = "Test"
Anzahl = Len(Text)
' zählt die Anzahl
der Zeichen (4)
MsgBox Left(Text, Anzahl -2)
End
Sub |
|
|
Sub
CATMain()
Text = "Test"
Anzahl = Len(Text)
' zählt die Anzahl der Zeichen (4)
MsgBox right(Text, Anzahl -2)
End
Sub |
|
Ab einem
bestimmten Zeichen alles wegschneiden, das
Ergebnis wird "schön" sein
|
Sub
CATMain()
Text = "schön,Test" Position = InStr(1,Text,",")
' gibt die Stelle an, bei der das
Komma (",") zum ersten mal gefunden wird Ergebnis = left(Text,Position -1) MsGBox Ergebnis
End
Sub |
Bis zu einem
bestimmten Zeichen alles wegschneiden, das
Ergebnis wird "Test" sein
|
Sub
CATMain()
Text = "schön,Test" Position = InStr(1,Text,",")
' gibt die Stelle an, bei der das
Komma (",") zum ersten mal gefunden wird Ergebnis = right(Text,Len(Text)
-Position) MsGBox Ergebnis
End
Sub |
Ein
bestimmtes
Zeichen in einer Zeichenkette
(String) zählen
Siehe auch in
Verbindung mit split.
|
function
CharCount(SIn,Character)
CharCount = UBound(Split(SIn,
Character))
end function |
Aufruf:
|
Sub
CATMain()
MsgBox CharCount("1;2;3;4",";")
' das Ergebnis wird 3 sein
End
Sub |
Dateioperationen
Erstell-, Änderungs- und
Zugriffsdatum ermitteln
|
function
GetFileDate(DateiPfad, DateMode)
' DateMode
1 = Erstelldatum
' DateMode 2 = letzter Zugriff
' DateMode 3 = letztes Speichern
set fso
= CreateObject("Scripting.filesystemobject")
set
Datei = fso.GetFile(DateiPfad)
if
DateMode =
1
then
GetFileDate = Datei.DateCreated
elseif
DateMode =
2
then
GetFileDate = Datei.DateLastAccessed
elseif
DateMode =
3
then
GetFileDate = Datei.DateLastModified
else
MsgBox "DateMode
falsch definiert",48,"GetFileDate"
end if
end function |
Aufruf:
|
Sub
CATMain()
MsgBox "Erstellt: " &GetFileDate("c:\test.txt",
1)
MsgBox "Letzter Zugriff: " &GetFileDate("c:\test.txt",
2)
MsgBox "Letzte Änderung: " &GetFileDate("c:\test.txt",
3)
End
Sub |
Stringoperationen für Dateinamen
und Pfade:
Dateipfad ermitteln |
Dateiname ermitteln |
|
Function
ExtractFileDir(DateiPfad)
s = DateiPfad
s = StrReverse(s)
Position = InStr(1,s,"\")
s = right(s,Len(s)
-Position)
s = StrReverse(s)
if Len(s) =
2 then
s = s &"\"
ExtractFileDir = s
End
Function |
|
|
Function
ExtractFileName(DateiPfad)
s = DateiPfad
s = StrReverse(s)
Position = InStr(1,s,"\")
s = left(s, Position -1)
ExtractFileName = StrReverse(s)
End Function
|
|
Aufruf:
|
Sub
CATMain()
MsgBox ExtractFileDir("C:\Test\Ordner\datei.txt")
MsgBox ExtractFileName("C:\Test\Ordner\datei.txt")
End
Sub |
Dateiendung auslesen:
Endung auslesen |
Endung tauschen bzw. entfernen |
|
Function
ExtractFileExt(s)
if InStr(s,".")
> 0 then
s = StrReverse(s)
Position = InStr(1,s,".")
s = left(s,Position -1)
s = StrReverse(s)
end if
ExtractFileExt = s
End Function
|
|
|
Function
ChangeFileExt(s, e)
if InStr(s,".")
> 0
then
s = StrReverse(s)
Position = InStr(1,s,".")
s = right(s,Len(s)-Position)
s = StrReverse(s)
s = s &e
else
s = s &e
end if
ChangeFileExt = s
End Function |
|
Aufruf:
|
Sub
CATMain()
MsgBox ExtractFileExt("C:\test.txt")
' Endung auslesen
MsgBox ChangeFileExt("C:\test.txt",
".bmp") '
Endung tauschen von .txt nach .bmp
MsgBox ChangeFileExt("test.txt",
"")
' Endung entfernen
End
Sub |
Sonderzeichen aus
String entfernen
Möchte man einen
String als Dateiname verwenden, so muss man
sicherstellen, dass alle Sonderzeichen aus dem
String entfernt werden die in einem Dateinamen
nichts zu suchen haben. Für diesen Zweck kann man
die Funktion
ClearFileName
verwenden. Hier sind die
wichtigsten Sonderzeichen im Umfeld mit Catia
zusammengefasst.
|
Function
ClearFileName(DateiName)
DateiName = Replace(DateiName, Chr(10),
"")
DateiName = Replace(DateiName, Chr(13),
"")
DateiName = Replace(DateiName, ".",
"_")
DateiName = Replace(DateiName, "*",
"_")
DateiName = Replace(DateiName, "±",
"_")
DateiName = Replace(DateiName, "´",
"_")
DateiName = Replace(DateiName, "\",
"_")
DateiName = Replace(DateiName, "/",
"_")
DateiName = Replace(DateiName, ":",
"_")
DateiName = Replace(DateiName, ";",
"_")
ClearFileName = DateiName
End
Function |
Aufruf:
|
Sub
CATMain()
MsgBox CleanFileName("Hier*fliegt;einiges:raus")
' -> Ergebnis: Hier_fliegt_einiges_raus
End
Sub |
Zum ermitteln von
Systemverzeichnissen wie beispielsweise Startmenü,
Desktop, AppData... gibt es den Befehl "SpecialFolder(".
|
Sub
CATMain()
set WSShell = CreateObject("WScript.Shell")
s = WSShell.SpecialFolders("AppData")
MsgBox s
End
Sub |
"AppData" |
Programmdatenverzeichnis |
"Desktop" |
User Desktop |
"MyDocuments" |
Eigene
Dateine |
"StartMenu" |
Start Menü |
"Startup" |
Start Ordner |
"Programs" |
Programme |
Über
Systemvariable festgelegte Verzeichnisse wie z.B.
der User-Temp-Ordner lassen sich mit "ExpandEnvironmentStrings("
auslesen.
|
Sub
CATMain()
set WSShell = CreateObject("WScript.Shell")
s = WSShell.ExpandEnvironmentStrings("%Temp%")
MsgBox s
End
Sub |
Ermitteln der
aktuellen Zeit und Datum
|
Sub
CATMain()
MsgBox Time ' gibt die
aktuelle Uhrzeit aus
MsgBox Date ' gibt das
aktuelle Datum aus
MsgBox Now ' gibt das
Datum und die Uhrzeit aus
End
Sub |
Stunden, Minuten und
Sekunden als Zahl (Integer) auslesen
|
Sub
CATMain()
MsgBox Hour(Time)
' Stunden als Zahl
MsgBox Minute(Time)
' Minute als Zahl
MsgBox Second(Time)
' Sekunde als Zahl
End
Sub |
Tag, Monat und Jahr als
Zahl (Integer) auslesen
|
Sub
CATMain()
MsgBox Day(Date)
' Tag als Zahl
MsgBox Month(Date)
' Monat als Zahl
MsgBox Year(Date)
' Jahr als Zahl
End
Sub |
Timer - liefert die verstrichenen Sekunden seit
Mitternacht (Systemuhr).
(Dies kann genutzt werden um während der Laufzeit
eines Makros die Zeit zu stoppen.)
|
Sub
CATMain()
WieLange = Int(Timer)
' Sekunden seit Mitternacht als
Zahl, hier abgerundet auf einen Integer
MsgBox WieLange
End
Sub |
IF...
THEN
|
Sub
CATMain()
if Wert =
0 then
MsgBox "Variable ist: "&Wert
' bei String: if Wert ="null"
else
MsgBox "Variable ist: "&Wert
end if
End
Sub |
SELECT CASE
|
Sub
CATMain()
select Case Wert
case
1
' bei String: Case "Text"
MsgBox
"Variable ist: "&Wert
case
2
MsgBox
"Variable ist: "&Wert
case else
MsgBox
"Variable ist: "&Wert
end select
End
Sub |

Schleifen
FOR... NEXT
|
Sub
CATMain()
for Wert =
1 to
5
' 5x wiederholen mit anzeige der
Wiederholungen über Fenstermeldung
MsgBox "Durchlauf Nummer: "&Wert&"
von 5"
next
End
Sub |
FOR... NEXT - Rückwärts
|
Sub
CATMain()
for Wert =
5 to
1 Step
-1
' 5x wiederholen mit anzeige der
Wiederholungen über Fenstermeldung
MsgBox "Durchlauf Nummer: "&Wert&"
von 5"
next
End
Sub |
DO...
LOOP
|
Sub
CATMain()
Wert = 0
do
Wert = Wert + 1
MsgBox "Durchlauf Nummer: "&Wert
loop until Wert =
5
' 5x wiederholen mit
anzeige der Wiederholungen über Fenstermeldung
End
Sub |

Subroutinen
In VBS gibt es
Subroutinen und Functions, wobei Functions einen
Rückgabewert ausgeben können, Subroutinen nicht.
Sowohl der Subroutine als auch der Function können
beim Aufruf Variablen (Eingangswerte) übergeben werden. Diese
werden hinter dem Subroutinen- bzw. Function-Namen in
Klammer angegeben. Mehrere Variable werden durch ein
Komma getrennt. Muss kein Wert übergeben werden, so
bleibt die Klammer leer.
Der Rückgabewert einer Funktion erfolgt über den
Function-Name (siehe Beispiel).
Function Funktionsname(Eingangswert1,
Eingangswert2...)
Anweisungen
Function-Name = Rückgabewert
End Function |
Sub
Prozedurname(Eingangswert1,
Eingangswert2...)
Anweisungen
End Sub |
Beispiel für eine
Subroutine:
|
Sub
CATMain()
Call MachWas(5)
End
Sub
Sub MachWas(Eingangswert)
MsgBox
"Der Wert "&Eingangswert + 5&"
wurde ermittelt"
' die Prozedur gibt den Wert 10 aus
End
Sub |
Beispiel für eine
Function:
|
Sub
CATMain()
MsgBox "Funktion liefert "&MachWas(5)&"
zurück" ' die Funktion
liefert den Wert 10 zurück
End
Sub
Function MachWas(Eingangswert)
MachWas =Eingangswert +
5
End
Function |

VBS
Interaktion mit dem Benutzer
Die einfachste Form einer MsgBox:
|
Sub
CATMain()
MsgBox
"Hallo Welt"
End
Sub |
NXOpen: MsgBox("Hallo Welt") |
|
 |
MsgBox mit Typ-Angabe und
Fenstertext:
|
Sub
CATMain()
MsgBox "Fenstertext",0,"Fenstername"
End
Sub |
NXOpen: MsgBox("Fenstertext",0,"Fenstername") |
|
 |
Die Festlegung des Fenstertyps
erfolgt durch einen Zahlenwert, der zwischen dem Fenstertext und dem
Fensternamen steht (",0,")
.
0 |
16 |
32 |
48 |
64 |
normales Fenster |
Fehler |
Frage |
Warnung |
Hinweis |
|
 |
 |
 |
 |
|
MsgBox mit mehrzeiligem
Fenstertext:
Einen mehrzeiligen Text erreicht
man mit dem Character Code "Chr(10)"
(new line)
|
Sub
CATMain()
MsgBox "erste Zeile"
+Chr(10)+_
"zweite Zeile" +Chr(10)+_
"dritte Zeile" ,0,"Fenstername"
End
Sub |
|
 |
MsgBox mit mehreren Buttons und
deren Abfrage:
|
Sub
CATMain()
Antwort = MsgBox("Soll ich?",1,"Fenstername")
if Antwort = vbOk
then
MsgBox"OK
wurde gedrückt!"
end if
if Antwort =
vbCancel then
MsgBox"Abbrechen wurde gedrückt!"
end if
End
Sub |
|
 |
Welche Button-Paare geboten
werden, wird analog, wie im vorangegangenen Beispiel über den
Fenstertyp festgelegt. Dabei nimmt man sie Summe vom Fenstertyp
und Buttonkombination. Möchte man beispielsweise den Fenstertyp "Fehler" (16) und die Buttonkombination Ja, Nein,
Abbrechen (3) so ergibt sich der Wert 19 -> MsgBox "Fenstertext",19,"Fenstername"
1 |
2 |
3 |
4 |
5 |
[OK] + [Abbrechen] |
[Abbrechen] +
[Wiederholen] + [Ignorieren] |
[Ja] + [Nein] +
[Abbrechen] |
[Ja] + [Nein] |
[Wiederholen] +
[Abbrechen] |
|
Die Abfrage kann über den
Button-Code oder über eine dem Button fest zugeordnete Zahl
erfolgen:
6 |
7 |
1 |
2 |
4 |
5 |
vbYes |
vbNo |
vbOk |
vbCancel |
|
|
[Ja] |
[Nein] |
[OK] |
[Abbrechen] |
[Wiederholen] |
[Ignorieren] |
|

InputBox
|
Sub
CATMain()
Antwort = InputBox("Wie ist dein
Name?","Fenstertext")
MsgBox("Dein Name ist " & Antwort)
End
Sub |
|
 |
Der Variable "Antwort"
zugewiesene Wert ist generell vom Typ String, es sei denn der
Inputbox-Dialog wird über den Button [Abbruch] beendet, dann
wird der Variable der Boolean Wert "false" übergeben.
|
if
not Antwort
then exit Sub ' um z.B. bei
"Abbrechen" die Sub zu verlassen |
Eine Eingabe vorgeben:
|
Sub
CATMain()
Antwort = InputBox("Wie ist dein
Name?","Fenstertext","Vorgabe")
MsgBox("Dein Name ist " & Antwort)
End
Sub |
|
 |
InputBox mit Auswahlmenü:
|
Sub
CATMain()
DasMenu = "Wähle ein Eintrag"
+Chr(10)+_
" "+Chr(10)+_
"1 erster Eintrag" +Chr(10)+_
"2 zweiter Eintrag" +Chr(10)+_
"3 dritter Eintrag"
Antwort = InputBox(DasMenu,"Auswahl:")
If IsNumeric(Antwort)
then
select case Antwort
case
1
MsgBox
"Du hast den ersten Eintrag gewählt."
case
2
MsgBox
"Du hast den zweiten Eintrag gewählt."
case
3
MsgBox
"Du hast den dritten Eintrag gewählt."
case else
MsgBox
"Den Eintrag gibt es nicht!"
end select
else
MsgBox "Falsche Eingabe. Nur Nummern
sind
erlaubt."
end If
End
Sub |
|
 |

Fehlermeldungen Abfangen
Möchte man nicht, dass das
laufende Script aufgrund eines Fehlers abbricht, so kann
man dies mittels "On Error Resume Next" unterdrücken. Der
Befehl gilt ab der Zeile in der er gesetzt wird. Aufgehoben wird
das ganze mittels "On Error Goto 0". Die Anweisung
gilt nur für die aktuelle Subroutine/Function.
Ein eventuell aufgetretener Fehler (nur der letzte) kann mittels
"err.number " oder "err.description" abgefragt werden.
|
Sub
CATMain()
On Error Resume Next
' ab hier werden alle Fehler
abgefangen
' hier steht die
Anweisungen...
if
err.number <> 0
then
MsgBox"Es gab einen
Fehler. Die Fehlernummer lautet: "&err.number
end if
On Error Goto 0
' ab hier
wird wieder
abgebrochen wenn es zu einem Fehler kommt
End
Sub |

Externe
Anwendungen starten
Datei/Anwendung aus laufendem Script heraus aufrufen
Der Pfadnamen darf kein
Leerzeichen enthalten. z.B.
"C:\Eigene Dateien\Egal.exe"
wäre unzulässig. Mit dieser Anweisung lassen sich
auch Dateien mit der unter Windows verknüpften Anwendung
öffnen.
|
Sub
CATMain()
set oShell = CreateObject("Wscript.shell")
oShell.Run "C:\WINDOWS\system32\calc.exe",
1,
true
' true = warten bis Anwendung
beendet ist
End
Sub |
Möchte man eine
Konsolenanwendung starten und dabei das CMD Fenster
unterdrücken, so setzt man den Zahlenwert der sich
hinter dem
Dateipfad befindet auf 0.
|
oShell.Run
"C:\Konsolenanwendung.exe",
0, true
' true = warten bis Anwendung
beendet ist |
DOS- bzw. Konsolenanwendung starten und Ausgabe
auslesen
Mit diesem Script ist es
möglich eine Konsolenanwendung zu starten und deren
Ausgabe auszulesen, um sie im weiteren Scriptverlauf zu nutzen.
|
Sub
CATMain()
set oShell = CreateObject("WScript.Shell")
set Abfrage = oShell.Exec("c:\test.exe")
Ausgabe = ""
fertig = false
do
if not Abfrage.StdOut.AtEndOfStream then
Ausgabe = Ausgabe &Abfrage.StdOut.Read(1)
else
fertig = true
end if
loop until fertig =
true
MsgBox Ausgabe
End
Sub |
|
|
|
Prüfen ob
Anwendung ausgeführt wird
|
Function
IsRunning(ExeName)
set
wmi =
GetObject("winmgmts:")
set
system
= wmi.instancesOf("win32_process")
IsRunning =
false
for
each
process in
system
if
LCase(process.name)
=
LCase(ExeName)
then
IsRunning =
true
end
if
next
End
Function |
Aufruf:
|
MsgBox
IsRunning("notepad.exe")
' die Rückgabe ist Boolean |

Anwendung (Prozess) abschießen
bzw. schließen
|
Sub
KillProcess(ExeName)
set
wmi =
GetObject("winmgmts:")
set
system
= wmi.instancesOf("win32_process")
for
each
process in
system
if
LCase(process.name)
=
LCase(ExeName)
then
process.Terminate (0)
end
if
next
End
Sub |
Aufruf:
|
Call
KillProcess("notepad.exe") |
Oder etwas sanfter mit CloseApp
Bei KillProcess gehen eventuell nicht gespeicherte Daten
definitiv verloren. Abhilfe kann da die etwas sanftere Methode
CloseApp schaffen. Jedoch ist mir unter
Win7-64 aufgefallen, dass diese Routine die Anwendung nicht immer schließt wenn
diese (bzw. dessen Fenster) gerade aktiv ist?
|
Sub
CloseApp(ExeName, FensterName)
set
wmi = GetObject("winmgmts:")
set
system = wmi.instancesOf("win32_process")
for each
process
in
system
if
LCase(process.name) = LCase(ExeName)
then
set
WshShell = CreateObject("WScript.Shell")
f = WshShell.AppActivate(FensterName)
if
f
then
WshShell.SendKeys
"%{F4}"
'ALT-F4
end
if
next
End Sub |
Aufruf:
|
Call
CloseApp("notepad.exe",
"Unbenannt - Editor") |

Windows Registry -
Lesen/Schreiben
String in die Registry schreiben
|
Sub
CATMain()
Text = "das steht jetzt in der Registry"
set oShell = CreateObject("WScript.Shell")
oShell.RegWrite "HKEY_CURRENT_USER\Software\MeinPRG\MeinText",
Text, "REG_SZ"
' für Strings
oShell.RegWrite "HKEY_CURRENT_USER\Software\MeinPRG\MeinBool",
1, "REG_DWORD"
' für Boolean 1 = true / 0 =
false
oShell.RegWrite "HKEY_CURRENT_USER\Software\MeinPRG\MeinInteger",
123, "REG_DWORD"
' für Integer
End
Sub |
String
aus Registry lesen
|
Sub
CATMain()
set oShell = CreateObject("WScript.Shell")
Text = oShell.RegRead("HKEY_CURRENT_USER\Software\MeinPRG\MeinText")
MsgBox Text
End
Sub |

Aktuell angemeldeter Benutzername auslesen
|
Function
GetUserName()
set
objWSHNetwork = CreateObject("WScript.Network")
GetUserName =
objWSHNetwork.UserName
' Speicher
freigeben
set objWSHNetwork = nothing
End
Function
|

Wait in VBScript
in VBScript gibt es keinen Wait-Command aber mit
folgendem Code kann man den Code für eine vogegebene
Zeit in Sekunden in eine Endlosschleife rennen lassen.
Zu beachten ist, dass für die Wartezeit der Prozessor
voll ausgelastet ist.
|
Sub
wait(sec)
x = timer
do while timer -x < sec
loop
End Sub |
 |