(for Internet Explorer)
← ▼ ▲
↑
ファイルを一覧するときの速度
File オブジェクト
Folder オブジェクト
や
の Path プロパティや Name プロパティは、
処理速度が遅いです。
参考
→ ファイルを一覧するときの速度 - vbslib
← ▼ ▲
暗号化 - Windows Script Encoder
→ ＠IT：Windows TIPS -- Tips：WSHスクリプト・コードを暗号化する (Web)
暗号化されたスクリプト ファイルの拡張子は、.vbe です。
← ▼ ▲
エラー、デバッグ (VBScript)
→ エラー処理, On Error
→ デバッグ用ファイル出力
→ 動作ログ
→ WScript.Echo
→ デバッガ （Visual Studio などに統合された機能）
printf デバッグ
→ Err オブジェクト
→ エラーコード、エラーメッセージ、トラブルシューティング
→ エラーを発生させる
→ ステップ実行デバッグ
→ Finally ブロック
→ （Err版）
→ サブ・プロシージャと On Error の動き
→ イミディエイトウィンドウ （実行してみる）
→ ブレークポイント
→ ウォッチ （変数の値をチェックする）
← ▼ ▲
デバッガ （Visual Studio など）
cscript //x script.vbs
デバッグを中止するときは、スクリプトを実行しているコマンドプロンプトを
終了します。(cscript 使用時のみ可能） wscript のプロセスを終了させるには、
タスクマネージャーを使うか、コマンドプロンプトから次のように入力します。
taskkill /IM "wscript.exe" /F
途中で止めたいときは、ブレークポイントを張るか、Stop 命令をスクリプト中に記述
します。
起動コマンド：
WSH のデバッガーをインストールしてから、次のように //x を付けて起動すると、
デバッガが起動し、スクリプトの先頭で止まります。
→ Visual Studio (有料/無料)
→ MS Office 2000, XP, 2003 (有料)
→ Windows Script Debugger (msscrdbg.exe, scd10jp.exe) (無料)
→ VbsEdit (Web) (有料)
バッチファイルやショートカットにするとよいでしょう。
デバッガーの画面：
WSH のデバッガー
関連
→ vbslib 版 - コマンドラインやショートカットからデバッガーに接続する
← ▼ ▲
Visual Studio (有料/無料)
インストールすると、自動的に使えるようになります。
確認済み： 2005, 2008, 2010, 2012, 2013 の Standard, Professional, Community 以上。
Express Edition は、WSH をデバッグできません。 （VC++, VB, VC#, WebDev）
[ デバッグ > ウィンドウ > イミディエイト ] を選ぶと、? に続けて式を入力すると、実行して
結果を表示できます。
エラーが発生したりブレークしたら、[ デバッグ > ウィンドウ > 呼び出し履歴 ] から、関数の
呼び出し関係を確認できます。
エラーが発生したりブレークしたら、変数を右クリック、または、式を選択して右クリック
[ ウォッチ式の追加 ] を選ぶと、値を確認できます。
JIT のリストから 「新しいインスタンス Visual Studio xxxx」 を表示させないようにするには、
Visual Studio [ ツール > オプション > デバッグ > Just-In-Time ] の [ スクリプト ] のチェックを
はずします。
[ 親: WSH のデバッガー ]
→ クライアント側スクリプトのデバッグ (Web)
参考
Visual Studio のソリューション・エクスプローラーのソリューションを右クリック [ 名前の
変更 ] で名前の先頭に a をつけると、Just In Time Debugger のリストの先頭に表示され
ます。 もし、「ソリューション名を変更できません」 エラーが出るときは、
C:\WINDOWS\system32\*.suo を削除してください。
デバッガーを選択するときのリストの先頭にデバッガーを移動する
← ▼ ▲
MS Office 2000, XP, 2003 (有料)
フルインストールすると、自動的に、Microsoft Script Editor がインストールされます。
メニューの [ ツール(T) > マクロ(M) > Microsoft Script Editor(E) ] でもインストールが始まります。
JIT のリストから 「新しいインスタンス Microsoft Script Editor」 を表示させないようにするには、
Excel [ ツール > マクロ > Microsoft Script Editor > ツール > オプション > デバッグ > JIT の設定
> JIT デバッグを有効にする ] のチェックをはずします。
MS Office 2007, 2010 には、WSH のデバッガーは入っていません。
[ 親: WSH のデバッガー ]
← ▼ ▲
Windows Script Debugger (msscrdbg.exe, scd10jp.exe) (無料)
→ ダウンロード詳細 Windows Script Debugger (Web)
[ スタート > すぺてのプログラム > アクセサリ > コマンド プロンプト ] から、下記のように
入力します。
"C:\Program Files\Microsoft Script Debugger\msscrdbg.exe" /regserver
"C:\Program Files\Microsoft Script Debugger\msscrdbg.exe" /unregserver
?Err.Description
型が一致しません。
アンインストールするには、コマンド プロンプトに下記コマンドを入力してから、
エラーが発生したら、[ 表示 > コマンドウィンドウ ] から、次のように入力すると、エラーメッセージを
確認できます。
Windows XP の場合：
Windows 7 / 8(RP) の場合：
上記から、scd10jp.exe をダウンロードする。
Windows 8(RP) では、安全ではないと表示されますが、問題ありません。
ダウンロード・フォルダーなどにできたものを使ってください。
1.
2.
scd10jp.exe を右クリック [ 管理者として実行 ]。 インストール先は、デフォルトのまま。
再起動はしなくても構いません。
3.
スタート [ プログラムとファイルの検索 ] に [ regedit ] と入力して
（Windows 8(RP) では、スタート画面を表示させて、キーボードから [ regedit ] と入力して）
[ Enter ] キーを押し、
[HKEY_CLASSES_ROOT\CLSID\{834128A2-51F4-11D0-8F20-00805F2CD064}\LocalServer32]
の （既定） に、C:\Program Files\Microsoft Script Debugger\msscrdbg.exe を入力する。
scd10jp.exe をダブルクリック。 インストール先は、デフォルトのまま。
再起動はしなくても構いません。
2.
1.
上記から、scd10jp.exe をダウンロードする。
3.
GetEchoStr 関数 (要vbslib) を使うと、オブジェクトの型や、配列の要素を確認できます。
?GetEchoStr( object )
? に続けて変数名や、ピリオドに続けてプロパティ名を入力すると、値を確認できます。
?a
2
?object.prop
2
エラーが発生したりブレークしたら、[ 表示 > 呼び出し履歴 ] から、関数の呼び出し関係を確認でき
ます。
[ 親: WSH のデバッガー ]
コントロールパネルから、Microsoft Script Debugger をアンインストールする。
スクリプトの中の、途中で止めたい場所に、Stop 命令を記述して、
[ スタート > すぺてのプログラム > アクセサリ > コマンド プロンプト ] から、
デバッグを中止するときは、スクリプトを実行しているコマンドプロンプトを終了します。(cscript 使用
時のみ可能） wscript のプロセスを終了させるには、タスクマネージャーを使うか、コマンド
プロンプトから次のように入力します。 taskkill /IM "wscript.exe" /F
のように入力すると、デバッガーに接続します。 実行を開始すると、Stop 命令で止まります。
cscript //x script.vbs
デバッガーの使い方：
アンインストールするには、regedit を起動して、
[HKEY_CLASSES_ROOT\CLSID\{834128A2-51F4-11D0-8F20-00805F2CD064}\LocalServer32]
の（既定） に、C:\Windows\system32\mdm.exe を入力してから、
コントロールパネルから、Microsoft Script Debugger をアンインストールする。
→ Visual Studio (有料/無料)
関連
← ▼ ▲
インテリセンス （作りかけ :P）
→ Developer @ ADJUST (Web)
JScript なら、一部のメンバーについて、インテリセンスが使えるようです。
← ▼ ▲
デバッガの不具合
Option Explicit
Class ClassA
Public m_A
End Class
main
Sub main
WScript.Echo "1"
Stop
Dim ClassA : Set ClassA = new ClassA
WScript.Echo TypeName(ClassA)
End Sub
デバッガを使う場合と使わない場合で動きが異なるものがあります。
クラス名と同じ名前のローカル変数を使うと、
・デバッガなし：正常動作
・デバッガあり：下記エラーで停止
Microsoft VBScript 実行時エラー: クラスが定義されていません。: 'ClassA'
クラス名と同じ名前のローカル変数
エラーメッセージの内容と有無
エラーメッセージは、デバッガに接続すると、標準エラー出力の代わりに、デバッガの
出力ウィンドウに表示されますが、内容が異なります。
C:\Folder\Sample.vbs(0, 1) ERROR: Pass.
デバッガなし ： 標準エラー出力へ
デバッガなし ： デバッガの出力ウィンドウへ
ERROR: Pass.
→ クラス名と同じ名前のローカル変数
→ エラーメッセージの内容と有無
ステップ・インで１ステップずつ実行しても、いきなりエラーが設定される
r = FuncA()
FuncA から戻ったときに r が宣言されていないときなど。
→ ステップ・インで１ステップずつ実行しても、いきなりエラーが設定される
← ▼ ▲
ステップ実行デバッグ
コーディングしたばかりのソースを始めて実行するときは、ステップ実行して１つずつ
実行の様子を確認するとよいでしょう。
Stop ← スタート
（コーディングしたばかりのソース１）
（コーディングしたばかりのソース２）
（コーディングしたばかりのソース３）
Stop ← ゴール
初めて実行するときは、コーディングしたばかりのソースの最初と最後に、Stop 命令
やブレークポイントを置きます。
途中でエラーが発生したら、エラーが発生した直前に、最初の Stop 命令やブレーク
ポイントを移動したり、コピーします。
（コーディングしたばかりのソース１）
（コーディングしたばかりのソース２）
Stop ← 続き
（コーディングしたばかりのソース３） ←エラーがあった
Stop ← ゴール
ステップ実行しているときに、自分でチェックしたことがあれば、それをテストスクリプト
に反映させるとよいでしょう。
最後の Stop 命令やブレークポイントに到達して、正しい結果が得られたら、
デバッグ完了です。
もし、到達しなかったら、異常終了した可能性があります。
← ▼ ▲
ブレークポイント
Visual Studio が起動してから、
[ デバッグ | ウィンドウ | ブレークポイント | 新規作成 | 関数でブレーク ]
で、関数にブレークポイントを張っておくと、スクリプトを再起動しても
ブレークポイントが張られた状態から起動できます。
関数名またはメソッド名を入力します。
クラスを指定することはできません。
（ClassA::MethodA と入力しても ClassA.MethodA と入力しても、止まりません。
← ▼ ▲
ウォッチ （変数の値をチェックする）
ブレーク中に表示されているソースに書かれている変数にカーソルを合わせると、値を確認できます。
[ デバッグ | ウィンドウ | ウォッチ ] で表示されるウィンドウに、選択中の変数をドラッグ＆ドロップする
と、値を表示し続けることができます。
クイックウォッチ
ウォッチ・ウィンドウ
← ▼ ▲
イミディエイトウィンドウ （実行してみる）
? FuncA( 23 )
True
デバッガでブレーク中に [ デバッグ | ウィンドウ | イミディエイト ] で表示したウィンドウに、一時的に
関数などを実行することができるウィンドウです。
上記の例は、ユーザーが定義した FuncA 関数を呼び出して、返り値を表示しています。
? は、Debug.Print の省略形です。
エラーが起きた場所で、正しいパラメーターを探すのに使えます。
r=2
式を評価できません。
? FuncA( r )
5
(Web)
エラーメッセージは気にしなくて構いません。
Dim x : SubA x : ? x
サブルーチン SubA が出力した x を表示する
← ▼ ▲
エラー処理, On Error
→ エラー出力
→ WshStdErrNumber
→ Err オブジェクト
サブ・プロシージャと On Error の動き
デフォルトでは、エラーが発生すると、エラーメッセージを表示して、そこで終了します。
WScript.Echo Err ' 0 表示
NO_OBJ.ERROR ' エラー
WScript.Echo Err ' 実行しない
→ Windows Script Programming On Error Resume Nextの正しい使い方 (Web)
On Error Resume Next を実行した後なら、続きを実行します。
On Error Resume Next
WScript.Echo Err ' 0 表示
NO_OBJ.ERROR ' エラー
WScript.Echo Err ' 424 表示
プロシージャの中で On Error Resume Next を実行ても、プロシージャの外には影響しません。
WScript.Echo "Main" & Err ' Main 0 表示
SubA
NO_OBJ.ERROR ' エラー、終了
WScript.Echo "Main" & Err ' 実行しない
Sub SubA
On Error Resume Next
WScript.Echo "Sub " & Err ' Sub 0 表示
NO_OBJ.ERROR ' エラー、次へ
WScript.Echo "Sub " & Err ' Sub 424 表示
End Sub
次を実行しない
On Error Resume Next を実行してから呼び出したサブ・プロシージャの中で発生した場合、
エラーメッセージは表示しませんが、サブ・プロシージャの中で On Error Resume Next を
するかどうかで、動きが異なります。
サブ・プロシージャの中で On Error Resume Next をしないときは、終了ではなくプロシージャ
から戻って、メインの続きを実行します。
On Error Resume Next
SubA
WScript.Echo "Main " & Err ' Main 424 表示
Sub SubA
On Error Resume Next
WScript.Echo "Sub " & Err ' Sub 0 表示
NO_OBJ.ERROR ' エラー、次へ
WScript.Echo "Sub " & Err ' Sub 424 表示
End Sub
On Error Resume Next
SubA
WScript.Echo "Main " & Err ' Main 424 表示
Sub SubA
WScript.Echo "Sub " & Err ' Sub 0 表示
NO_OBJ.ERROR ' エラー、関数終了
WScript.Echo "Sub " & Err ' 実行しない
End Sub
エラー処理中として戻る
→ エラー処理 （Err版）
→ サブ・プロシージャと On Error
参考
→ エラー処理 （Err2版）
呼び出し元の関数で On Error Resume Next しているときのデバッグ
エラーが発生して初めてブレークするのは、On Error Resume Next をした
関数になります。呼び出し先のどこで発生したかを知るには、ステップ実行
するしかありません。
WScript.Quit すると、グローバル以外のオブジェクトの Class_Terminate は呼ばれません。
WSHでは、GoTo 文は使えません。
Dim en,ed
ErrCheck : On Error Resume Next
...
en = Err.Number : ed = Err.Description : On Error GoTo 0
If en = 2 Then ... : en = 0
If en <> 0 Then Err.Raise en,,ed
VBS では、エラーが発生すると、メッセージを表示して強制終了します。
On Error Resumt Next して、Err オブジェクトをチェックすると、エラー時の動作を変えることができます。
WScript.Quit
プログラムを終了します
エラー処理 （Err 版）
On Error Resume Next
On Error GoTo 0
If en = 2 Then ... : en = 0
Visual Studio 2005 のデバッガは、On Error Resume Next していないときにエラーが発生すると、
その続きを実行することはできません。 Visual Studio 2008 のデバッガは、エラーが発生しても、
ステップ実行で続きを実行することができます。
ただし、両デバッガとも、On Error Resume Next した後でエラーが発生してもブレークしません。
関連
→ Err2 のコーディング例 (TryStart, TryEnd)
Dim obj : Set obj = new ClassA
WScript.Echo "Not 'On Resume Next'"
Class ClassA
Private Sub Class_Initialize()
NO_OBJ.ERROR
End Sub
End Class
コンストラクタでエラーが発生すると、new の続きを実行してしまいます。
← On Resume Next をしていないのに、
実行してしまう。
→ ErrCheck
参考
→ On Error ステートメント (Web)
（VBA では使えます。）
→ FinObj クラス (Finallyブロック)
← ▼ ▲
Err オブジェクト
(Web)
Err オブジェクトは、どこからでも参照できます。
Err.Number
エラー番号
Err.Description
最初にエラーを発生させたオブジェクトまたはアプリケーションの名前
Err.Source
→ エラー処理
On Error Resume Next
NO_OBJ.ERROR
WScript.Echo "Err.Number = " & Err.Number
WScript.Echo "Err.Description = " & Err.Description
WScript.Echo "Err.Source = " & Err.Source
Err.Clear
WScript.Echo "Err.Number = " & Err.Number
WScript.Echo "Err.Description = " & Err.Description
WScript.Echo "Err.Source = " & Err.Source
On Error GoTo 0
WScript.Echo ""
Err.Raise 62 'ファイルの最後を超えた入力を〜 エラー
サンプル
出力
Err.Number = 424
Err.Description = オブジェクトがありません。
Err.Source = Microsoft VBScript 実行時エラー
Err.Number = 0
Err.Description =
Err.Source =
C:\Documents and Settings\masanori.toda\デスクトップ\script.vbs(18, 1) Microsoft
VBScript 実行時エラー: ファイルの最後を超えた入力を行おうとしました。
Err.Clear
（関連） On Error GoTo 0 は
エラーをクリアします。 Err.Number は 0 になり、他のプロパティもリセットします。
エラー時の動き
が変わるだけでなく、エラーのクリアもします。
→ エラーメッセージ
エラーメッセージに出る値に 0x800A0000 を引いた値（？）
エラーが発生した行番号は取得できません
→ エラーを発生させる
関連
← ▼ ▲
エラーを発生させる
Err.Raise 1
エラー番号が 1〜0x7FFF の場合、エラーメッセージには、エラー番号＋
0x800A0000 した値がエラーコードとして表示されます。
「未知の実行時エラーです。」と表示されたエラー番号を
ユーザが使うことができそうです。下記のコードで確認できます。
Err.Number
エラー番号は下記のように確認できます。
→ Raise メソッド (Web)
object.Raise(number, source, description, helpfile, helpcontext)
エラーの補助情報も作成できます。 Err オブジェクトから参照できます。
Err.Raise vbObjectError + 1, "vbslib", "エラー1"
→ Raise (VBSLib)
Err.Raise vbObjectError + N
または
→ Raise メソッド (Web)
Option Explicit
On Error Resume Next
Dim i
For i=1 To &h7FFF
Err.Raise i
If Err.Description <> "未知の実行時エラーです。" Then
WScript.Echo Err.Description & "(" & Err.Number & ")"
End If
Err.Clear
Next
オートメーション オブジェクト内で独自のエラー番号を設定するときには
vbObjectError = 0x80040000 + N を指定することが MSDN に書かれていますが、
一部はすでに値が使われており、適当でないエラーメッセージが表示されます。
cscript errnum.vbs
プロシージャの呼び出し、または引数が不正です。(5)
オーバーフローしました。(6)
メモリが不足しています。(7)
インデックスが有効範囲にありません。(9) #########
固定サイズの配列、または現在、この配列はサイズを変更できない状態にあります。(10)(&hA)
0 で除算しました。(11)(&hB)
型が一致しません。(13)(&hD) #########
文字列領域が不足しています。(14)(&hE)
要求された操作を実行できません。(17)(&h11) #########
スタック領域が不足しています。(28)(&h1C)
Sub または Function が定義されていません。(35)(&h23)
DLL 読み込み時のエラーです。(48)(&h30)
内部エラーです。(51)(&h33)
ファイルの名前または数が不正です。(52)(&h34)
ファイルが見つかりません。(53)(&h35) #########
ファイルのモードが不正です。(54)(&h36)
ファイルは既に開かれています。(55)(&h37)
デバイス I/O (入出力) エラーです。(57)(&h39)
既に同名のファイルが存在しています。(58)(&h3A) #########
ディスクの空き容量が不足しています。(61)(&h3D)
ファイルの最後を超えた入力を行おうとしました。(62)(&h3E) #########
ファイル数が多すぎます。(67)(&h43)
このデバイスは使用できません。(68)(&h44)
書き込みできません。(70)(&h46) #########
ディスクは準備されていません。(71)(&h47)
異なったドライブでも名前の変更はできません。(74)(&h4A)
パスまたはファイル名が無効です。(75)(&h4B) #########
パスが見つかりません。(76)(&h4C) #########
オブジェクト型の変数は設定されていません。(91)(&h5B)
For ループは初期化されていません。(92)(&h5C)
Null 値の使い方が不正です。(94)(&h5E)
必要なテンポラリ ファイルが作成できません。(322)(&h142)
オブジェクトがありません。(424)(&h1A8) #########
ActiveX コンポーネントはオブジェクトを作成できません。(429)(&h1AD)
クラスはオートメーションをサポートしていません。(430)(&h1AE)
オートメーションの操作中にファイル名またはクラス名を見つけられませんでした。(432)(&h1B0)
オブジェクトでサポートされていないプロパティまたはメソッドです。(438)(&h1B6)
オートメーション エラーです。(440)(&h1B8)
このオブジェクトではサポートされていない操作です。(445)(&h1BD)
このオブジェクトは、名前付き引数をサポートしていません。(446)(&h1BE)
現在の国別情報の設定は、このオブジェクトではサポートされていません。(447)(&h1BF)
名前付き引数が不正です。(448)(&h1C0)
引数は省略できません。(449)(&h1C1)
引数の数が一致していません。または不正なプロパティを指定しています。(450)(&h1C2)
オブジェクトがコレクションではありません。(451)(&h1C3)
指定された DLL に関数が定義されていません。(453)(&h1C5)
コード リソースのロックエラーです。(455)(&h1C7)
このキーは既にコレクション内の要素に関連付けられています。(457)(&h1C9)
VBScript でサポートされていないオートメーションが変数で使用されています。(458)(&h1CA)
リモート サーバ マシンが存在しないか、利用できません。(462)(&h1CE)
ピクチャが不正です。(481)(&h1E1)
この変数は宣言されていません。(500)(&h1F4)
不正な代入です。(501)(&h1F5)
このオブジェクトは safe モードでは作成できません。(502)
このオブジェクトは safe モードでは初期化できません。(503)
このオブジェクトは safe モードでは作成できません。(504)
不正な参照です。(505)
クラスが定義されていません。(506)
例外が発生しました。(507)
メモリが不足しています。(1001)
構文エラーです。(1002)(&h3EA) #####
':' がありません。(1003)
'(' がありません。(1005)
')' がありません。(1006)
']' がありません。(1007)
識別子がありません。(1010)
'=' がありません。(1011)
'If' がありません。(1012)
'To' がありません。(1013)
'End' がありません。(1014)
'Function' がありません。(1015)
'Sub' がありません。(1016)
'Then' がありません。(1017)
'Wend' がありません。(1018)
'Loop' がありません。(1019)
'Next' がありません。(1020)
'Case' がありません。(1021)
'Select' がありません。(1022)
式がありません。(1023)
ステートメントがありません。(1024)
ステートメントの末尾が不正です。(1025)
整数型の定数がありません。(1026)
'While' または 'Until' がありません。(1027)
'While'、'Until' または終了するためのステートメントがありません。(1028)
'With' ステートメントがありません。(1029)
識別子が長すぎます。(1030)
不正な数字です。(1031)
文字が正しくありません。(1032)
終了していない文字列型の定数です。(1033)
終了していないコメントです。(1034)
'Me' キーワードの使い方が不正です。(1037)
'do' がありません。(1038)
不正な 'exit' ステートメントです。(1039)
'for' ループを制御する変数が不正です。(1040)
名前が二重に定義されています。(1041)
行頭のみ許されるステートメントです。(1042)
値渡しの変数に割り当てられません。(1043)
Sub プロシージャを呼び出すときに、かっこを使うことはできません。(1044)
リテラル定数を指定してください。(1045)
'In' がありません。(1046)
'Class' がありません。(1047)
クラスの内部で宣言しなければなりません。(1048)
プロパティの宣言に Let、Set または Get がありません。(1049)
'Property' ステートメントがありません。(1050)
プロパティで指定した引数の数は、同じでなければなりません。(1051)
クラスでは、既定のプロパティ/メソッドを複数個選択することはできません。(1052)
クラスの初期化または終了に引数がありません。(1053)
Property set または Property let には少なくとも 1 つの引数が必要です。(1054)
'Next' が不正です。(1055)
'Default' は 'Property'、 'Function' または 'Sub' の場合にのみ指定できます。(1056)
'Default' 指定する場合には、'Public' も指定されていなければなりません。(1057)
'Default' の指定は、 Property Get にのみ適用されます。(1058)
Microsoft VBScript コンパイル エラー(4096)
Microsoft VBScript 実行時エラー(4097)
Regular Expression オブジェクトがありません。(5016)
正規表現で構文エラーが発生しました。(5017)
文字の繰り返しを表す正規表現演算子が不正です。(5018)
正規表現の中に ']' を指定してください。(5019)
正規表現の中に ')' を指定してください。(5020)
文字セットの範囲が不正です。(5021)
JA(30000)
True(32766)
False(32767)
定義済みエラー番号
→ 定義済みエラー番号
結果例
1000〜4096 は、コンパイルエラーのようです。
Err.Raise で下記の番号を指定すると、エラーメッセージが自動的につきます
←
↓