1 VBScript - Installation und Sprachumfang

Werbung
1
VBScript - Installation und Sprachumfang
1.1
Installation VBScript
1.1.1 Script-Engine
Die Visual Basic Script Engine wird automatisch mit der Installation im
DIAdem-Programmverzeichnis gespeichert. Nur diese VBS-Engine wird von
DIAdem benutzt. Notwendig wurde diese Vorgehensweise um eine optimale
Verarbeitungsgeschwindigkeit zu erreichen und um Probleme bei Kunden zu
vermeiden, bei denen aus Sicherheitsgründen standardmäßig kein VBS
installiert wird. Startet man eine VBS-Autosequenz, die sich auf einem
Netzlaufwerk befindet von einem lokalen Rechner aus, so wird die VBS-Datei
in den lokalen Speicherbereich geladen und dort von der VBS-Engine, die sich
im DIAdem-Programmpfad befindet, ausgeführt. Höchstens, wenn der Zugriff
auf VBS-Dateien - also auch das lesen - von Netztools grundsätzlich untersagt
wird, gibt es Probleme.
1.1.2 Dokumentation
Die Installation der original Microsoft-Dokumentation erfolgt automatisch mit
der Installation von DIAdem.
1.1.3 Debugger
Der Debugger muss aus lizenzrechtlichen Gründen in jedem Fall von der
Microsoft-Webseite heruntergeladen werden. Die Adresse ist :
http://www.microsoft.com/germany/scripting/default.htm
Dort unter dem Punkt ScriptDebugger  Downloads nachsehen und die
Version für Deutschland und egal welches Betriebssystem Sie einsetzen, bitte
immer den Debugger für Windows NT/2000 herunterladen.
Achtung : Es ist wichtig den richtigen Debugger herunterzuladen. Eine
Deinstallation des falschen Debuggers ist sehr umständlich.
VBScript-Sprachumfang
Die wesentlichen Punkte zu VBScript sind in der Online-Hilfe detailliert
beschrieben. Die folgenden Kapitel gehen auf die wichtigsten Punkte des
VBScript-Sprachumfanges ein. Die Dokumentation wurde großteils der original
Microsoft Dokumentation entliehen. Das untenstehende Bild zeigt wo in der
Online-Hilfe die Informationen zum Sprachumfang zu finden sein.
1.1.4 VBScript-Datentypen
VBScript kennt nur einen Datentyp namens Variant. Ein Variant ist eine
besondere Art von Datentyp, der je nach Verwendung verschiedene Arten von
Informationen aufnehmen kann. Weil Variant der einzige Datentyp in VBScript
ist, geben alle Funktionen in VBScript diesen Datentyp zurück.
Im einfachsten Fall kann Variant numerische Werte oder Zeichenfolgen
enthalten. Ein Variant verhält sich wie eine Zahl, wenn Sie ihn in einem
numerischen Zusammenhang verwenden, und wie eine Zeichenfolge, wenn
Sie ihn wie eine Zeichenfolge verwenden. Wenn Sie also mit Daten arbeiten,
die wie Zahlen "aussehen", interpretiert VBScript diese als Zahlen und verfährt
entsprechend. Wenn Sie mit Daten arbeiten, die nur als Zeichenfolgen
interpretiert werden können, behandelt VBScript diese als Zeichenfolgen. Sie
können immer dafür sorgen, dass sich Zahlen wie Zeichenfolgen verhalten,
indem Sie diese in Anführungszeichen (" ") einschließen.
1.1.4.1 Untertypen des Datentypes "Variant"
Über die einfache Einteilung in numerische Werte und Zeichenfolgen hinaus
kann bei Variant-Werten zwischen weiteren Arten von numerischen
Informationen unterschieden werden. Numerische Informationen können
beispielsweise ein Datum oder eine Uhrzeit darstellen. In Verbindung mit
anderen Datums- oder Uhrzeitinformationen wird das Ergebnis immer als
Datum oder Uhrzeit ausgedrückt. Es stehen auch viele verschiedene Arten
numerischer Informationen zur Verfügung, angefangen von booleschen
Werten bis hin zu großen Fließkommazahlen. Diese unterschiedlichen
Informationskategorien, die ein Variant aufnehmen kann, werden als
Untertypen bezeichnet. Meistens genügt es, einem Variant einfach die
gewünschten Daten zuzuweisen, damit er sich entsprechend verhält.
Die folgende Tabelle zeigt verschiedene Untertypen von Daten, die ein Variant
enthalten kann.
Untertyp
Empty
Beschreibung
Variant ist nicht initialisiert. Der Wert ist 0 bei numerischen Variablen und eine
Nullzeichenfolge ("") bei Zeichenfolgenvariablen.
Null
Boolean
Byte
Integer
Currency
Long
Single
Double
Date
(Time)
String
Object
Error
Variant enthält absichtlich keine gültigen Daten.
Enthält entweder True oder False.
Enthält eine Ganzzahl von 0 bis 255.
Enthält eine Ganzzahl von -32.768 bis 32.767.
-922.337.203.685.477,5808 bis 922.337.203.685.477,5807.
Enthält eine Ganzzahl von -2.147.483.648 bis 2.147.483.647.
Enthält eine Fließkommazahl einfacher Genauigkeit von -3,402823E38 bis 1,401298E-45 für negative Werte und von 1,401298E-45 bis 3,402823E38 für
positive Werte.
Enthält eine Fließkommazahl doppelter Genauigkeit von 1,79769313486232E308 bis -4,94065645841247E-324 für negative Werte und
von 4,94065645841247E-324 bis 1.79769313486232E308 für positive Werte.
Enthält eine Zahl, die ein Datum vom 1. Januar 100 bis zum 31. Dezember
9999 darstellt.
Enthält eine Zeichenfolge variabler Länge, die bis zu etwa 2 Milliarden Zeichen
lang sein kann.
Enthält ein Objekt.
Enthält eine Fehlernummer.
Daten können mithilfe von Konvertierungsfunktionen von einem Untertyp in
den anderen konvertiert werden. Zusätzlich gibt die Funktion VarType
Informationen über die Art und Weise der Speicherung von Daten in einem
Variant zurück.
1.1.5 VBScript-Variablen
1.1.5.1 Deklarieren von Variablen
Sie deklarieren Variablen in Ihrem Skript explizit mit den Anweisungen Dim,
Public und Private. Beispiel:
Dim GradCelsius
Sie deklarieren mehrere Variablen, indem Sie diese durch Kommas
voneinander trennen. Beispiel:
Dim Oben, Unten, Links, Rechts
Sie können eine Variable auch implizit deklarieren, indem Sie einfach ihren
Namen an einer beliebigen Stelle in Ihrem Skript verwenden. Dies gilt
allgemein als schlechter Programmierstil, weil Sie den Variablennamen an der
einen oder anderen Stelle falsch eingeben könnten, was bei der Ausführung
des Skriptes zu unerwarteten Ergebnissen führt.
Aus diesem Grund gibt es die Option Explicit-Anweisung, mit der Sie die
explizite Deklaration aller Variablen erzwingen können. Die Option ExplicitAnweisung sollte die erste Anweisung innerhalb Ihres Skriptes sein.
1.1.5.2 Einschränkungen für Namen
Für Variablennamen gelten die Standardregeln zum Benennen von
Sprachelementen in VBScript. Für Variablennamen gilt:
 Sie müssen mit einem Zeichen des Alphabets beginnen.
 Sie dürfen keinen Punkt enthalten.
 Sie dürfen nicht länger als 255 Zeichen sein.
 Sie müssen innerhalb des Gültigkeitsbereichs, für den sie deklariert
