VBScript/Specification
VBScript 言語仕様 構文 †
2013-11-22
変数の暗黙的な宣言の禁止 †
基本的にDimが無くても変数を宣言することは可能で、スクリプト中に初めて登場した時点で変数が定義される(暗黙的な宣言)
Option Explicitをスクリプト中に記述することによって、以降の暗黙的な宣言を禁止し、Dimを用いた明示的な宣言を要求することができる
#sh(vb){{
' DimなどをつけなくてもOK
valSome1 = 1
valSome2 = 2
' 暗黙的な宣言を禁止する
Option Explicit
' 以降、変数使用前に明示的に宣言しないとエラーになる
Dim valSome3
valSome3 = 3 ' OK
valSome4 = 4 ' NG
}}
命令文 †
基本的に1行で命令を記述する
#sh(vb){{
Dim a
a = 1 + 3
}}
複数行にわたる場合はアンダースコアを行末に入れる
#sh(vb){{
Dim b
b = 0 _
+ 1 _
+ 2
}}
コメント文 †
シングルクォートから行末まではコメントとして扱われる
もしくはRemを使用しても可能(シングルクォートを使うほうが一般的)
なお、VBScriptでは複数行に渡ってコメントは記述できないため、各行シングルクォートを記述する必要がある
#sh(vb){{
'コメント
Dim a 'これもコメント
'複数行に渡る場合は
'各行に'を記述する必要が
'ある
Rem これもコメント
}}
Dim †
変数の宣言に使用する
基本的にDimが無くても変数を宣言することは可能だが、"Option Explicit"が宣言されている場合にはDimが必須となる
#sh(vb){{
Option Explicit
Dim i
Dim message1, message2, message3
message1 = "Hello"
' Dimの文に値を定義することはできない
'Dim message4 = "Ni Hao"
}}
ReDim †
動的配列の宣言に使用する
#sh(vb){{
Option Explicit
ReDim arr(10)
arr(3) = 3
' 再宣言すると中身は消える
ReDim arr(14)
arr(13) = 0
' Preserveをつけると再宣言したとき中身は保持される
ReDim Preserve arr(20)
WScript.Echo(arr(13))
}}
Const †
定数の定義に使用する
#sh(vb){{
Const ZERO = 1
}}
Set †
オブジェクトインスタンスの定義に使用する
また、インスタンスの破棄にも使用することがある
#sh(vb){{
Option Explicit
Dim objMyClass
' インスタンスの定義
Set objMyClass = New MyClass
' インスタンスの破棄
Set objMyClass = Nothing
}}
If/ElseIf/End If †
#sh(vb){{
If condition1 Then
doUnderCondition1()
ElseIf condition2 Then
doUnderCondition2()
Else
doUnderOtherConditions()
End If
}}
Select/End Select †
#sh(vb){{
Select Case condition
Case condition1
doUnderCondition1()
Case condition2
doUnderCondition2()
Default
doUnderOtherConditions()
End Select
}}
While/WEnd †
#sh(vb){{
While condition
doUnderCondition()
WEnd
}}
Do/Loop †
先判定型
#sh(vb){{
Do While condition
doUnderCondition()
If exitCondition Then
Exit Do
End If
Loop
Do Until condition
doUnderOtherConditions()
If exitCondition Then
Exit Do
End If
Loop
}}
後判定型
#sh(vb){{
Do
doAtFirstAndWhileUnderCondition(
If exitCondition Then
Exit Do
End If
Loop While condition
Do
doAtFirstAndUntilUnderCondition()
If exitCondition Then
Exit Do
End If
Loop Until condition
}}
For/Next †
#sh(vb){{
For i = start to end
doUnderCondition()
If exitCondition Then
Exit For
End If
Next
For i = start to end Step step
doUnderCondition()
If exitCondition Then
Exit For
End If
Next
For Each val in collection
doAnythingToEachElement(val)
If exitCondition Then
Exit For
End If
Next
}}
Sub/End Sub †
Subプロシージャを定義する
Subプロシージャは呼び出し元に結果を返さない場合に使用する
#sh(vb){{
Sub MyProcedure(arg1, arg2)
doAnything()
End Sub
}}
Function/End Function †
Functionプロシージャを定義する
Functionプロシージャは呼び出し元に結果を返す場合に使用する
戻り値は「プロシージャ名=戻り値」で指定する
#sh(vb){{
Function MyProcedure(arg1, arg2)
doAnything()
Dim returnValue
MyProcedure = returnValue
End Function
}}
Call †
プロシージャを呼び出す
SubおよびFunctionどちらでも構わないが、引数を明示的に取得する場合はCallをつけてはいけない
#sh(vb){{
' Subプロシージャ
Call MySubProcedure1()
' Functionプロシージャでも戻り値を無視する場合
Call MyFuncProcedure2(1, 2, 3)
' Fuctionプロシージャで戻り値を取得する場合はCallは書かない
' Callを書くと解析エラーになる
result = MyFunctionProcesure2(1, 2, 3)
}}
Class/End Class †
クラスを定義する
#sh(vb){{
Class MyClass
Public publicValue
Private privateValue
Public PublicFunction()
doAnything()
PublicFunction = 0
End Function
Private PrivateFunction()
doAnything()
PrivateFunction = 0
End Function
Public Sub Class_Initialize()
publicValue = 0
privateValue = 0
End Sub
Pubic Sub Class_Terminate()
publicValue = 0
privateValue = 0
End Sub
End Class
}}
使い方
#sh(vb){{
Set myClass = New MyClass ' このときにClass_Initializeが呼ばれる
myClass.publicValue = 100
myClass.publicFunction()
Set myClass = Nothing ' このときにClass_Terminateが呼ばれる
}}
With/End With †
ある同一のオブジェクトに対し複数の処理をする
#sh(vb){{
Set objA = new A
With objA
.Name = "name" ' objA.Name = "name" と同じ
.ID = 0 ' objA.ID = 0 と同じ
End With
}}
On Error Resume Next †
エラーが発生したときの処理を定義する
エラーが発生した場合、発生した行の次の行から処理を続ける
#sh(vb){{
On Error Resume Next
Dim x, y, z
x = 1
y = 0
z = x / y ' エラー
doAnything()
' ...
}}
On Error Resume Next/On Error Goto 0 †
On Error Resume NextとOn Error Goto 0で囲うと、該当範囲でエラーが発生した場合にOn Error Resume Nextの次の行から処理をやり直す
#sh(vb){{
On Error Resume Next
Dim x, y, z
x = 1
y = InputBox("分母の数を入力")
z = 1 / y ' 入力によってはエラーが発生する
On Error Goto 0
}}
Errオブジェクト †
エラーが発生した場合エラーオブジェクトがセットされる
#sh(vb){{
If Err Then
WScript.Echo("エラー " & Err.Number & " :" & Err.Description)
End If
}}
詳細はこちらを参照
http://www.atmarkit.co.jp/ait/articles/0702/15/news122_2.html