VBScriptざっくりチュートリアル

これは何?

仕事で、GUIの自動テストツールQuickTestを使うことになったのですが、
これのテストコードがなんとVBScript
JScript好きとして覚えたくなかったのですが、仕方なく最低限必要な記法をメモします

コメント

'コメント行です
'ブロックコメントは無い様です

変数宣言

'Dim a = 100 って書き方はエラー
Dim a
a = 100

if文の書き方

' == で無いことに注意
If a = "test" ThenElseIfElseEnd If

' 否定文の書き方
If Not a = "test" ThenEnd If

'一行でif文
If a = "test" Then

繰り返し

' Do 〜 While
Dim i
i = 0
' 結果がfalseになるまでループ
Do While i < 100Exit Do 'breakに相当
Loop
' Loop While i < 100 のように、Loopの方に条件式を書くことも可
' その場合、1回目のループは必ず実行される。do〜whileループ風

' For 〜 to
' 1から100までループ。100も含む
For i = 0 To 100Exit For 'breakに相当
Next

' For Each 
' オブジェクトobjの全要素を参照
' 配列も可
For Each i in obj
	〜
Next

配列

'要素数 100 の配列
Dim list(100)
'多次元配列
Dim list2(100,200)

'動的配列
Dim dynamicList()
'サイズを変更(値を保持)
ReDim Preserve intNumbers(4)

'連想配列
set dic = createobject("scripting.dictionary")
dic.add "A", "1"

'キーがAのアイテムを取得
MsgBox dic.item("A")

'キーAの存在確認
dic.exists("A")

' キーでforeach
For Each key in dic.keysnext

' 値でforeach
For Each val in dic.items
    〜
next

サブルーチン(戻り値の無いメソッド)

Sub testSub( argA, argB )End Sub

'サブルーチンを呼び出す時は、括弧はつけない(つけるとエラー)
testSub "テスト", "test"

メソッド

Function testFunc( argA, argB )	'メソッド名 = 値 で戻り値を定義。Function内ならどこでも可
	testSub = 100
	
	'途中で、関数を終わらせる場合
	Exit Function
End Function

'メソッドも同じ
testFunc "テスト", "test"

GUI関係

'メッセージボックス表示
MsgBox "test"

Dim text
'テキスト入力欄表示
text = InputBox("何か入れれ")

文字列結合

Dim text1,text2,int1

text1 = "あああ"
text2 = "いいい"
int1  = 100

'テキスト同士の結合(どっちでも可)
MsgBox ( text1 + text2 )
MsgBox ( text1 & text2 )

'テキストと数字の結合
' text1 + int1 は NG
MsgBox ( text1 & int1 )

三項演算子

' スペック的にあまりオススメできないらしい
IIf(評価式,評価式が真のときに返される値または式,同じく偽のときに返される値または式)

正規表現

Set wRegExp = New RegExp
'検索パターン
wRegExp.Pattern = "[^0-9]+"
'複数検索の可否
wRegExp.Global = True
'大文字/小文字の区別の可否(区別しない : True)
wRegExp.IgnoreCase  = True

'置換
Dim wStr1,wStr2
wStr1 = "ABCD123EFG456"
wStr2 = regEx.Replace(wStr1, "")
'wStr2 = ABCDEFG"

'検索実行
Dim wStr1,wStr2
wStr1 = "ABCD123EFG456"
Set wResults = regEx.Execute(wStr1)
For Each wResult in wResults
	'検索されたIndex
	wResult.FirstIndex
	'検索された文字列
	wResult.Value
Next

文字列を数値に変更

Dim str1,str2
Dim lng1,lng2
str1 = "12345678"
'CIntだと、Integer型に変換するが、VBでのIntegerの最大値は(32767)で
'それ以上の値を入れると、Exceptionするので、あまりオススメできない
lng1 = CLng(Str1)

str2 = "AJP12345678JIJD"
'javascriptみたいな柔軟な訂正はしてくれない(この場合Exception)
'数値以外が入る場合は、正規表現を使って、数値以外を排除する必要あり
lng2 = CLng(Str2)

サブルーチンの参照呼出し

Sub Test
	MsgBox "123"
End Sub

Sub Test2(pSub)
	Call pSub
End Sub

'文字列で呼び出すってひどいな…
Test2 GetRef("Test")

オブジェクトのNullチェック

Sub testSub( obj )
	If Not obj Is Nothing Then
		' なんか処理
	End If
End Sub

'サブルーチンに引数としてNullオブジェクトを渡す場合
testSub Nothing

その他

'オプション:宣言していない変数の使用を禁止
option explicit

コマンドプロンプトの実行

Dim wSell
wSell = CreateObject("WScript.Sell")
Call wSell.run("cmd /c 任意のコマンド(複数行なら.batを作る)")

サブルーチンや関数のオーバーロードはできる?

無理っぽい