werden, eindeutig sein.
1.1.5.3 Gültigkeitsbereich und Lebensdauer von Variablen
Der Gültigkeitsbereich einer Variablen hängt davon ab, wo sie deklariert
wurde. Wenn Sie eine Variable in einer Prozedur deklarieren, kann
normalerweise nur Code innerhalb dieser Prozedur auf den Variablenwert
zugreifen oder ihn ändern. Sie hat somit einen lokalen Gültigkeitsbereich und
wird als Variable auf Prozedurebene bezeichnet. Wenn Sie eine Variable
außerhalb einer Prozedur deklarieren, ist sie für alle Prozeduren in Ihrem
Skript sichtbar. Es handelt sich somit um eine Variable auf Skriptebene mit der
Skriptebene als Gültigkeitsbereich.
Die Lebensdauer einer Variable hängt von der Zeitspanne ab, in der eine
Variable existiert. Die Lebensdauer einer Variablen auf Skriptebene reicht vom
Zeitpunkt der Deklaration bis zur Beendigung des Skriptes. Eine Variable auf
Prozedurebene existiert nur solange, wie die Prozedur aktiv ist. Bei Verlassen
der Prozedur wird die Variable "vernichtet". Lokale Variablen eignen sich gut
als temporärer Speicherplatz während der Ausführung einer Prozedur. Sie
können lokale Variablen mit demselben Namen in mehreren Prozeduren
verwenden, da jede nur von der Prozedur erkannt wird, in der sie deklariert
wurde.
1.1.5.4 Zuweisen von Werten zu Variablen
Variablen werden Werte zugewiesen, indem ein Ausdruck in folgender Form
erstellt wird: Die Variable steht auf der linken Seite des Ausdruckes, und der
Wert, welcher der Variablen zugewiesen werden soll, steht auf der rechten
Seite. Beispiel:
B = 200
1.1.5.5 Skalare Variablen und Datenfeldvariablen
Meistens weisen Sie einer deklarierten Variablen nur einen einzelnen Wert zu.
Solche Variablen werden skalare Variablen genannt. In anderen Fällen ist es
sinnvoll, einer Variablen mehrere zusammenhängende Werte zuzuweisen. In
diesen Fällen können Sie eine Variable erstellen, die eine Folge von Werten
enthalten kann. Solche Variablen werden Datenfeldvariablen genannt.
Datenfeldvariablen werden fast genauso deklariert wie skalare Variablen. Der
einzige Unterschied besteht darin, dass bei der Deklaration von
Datenfeldvariablen auf den Namen Klammern folgen. Im folgenden Beispiel
wird ein eindimensionales Datenfeld mit 11 Elementen deklariert:
Dim A(10)
Obwohl in Klammern die Zahl 10 angegeben wird, enthält dieses Datenfeld 11
Elemente, weil alle Datenfelder in VBScript nullbasiert sind, d. h. mit dem
Index 0 beginnen. In einem nullbasierten Datenfeld ist die Anzahl der
Elemente immer um Eins höher als der in Klammern angegebene Wert. Diese
Art von Datenfeld nennt man Datenfeld fester Größe.
Zur Zuweisung von Daten an die Elemente des Datenfeldes verwenden Sie
einen Index im Datenfeld. Mit Indizes von 0 bis 10 können den Elementen
eines Datenfeldes auf folgende Weise Werte zugewiesen werden:
A(0) = 256
A(1) = 324
A(2) = 100
...
A(10) = 55
Auf ähnliche Weise (mit einem Index im Datenfeld) kann der Wert eines
beliebigen Datenfeldelements wieder abgerufen werden. Beispiel:
...
EineVariable = A(8)
...
Datenfelder sind nicht auf eine einzige Dimension beschränkt. Sie können bis
zu 60 Dimensionen angeben, obwohl sich die meisten Menschen nur drei oder
vier Dimensionen vorstellen können. Sie können mehrere Dimensionen
deklarieren, indem Sie die Datenfeldgrößen zwischen den Klammern durch
Kommas voneinander trennen. Im folgenden Beispiel ist die Variable
MeineTabelle ein zweidimensionales Datenfeld mit 6 Zeilen und 11 Spalten:
Dim MeineTabelle(5, 10)
In einem zweidimensionalen Datenfeld gibt die erste Zahl immer die Anzahl
der Zeilen und die zweite Zahl die Anzahl der Spalten an.
Sie können auch Datenfelder deklarieren, deren Größe sich während des
Ablaufs Ihres Skriptes ändern kann. Solche Datenfelder werden als
dynamische Datenfelder bezeichnet. Das Datenfeld wird in einer Prozedur
anfänglich mit einer Dim-Anweisung (wie jedes andere Datenfeld auch) oder
mit einer ReDim-Anweisung deklariert. Der Unterschied besteht darin, dass
zwischen den Klammern keine Größe oder Anzahl von Dimensionen
angegeben wird. Beispiel:
Dim MeinDatenfeld()
ReDim EinAnderesDatenfeld()
Um ein dynamisches Datenfeld verwenden zu können, müssen Sie
anschließend die Zahl der Dimensionen und deren Größen mit ReDim
bestimmen. Im folgenden Beispiel wird die anfängliche Größe des
dynamischen Datenfeldes mit ReDim auf 25 festgelegt. Eine darauf folgende
ReDim-Anweisung ändert die Größe des Datenfeldes auf 30. Mithilfe des
Schlüsselwortes Preserve wird der Inhalt des Datenfeldes vor der
Größenänderung gesichert.
ReDim MeinDatenfeld(25)
...
ReDim Preserve MeinDatenfeld(30)
Die Größe eines dynamischen Datenfeldes kann beliebig oft geändert werden.
Beachten Sie jedoch, dass bei einer Verkleinerung des Datenfeldes die Daten
in den eliminierten Elementen verloren gehen.
1.1.6 VBScript-Features
Kategorie
Ablaufsteuerung
Arraybehandlung
Ausdrücke
Datums-/Zeitangaben
Deklarationen
Eingabe/Ausgabe
Fehlerbehandlung
Formatieren von
Zeichenfolgen
Kommentare
Konstanten/Literale
Konvertierungen
Schlüsselwörter
Do...Loop
For...Next
For Each...Next
If...Then...Else
Select Case
While...Wend
With
Array
Dim, Private, Public, ReDim
IsArray
Erase
LBound, UBound
Eval
Execute
RegExp
Replace
Test
Date, Time
DateAdd, DateDiff, DatePart
DateSerial, DateValue
Day, Month, MonthName
Weekday, WeekdayName, Year
Hour, Minute, Second
Now
TimeSerial, TimeValue
Class
Const
Dim, Private, Public, ReDim
Function, Sub
Property Get, Property Let, Property Set
InputBox
LoadPicture
MsgBox
On Error
Err
FormatCurrency
FormatDateTime
FormatNumber
FormatPercent
Kommentare mit ' oder Rem
Empty
Nothing
Null
True, False
Abs
Asc, AscB, AscW
Chr, ChrB, ChrW
CBool, CByte
CCur, CDate
CDbl, CInt
CLng, CSng, CStr
DateSerial, DateValue
Hex, Oct
Fix, Int
Sgn
TimeSerial, TimeValue
Literale
Mathematik
Objekte
Operatoren
Optionen
Prozeduren
Runden
Skriptmodul-ID
Variant-Werte
Verschiedenes
Zeichenfolgen
Empty
False
Nothing
Null
True
Atn, Cos, Sin, Tan
Exp, Log, Sqr
Randomize, Rnd
CreateObject
Err-Objekt
GetObject
RegExp
Addition (+), Subtraktion (-)
Exponenten (^)
Modulo (Mod)
Multiplikation (*), Division (/)
Ganzzahldivision (\)
Negation (-)
Zeichenfolgenverkettung (&)
Gleichheit (=), Ungleich (<>)
Kleiner als (<), Kleiner oder gleich (<=)
Größer als (>)
Größer oder gleich (>=)
Is
And, Or, Xor
Eqv, Imp
Option Explicit
Call
Function, Sub
Property Get, Property Let, Property Set
Abs
Int, Fix, Round
Sgn
ScriptEngine
ScriptEngineBuildVersion
ScriptEngineMajorVersion
ScriptEngineMinorVersion
IsArray
IsDate
IsEmpty
IsNull
IsNumeric
IsObject
TypeName
VarType
Eval-Funktion
Execute-Anweisung
RGB-Funktion
Asc, AscB, AscW
Chr, ChrB, ChrW
Filter, InStr, InStrB
InStrRev
Join
Len, LenB
LCase, UCase
Left, LeftB
Mid, MidB
Right, RightB
Replace
Space
Split
Zuweisungen
StrComp
String
StrReverse
LTrim, RTrim, Trim
Set
1.1.7 Konstanten
Eine Konstante ist ein aussagekräftiger Name, der anstelle einer Zahl oder
einer Zeichenfolge verwendet wird, und dessen Wert sich nie ändert. VBScript
legt eine Anzahl integrierter Konstanten fest. Weitere Informationen zu diesen
integrierten Konstanten finden Sie im VBScript-Sprachverzeichnis.
Beispiele zu Zeichenfolgekonstanten :
Konstante
vbCr
VbCrLf
Wert
Chr(13)
Chr(13) &
Chr(10)
vbFormFeed
Chr(12)
vbLf
vbTab
Chr(10)
Chr(13) &
Chr(10) oder
Chr(10)
Chr(0)
Zeichenfolge mit
dem Wert 0
Chr(9)
vbVerticalTab
Chr(11)
vbNewLine
vbNullChar
vbNullString
Beschreibung
Wagenrücklauf.
Wagenrücklauf-Zeilenvorschub.
Seitenvorschub (nicht sinnvoll unter Microsoft
Windows).
Zeilenvorschub.
Plattformspezifisches Zeilenumbruchzeichen (je nach
Plattform unterschiedlich).
Zeichen mit dem Wert 0.
Entspricht nicht einer Zeichenfolge mit der Länge Null
(""); für den Aufruf externer Prozeduren.
Horizontaler Tabstopp.
Vertikaler Tabstopp (nicht sinnvoll unter Microsoft
Windows).
Da diese Konstanten in VBScript integriert sind, müssen sie vor einer
Verwendung nicht definiert werden. Diese Konstanten können im Code an
einer beliebigen Stelle verwendet werden, um die jeweils angezeigten Werte
darzustellen.
1.1.8 VBScript-Operatoren
Arithmetisch
Beschreibung
Potenzierung
Vergleich
Symbol
Beschreibung
^
Gleichheit
Unäre Negation
-
Ungleichheit
Multiplikation
*
Kleiner als
Division
/
Größer als
Ganzzahldivision
\
Kleiner oder gleich
Modulo-Arithmetik
Mod
Größer oder gleich
Addition
Subtraktion
Zeichenfolgenverkettung
+
-
Objektäquivalenz
Logisch
Symbol
Beschreibung
=
Logische Negation
Logische
<>
Konjunktion
Logische
<
Disjunktion
>
Logische Exklusion
Logische
<=
Äquivalenz
Logische
>=
Implikation
Is
Symbol
Not
And
Or
Xor
Eqv
Imp
&
1.1.9 Verwenden von Bedingungsanweisungen
1.1.9.1 Steuern der Programmausführung
Der Ablauf eines Skriptes mit Bedingungs- und Schleifenanweisungen kann
gesteuert werden. Mithilfe von Bedingungsanweisungen ist es möglich,
VBScript-Code schreiben, mit dem Entscheidungen getroffen und Aktionen
wiederholt werden können. Die folgenden Bedingungsanweisungen sind in
VBScript verfügbar:


If...Then...Else-Anweisung
Select Case-Anweisung
1.1.9.2 Treffen von Entscheidungen mithilfe von If...Then...Else
Die If...Then...Else-Anweisung wird verwendet, um zu bestimmen, ob eine
Bedingung True oder False ist, und um anzugeben, ob je nach Ergebnis eine
oder mehrere Anweisungen ausgeführt werden. Im Allgemeinen ist die
Bedingung ein Ausdruck, der einen Vergleichsoperator zum Vergleichen eines
Wertes oder einer Variablen mit einem/r anderen verwendet. Informationen zu
Vergleichsoperatoren finden Sie unter Vergleichsoperatoren. If...Then...ElseAnweisungen können nach Bedarf auf beliebig vielen Ebenen verschachtelt
werden.
Ausführen von Anweisungen, wenn eine Bedingung True ist
Um nur eine Anweisung auszuführen, wenn eine Bedingung True ist,
verwenden Sie die einzeilige Syntax für die If...Then...Else-Anweisung. Das
folgende Beispiel zeigt die einzeilige Syntax. Beachten Sie, daß in diesem
Beispiel das Schlüsselwort Else weggelassen wird.
Sub DatumSetzen()
Dim meinDatum
meinDatum = #2/13/95#
If meinDatum < Now Then meinDatum = Now
End Sub
Zum Ausführen von mehr als einer Codezeile müssen Sie die mehrzeilige
Syntax oder Blocksyntax verwenden. Diese Syntax enthält die End IfAnweisung ,wie im folgenden Beispiel gezeigt:
Sub BenutzerWarnen(wert)
If wert = 0 Then
AlertLabel.ForeColor = vbRed
AlertLabel.Font.Bold = True
AlertLabel.Font.Italic = True
End If
End Sub
Ausführen bestimmter Anweisungen, wenn eine Bedingung True ist, und
Ausführen anderer Anweisungen, wenn eine Bedingung False ist
Mit der If...Then...Else-Anweisung können Sie zwei Blöcke mit ausführbaren
Anweisungen definieren: ein Block wird ausgeführt, wenn die Bedingung True
ist, der andere wird ausgeführt, wenn die Bedingung False ist.
Sub BenutzerWarnen(wert)
If wert = 0 Then
AlertLabel.ForeColor =
AlertLabel.Font.Bold =
AlertLabel.Font.Italic
Else
AlertLabel.Forecolor =
AlertLabel.Font.Bold =
AlertLabel.Font.Italic
End If
End Sub
vbRed
True
= True
vbBlack
False
= False
Entscheiden zwischen mehreren Alternativen
Mithilfe einer Variante der If...Then...Else-Anweisung können Sie aus
mehreren Alternativen auswählen. Durch das Hinzufügen der ElseIf-Klausel
können Sie die Funktionalität der If...Then...Else-Anweisung erweitern, so
dass der Programmablauf auf mehreren Möglichkeiten basiert. Beispiele:
Sub WertAusgeben(wert)
If wert = 0 Then
MsgBox wert
ElseIf wert = 1 Then
MsgBox wert
ElseIf wert = 2 then
MsgBox wert
Else
Msgbox "Wert außerhalb des Bereichs!"
End If
Sie können nach Bedarf beliebig viele ElseIf-Klauseln hinzufügen, um
alternative Möglichkeiten bereitzustellen. Durch eine zu häufige Verwendung
der ElseIf-Klausel wird der Code allerdings umständlich. Eine bessere
Möglichkeit zum Auswählen aus mehreren Alternativen bietet die Select
Case-Anweisung.
Treffen von Entscheidungen mit Select Case
Die Select Case-Struktur bietet eine Alternative zu If...Then...ElseIf, um
gezielt einen Anweisungsblock aus mehreren Anweisungsblöcken
auszuführen. Eine Select Case-Anweisung bietet dieselbe Funktionalität wie
die If...Then...Else-Anweisung, macht den Code jedoch effizienter und leichter
lesbar.
Eine Select Case-Struktur arbeitet mit einem einzelnen Testausdruck, der
einmalig, auf der obersten Ebene der Struktur, ausgewertet wird. Das
Ergebnis der Struktur wird dann mit den Werten für jedes Case in der Struktur
verglichen. Gibt es eine Übereinstimmung, wird der mit diesem Case
verknüpfte Anweisungsblock wie in dem folgenden Beispiel ausgeführt:
Select Case Document.Formular1.Kartentyp.Options(SelectedIndex).Text
Case "MasterCard"
MCLogoAnzeigen
MCKontoPruefen
Case "Visa"
VisaLogoAnzeigen
VisaKontoPruefen
Case "American Express"
AMEXCOLogoAnzeigen
AMEXCOKontoPruefen
Case Else
UnbekanntBildAnzeigen
ErneutAuffordern
End Select
Beachten Sie, daß die Select Case-Struktur einen Ausdruck einmalig am
Anfang der Struktur auswertet. Im Gegensatz dazu kann eine
If...Then...ElseIf-Struktur für jede ElseIf-Anweisung unterschiedliche
Ausdrücke auswerten. Eine If...Then...ElseIf -Struktur kann nur dann durch
eine Select Case-Struktur ersetzt werden, wenn in jeder ElseIf-Anweisung
derselbe Ausdruck ausgewertet wird.
1.1.10 Durchlaufen von Codeschleifen
Das Durchlaufen von Schleifen ermöglicht Ihnen, eine Anweisungsgruppe
wiederholt auszuführen. Einige Schleifen wiederholen Anweisungen, bis eine
Bedingung falsch (False) ist, andere wiederholen Anweisungen, bis eine
Bedingung wahr (True) ist. Es gibt auch Schleifen, die Anweisungen in einer
bestimmten Anzahl wiederholen.
Die folgenden Schleifenanweisungen sind in VBScript verfügbar:




For...Next: Verwendet einen Zähler, der angibt, wie häufig Anweisungen
ausgeführt werden.
Do...Loop: Schleife durchlaufen, solange oder bis eine Bedingung True ist.
While...Wend: Schleife durchlaufen, solange eine Bedingung True ist.
For Each...Next: Wiederholt eine Anweisungsgruppe für jedes Element in
einer Auflistung oder jedes Element in einem Datenfeld.
1.1.10.1
Verwenden von For...Next
Sie können For...Next-Anweisungen verwenden, um genau festzulegen, wie
oft ein Anweisungblock ausgeführt werden soll. Für Schleifen verwenden Sie
eine Zählervariable, deren Wert mit jeder Wiederholung der Schleife erhöht
und verringert wird.
Das folgende Beispiel hat zur Folge, dass eine Prozedur mit dem Namen
MeineProz 50-mal ausgeführt wird. Die For-Anweisung gibt als Zählervariable
x an und legt den zugehörigen Start- und Endwert fest. Die Next-Anweisung
zählt die Zählervariable jeweils um 1 hoch.
Sub MeineProz50Mal()
Dim x
For x = 1 To 50
MeineProz
Next
End Sub
Mit dem Schlüsselwort Step können Sie die Zählervariable um den darin
angegebenen Wert vergrößern oder verkleinern. Im folgenden Beispiel wird
die Zählervariable j bei jedem Schleifendurchlauf um 2 hochgezählt. Wenn die
Schleife beendet ist, enthält ergebnis die Summe von 2, 4, 6, 8 und 10.
Sub ZweierSumme()
Dim j, ergebnis
For j = 2 To 10 Step 2
ergebnis = ergebnis + j
Next
MsgBox "Die Summe ist " & ergebnis
End Sub
Zum Verkleinern der Zählervariable verwenden Sie einen negativen Wert für
Step. Sie müssen einen Endwert angeben, der kleiner als der Startwert ist. Im
folgenden Beispiel wird die Zählervariable meineZahl bei jedem
Schleifendurchlauf um 2 verkleinert. Wenn die Schleife beendet ist, enthält
ergebnis die Summe von 16, 14, 12, 10, 8, 6, 4 und 2.
Sub NeueSumme()
Dim meineZahl, ergebnis
For meineZahl = 16 To 2 Step -2
ergebnis = ergebnis + meineZahl
Next
MsgBox "Die Summe ist " & ergebnis
End Sub
Sie können jede For...Next-Anweisung beenden, bevor der Zähler seinen
Endwert erreicht, indem Sie die Exit For-Anweisung verwenden. Da die
Schleifenausführung normalerweise nur in bestimmten Situationen beendet
werden soll, z. B. wenn ein Fehler auftritt, müssen Sie die Exit For-Anweisung
im True-Anweisungsblock einer If...Then...Else-Anweisung verwenden. Wenn
die Bedingung False ist, wird die Schleife normal ausgeführt.
1.1.10.2
Verwenden von Do-Schleifen
Sie können Do...Loop-Anweisungen verwenden, um einen Anweisungblock
mehrmals auszuführen, ohne dass die Anzahl der Durchläufe festgelegt ist.
Die Anweisungen werden entweder wiederholt, solange eine Bedingung True
ist oder bis eine Bedingung True ist.
Wiederholung von Anweisungen, während eine Bedingung True ist
Verwenden Sie das Schlüsselwort While, um eine Bedingung in einer
Do...Loop-Anweisung zu überprüfen. Sie können die Bedingung überprüfen,
bevor die Schleife ausgeführt wird (wie im folgenden Beispiel WhileZuerst
gezeigt), oder Sie können sie überprüfen, nachdem die Schleife mindestens
einmal ausgeführt wurde (wie im Beispiel WhileDanach gezeigt). Wenn in der
WhileZuerst-Prozedur meineZahl auf 9 anstatt auf 20 festgelegt wird, werden
die Anweisungen in der Schleife niemals ausgeführt. In der WhileDanachProzedur werden die Anweisungen in der Schleife nur 1-mal ausgeführt, weil
die Bedingung bereits False ist.
Sub WhileZuerst()
Dim zaehler, meineZahl
zaehler = 0
meineZahl = 20
Do While meineZahl > 10
meineZahl = meineZahl - 1
zaehler = zaehler + 1
Loop
MsgBox "Die Schleife wurde " & zaehler & " mal wiederholt."
End Sub
Sub WhileDanach()
Dim zaehler, meineZahl
zaehler = 0
meineZahl = 9
Do
meineZahl = meineZahl - 1
zaehler = zaehler + 1
Loop While meineZahl > 10
MsgBox "Die Schleife wurde " & zaehler & " mal wiederholt."
End Sub
Wiederholen einer Anweisung bis eine Bedingung True wird
Es gibt zwei Möglichkeiten, das Schlüsselwort Until zu verwenden, um eine
Bedingung in einer Do...Loop-Anweisung zu überprüfen. Sie können die
Bedingung überprüfen, bevor die Schleife ausgeführt wird (wie im folgenden
Beispiel UntilZuerst gezeigt), oder Sie können sie überprüfen, nachdem die
Schleife mindestens einmal ausgeführt wurde (wie im Beispiel UntilDanach
gezeigt). Solange die Bedingung False ist, wird die Schleife durchlaufen.
Sub UntilZuerst()
Dim zaehler, meineZahl
zaehler = 0
meineZahl = 20
Do Until meineZahl = 10
meineZahl = meineZahl - 1
zaehler = zaehler + 1
Loop
MsgBox "Die Schleife wurde " & zaehler & " mal wiederholt."
End Sub
Sub UntilDanach()
Dim zaehler, meineZahl
zaehler = 0
meineZahl = 1
Do
meineZahl = meineZahl + 1
zaehler = zaehler + 1
Loop Until meineZahl = 10
MsgBox "Die Schleife wurde " & zaehler & " mal wiederholt."
End Sub
Beenden einer Do...Loop-Anweisung aus der Schleife heraus
Sie können eine Do...Loop-Schleife beenden, indem Sie die Exit DoAnweisung verwenden. Da die Schleifenausführung normalerweise nur in
bestimmten Situationen beendet werden soll, z. B. um eine Endlosschleife zu
vermeiden, müssen Sie die Exit Do-Anweisung im True-Anweisungsblock
einer If...Then...Else-Anweisung verwenden. Wenn die Bedingung False ist,
wird die Schleife normal ausgeführt.
Im folgenden Beispiel wird meineZahl ein Wert zugewiesen, der eine
Endlosschleife verursacht. Die If...Then...Else-Anweisung überprüft, ob dieser
Zustand eintritt, und verhindert die endlose Wiederholung.
Sub ExitBeispiel()
Dim zaehler, meineZahl
zaehler = 0
meineZahl = 9
Do Until meineZahl = 10
meineZahl = meineZahl - 1
zaehler = zaehler + 1
If meineZahl < 10 Then Exit Do
Loop
MsgBox "Die Schleife wurde " & zaehler & " mal wiederholt."
End Sub
1.1.10.3
Verwenden von While...Wend
Die While...Wend-Anweisung wird in VBScript für Entwickler zur Verfügung
gestellt, die mit ihrer Verwendung vertraut sind. Auf Grund der
eingeschränkten Flexibilität von While...Wend wird jedoch empfohlen,
stattdessen Do...Loop zu verwenden.
1.1.10.4
Verwenden von For Each...Next
Eine For Each...Next-Schleife ist einer For...Next -Schleife ähnlich. Anstatt
die Anzahl der Schleifendurchläufe zum Wiederholen der Anweisungen
anzugeben, wird in einer For Each...Next-Schleife eine Anweisungsgruppe für
jedes Element in einer Auflistung von Objekten oder für jedes Element in
einem Datenfeld ausgeführt. Dies ist besonders dann hilfreich, wenn nicht
bekannt ist, wie viele Elemente in einer Gruppe enthalten sind.
Im folgenden HTML-Codebeispiel wird der Inhalt eines Dictionary-Objekts
verwendet, um Text in mehrere Textfelder einzusetzen.
Sub cmdAendern_OnClick
Dim d
' Erstellen einer Variablen
Set d = CreateObject("Scripting.Dictionary")
d.Add "0", "Athen"
' Einige Schlüssel und Elemente hinzufügen
d.Add "1", "Belgrad"
d.Add "2", "Kairo"
For Each I in d
Document.frmFormular.Elements(I).Value = D.Item(I)
Next
End Sub
1.1.11 VBScript-Prozeduren
In VBScript gibt es zwei Arten von Prozeduren, die Sub-Prozedur und die
Function-Prozedur.
1.1.11.1
Sub-Prozeduren
Eine Sub-Prozedur ist eine Folge von VBScript-Anweisungen, die zwischen
den Anweisungen Sub und End Sub eingeschlossen sind und Aktionen
ausführen, aber keine Werte zurückgeben. Eine Sub-Prozedur kann
Argumente (Konstanten, Variablen oder Ausdrücke, die von einer aufrufenden
Prozedur übergeben wurden) übernehmen. Wenn eine Sub-Prozedur keine
Argumente hat, muss ihre Sub-Anweisung ein leeres Klammernpaar ()
enthalten.
Die folgende Sub-Prozedur verwendet zwei integrierte (oder eingebaute)
VBScript-Funktionen,MsgBox und InputBox, um einen Benutzer zur Eingabe
von Informationen aufzufordern. Dann zeigt sie das Ergebnis einer
Berechnung an, die auf diesen Informationen basiert. Die Berechnung wird in
einer mit VBScript erstellten Function-Prozedur ausgeführt. Diese wird in der
Behandlung der nachfolgenden Function-Prozedur ebenfalls gezeigt.
Sub KonvertTemp()
temp = InputBox("Geben Sie die Temperatur in Fahrenheit ein.", 1)
MsgBox "Die Temperatur ist " & Celsius(temp) & " Grad Celsius."
End Sub
1.1.11.2
Function-Prozeduren
Eine Function-Prozedur ist eine Folge von VBScript-Anweisungen, die zwischen den
Anweisungen Function und End Function eingeschlossen sind. Eine FunctionProzedur ist einer Sub-Prozedur ähnlich, kann aber auch einen Wert zurückgeben.
Eine Function-Prozedur kann Argumente (Konstanten, Variablen oder Ausdrücke, die
von einer aufrufenden Prozedur übergeben werden) übernehmen. Wenn eine FunctionProzedur keine Argumente hat, muss ihre Function-Anweisung ein leeres
Klammernpaar enthalten. Eine Function-Prozedur gibt Werte zurück, indem ihrem
Namen in einer oder mehreren Anweisung(en) der Prozedur ein Wert zugewiesen
wird. Der Typ des Rückgabewertes einer Function-Prozedur ist immer ein Variant.
Die Funktion Celsius im folgenden Beispiel berechnet aus Temperaturangaben in
Fahrenheit die entsprechenden Werte in Grad Celsius. Beim Aufruf der Funktion aus
der Sub-Prozedur KonvertTemp wird eine Variable mit dem Argumentwert an die
Funktion übergeben. Das Ergebnis der Berechnung wird an die aufrufende Prozedur
zurückgegeben und in einem Meldungsfeld angezeigt.
Sub KonvertTemp()
temp = InputBox("Geben Sie die Temperatur in Fahrenheit ein.", 1)
MsgBox "Die Temperatur ist " & Celsius(temp) & " Grad Celsius."
End Sub
Function Celsius(GradF)
Celsius = (GradF - 32) * 5 / 9
End Function
1.1.11.3
Übergeben von Daten an bzw. aus Prozeduren
Die Übergabe eines Datenelements an Prozeduren erfolgt über ein Argument.
Argumente dienen als Platzhalter für die an die Prozedur zu übergebenden
Daten. Als Bezeichner für Argumente können Sie jeden als Variablennamen
gültigen Bezeichner verwenden. Wenn Sie eine Prozedur mit der Sub- oder
der Function-Anweisung erstellen, müssen nach dem Namen der Prozedur
Klammern eingefügt werden. Alle Argumente werden zwischen diesen
Klammern angegeben und durch Kommas getrennt. In der folgenden
Prozedur ist beispielsweise GradF ein Platzhalter für den Wert, der an die
Funktion Celsius zur Konvertierung übergeben wird.
Function Celsius(GradF)
Celsius = (GradF - 32) * 5 / 9
End Function
Um Daten von einer Prozedur als Rückgabe zu erhalten, müssen Sie eine
Function-Prozedur definieren. Denken Sie daran, dass eine FunctionProzedur einen Wert zurückgeben kann, eine Sub-Prozedur dagegen nicht.
1.1.11.4
Verwenden von Sub- und Function-Prozeduren im Code
Um eine Function-Prozedur in Ihrem Code zu verwenden, müssen Sie diese
auf der rechten Seite einer Variablenzuweisung oder in einem Ausdruck
verwenden.
Beispiele:
temperatur = Celsius(temp)
oder
MsgBox "Die Temperatur ist " & Celsius(temp) & " Grad Celsius."
Um eine Sub-Prozedur aus einer anderen Prozedur aufzurufen, geben Sie
den Namen der Prozedur zusammen mit den erforderlichen Argumenten
(durch Kommas getrennt) ein. Die Call-Anweisung ist nicht erforderlich. Wenn
Sie sie jedoch verwenden, müssen Sie die Argumente in Klammern
einschließen.
Das folgende Beispiel zeigt zwei Aufrufe der Prozedur MeineProz. In einem
Fall wird die Call-Anweisung im Code verwendet, im anderen nicht. Beide
Aufrufe haben genau dieselbe Wirkung.
Call MeineProz(erstesArg, zweitesArg)
MeineProz erstesArg, zweitesArg
Beachten Sie, dass bei Nichtverwendung der Call-Anweisung die Klammern
weggelassen werden müssen.
1.1.12 CreateObject-Funktion
Erstellt ein Automatisierungsobjekt und gibt einen Verweis darauf zurück.
CreateObject(Servername.Klassenname [, Speicherort])
Argumente
Servername
Erforderlich. Der Name der Anwendung, die das Objekt bereitstellt.
Klassenname
Erforderlich. Der Typ oder die Klasse des zu erstellenden Objekts.
Speicherort
Optional. Der Name des Netzwerkservers, auf dem das Objekt erstellt werden
soll.
Hinweise :
Alle Automatisierungsserver stellen mindestens einen Objekttyp zur
Verfügung. Eine Textverarbeitung kann beispielsweise ein Anwendungsobjekt,
ein Dokumentobjekt und ein Symbolleistenobjekt bereitstellen.
Sie erstellen ein Automatisierungsobjekt, indem Sie das Objekt, das von
CreateObject zurückgegeben wird, einer Objektvariablen zuweisen:
Dim ExcelTabelle
Set ExcelTabelle = CreateObject("Excel.Sheet")
Der Code startet die Anwendung, die das Objekt erstellt (in diesem Fall eine
Microsoft Excel-Tabelle). Anschließend können Sie aus dem Code mit der von
Ihnen festgelegten Objektvariablen auf das Objekt zugreifen. In diesem
Beispiel können Sie auf Eigenschaften und Methoden des neuen Objekts mit
der Objektvariablen ExcelTabelle und auf Eigenschaften und Methoden
anderer Excel-Objekte wie dem Application-Objekt und der ActiveSheet.CellsAuflistung zugreifen:
' Excel über das Application-Objekt sichtbar machen.
ExcelTabelle.Application.Visible = True
' Text in die ersten Zelle der Tabelle einfügen.
ExcelTabelle.ActiveSheet.Cells(1,1).Value = "Das ist Spalte A, Zeile
1"
' Tabelle speichern.
ExcelTabelle.SaveAs "C:\Eigene Dateien\TEST.XLS"
' Excel über die Quit-Methode des Application-Objekts beenden.
ExcelTabelle.Application.Quit
' Objektvariable freigeben.
Set ExcelTabelle = Nothing
Das Erstellen von Objekten auf einem Remoteserver kann nur durchgeführt
werden, wenn die Internetsicherheit deaktiviert wurde. Sie können ein Objekt
auf einem entfernten Netzwerkcomputer erstellen, indem Sie den
Computernamen an das Argument Servername von CreateObject übergeben.
Dieser Name entspricht dem Computernamenteil im Freigabenamen. Bei der
Netzwerkfreigabe "\\meinserver\public" ist der Servername "meinserver".
Darüber hinaus können Sie auch den Servernamen unter Verwendung des
DNS-Formats oder einer IP-Adresse angeben.
Der nachstehend aufgeführte Code gibt die Versionsnummer einer ExcelInstanz zurück, die auf dem entfernten Netzwerkcomputer "meinserver"
ausgeführt wird:
Function VersionAnzeigen
Dim XLApp
Set XLApp = CreateObject("Excel.Application", "MeinServer")
VersionAnzeigen = XLApp.Version
End Function
Ist der angegebene Remoteserver nicht vorhanden oder kann er nicht
gefunden werden, wird eine Fehlermeldung generiert.
1.2
Nicht in VBScript enthaltene Visual Basic für Applikationen-Features
Kategorie
Ablaufsteuerung
Arraybehandlung
Auflistung
Bedingte
Kompilierung
Dateieingabe/ausgabe
Nicht verfügbares Feature/Schlüsselwort
DoEvents
GoSub...Return, GoTo
On Error GoTo
On...GoSub, On...GoTo
Zeilennummern, Zeilenmarken
Option Base
Deklarieren von Arrays mit Untergrenzen <> 0
Add, Count, Item, Remove
Zugriff auf Auflistungen unter Verwendung des Ausrufungszeichens (!)
(z. B. MeineAuflistung!Foo)
#Const
#If...Then...#Else
Alle in Basic üblichen Dateiein- und -ausgaben
Alle intrinsischen Datentypen außer Variant
Type...End Type
Datums-/Zeitangaben Date-Anweisung, Time-Anweisung
DDE
LinkExecute, LinkPoke, LinkRequest, LinkSend
Debug.Print
Debuggen
End, Stop
Declare (zum Deklarieren von DLLs)
Optional
Deklaration
ParamArray
Static
Erl
Fehlerbehandlung
Error
Resume, Resume Next
Finanzmathematik
Alle finanzmathematischen Funktionen
CVar, CVDate
Konvertierung
Str, Val
Objektbearbeitung
TypeOf
Clipboard
Objekte
Collection
Datentypen
Operatoren
Optionen
Select Case
Verwenden von
Objekten
Zeichenfolgen
Like
Deftype
Option Base
Option Compare
Option Private Module
Ausdrücke, die das Is-Schlüsselwort oder einen oder mehrere
Vergleichsoperatoren enthalten
Ausdrücke, die einen Wertebereich unter Verwendung des ToSchlüsselworts enthalten.
Zugriff auf Auflistungen unter Verwendung des Ausrufungszeichens
(!)
Zeichenfolgen mit fester Länge
LSet, RSet
Mid-Anweisung
StrConv
Herunterladen