関連ページ:ASP
VisualBasic 6.0 
参考リンク 
VBScript ランゲージリファレンス
http://msdn.microsoft.com/library/ja/script56/html/vbscripttoc.asp
Visual Basic 中学校
http://homepage1.nifty.com/rucio/main/main.htm
VB6について。けっこういいかも。
VBDOX - Visual Basic Documentation Generator
http://vbdox.sourceforge.net/index.html
速習VB6.0 
他の言語を知っている人が急遽VB6.0をやることになったときのために書いた覚え書きです。
一部VBScriptのことも書いてあります。
■ VisualBasic 6.0 言語仕様
・VB の配列周りの仕様は腐っている。
Dim a(10) ' a(0) から a(10) まで11個の変数が確保される。
For i = 0 To 10 ' To は下限、上限を含む。11回繰り返される。
MsgBox a(i)
Next
For Lbound(a) To UBound(a) ' 下限から上限まで。11回繰り返される。
Next
' 中身0個の配列を作りたい場合はこうする。(Dim a(-1)はエラー)
Dim a
a = Array()
MsgBox LBound(a) ' 0
MsgBox UBound(a) ' -1
・文字列の最初の文字のインデクスは1
a = "Hello world!"
MsgBox Mid(a, 1, 5) ' Hello
・End If の "If" を忘れないように! End ステートメントはプログラムを終了させる。
・ByVal ByRef は省略できる。省略時は ByRef。文字列も ByVal で渡すのが普通。
・真={True, 0以外の数値}
・偽={False, Empty, Null, 0}
・文字列は真偽値として使えない
・IIF(条件式, 値1, 値2) が 条件式 ? 値1 : 値2 に相当(VBScriptにはない)
・Select のいろいろ
Select Case Age
Case Is < 20
MsgBox "未成年ですね?"
Case 30 To 39
MsgBox "30代ですね?"
Case 77, 88, 99
MsgBox "喜寿か米寿か白寿ですね?" Case Else
MsgBox Age & "ですか・・・。"
End Select
・Integerは16ビット。Longは32ビット。整数はすべてLongで統一してよい。
(オーバーフローはエラーになるので注意)
・文字列に変換する関数CStrはエラーを出す可能性があるので注意。(CStr(Array("a")) ⇒ エラー)
・連想配列(辞書)がある。Dictionaryオブジェクト
Dim d ' 変数を宣言します。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens" ' キーと項目を追加します。
d.Add "b", "Belgrade"
MsgBox d.Count ' 2
MsgBox d.Item("a")
MsgBox d.Item("b")
MsgBox d.Item("c") ' 存在しないキーは空文字列となる。キー "c"が追加される。
MsgBox d.Count ' 3
MsgBox d.Exists("c") ' True
' 全要素に対して繰り返し
a = d.keys ' 全キーからなる配列を取得します。
For i = 0 To d.Count -1
MsgBox a(i) & "=" & d.Item(a(i))
Next
・構造体定義ができる。
' 三次元上の点のユーザ定義型(構造体)
Private Type POINT3D
X As Single
Y As Single
Z As Single
End Type
' 上のユーザ定義型の変数を宣言
Private p1 As POINT3D
・Enum(列挙型)もある。
Public Enum E_SEX ' アンケート用性別列挙型
esexMale = 0 ' 男性
esexFemale = 1 ' 女性
esexNone = 2 ' 返答しない
End Enum
・Sub プロシージャを呼び出すときに、かっこを使うことはできません。
http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list9.shtml
>>値を参照する場合はかっこをつける
>>値を参照しない場合はかっこをつけない
>
>RetVal = ABC("def")
>ABC "def"
>
>この違いの話でしょうか。多分 ABC "def" という書き方自体が省略形で、
>本来は Call ABC("def") だと思います。Call は省略可能で、Call を省略
>したら () も省略しなくてはならないというお約束だと思います。VB でも
>同じ文法です
>
>私は () を付けない書き方が嫌いで、戻り値を要しない MsgBox の場合も、
>Sub の呼び出しも Call で () を付けて記載しています。
・メモリリークと Set foo = Nothing について
http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200506/05060038.txt
Dim foo As New AClass
という書き方はしないほうがいいらしい。
・条件式の評価は短絡評価(short-circuit evaluation)では「ない」!
よって次のコードはエラーになる。
If UBound(a) >= 0 And a(0) = "/m" Then
Print #g_iFile, "/m set"
End If
・変数の型を調べる
VarType関数を使う。変数の型を示す数値が返ってくる。
vbEmpty 0 Empty 値 (未初期化)
vbNull 1 Null 値 (無効な値)
vbInteger 2 整数型 (Integer)
vbLong 3 長整数型 (Long)
vbSingle 4 単精度浮動小数点数型 (Single)
vbDouble 5 倍精度浮動小数点数型 (Double)
vbCurrency 6 通貨型 (Currency)
vbDate 7 日付型 (Date)
vbString 8 文字列型 (String)
vbObject 9 オブジェクト
vbError 10 エラー値
vbBoolean 11 ブール型 (Boolean)
vbVariant 12 バリアント型 (Variant) (バリアント型配列にのみ使用)
vbDataObject 13 非OLE オートメーション オブジェクト
vbDecimal 14 10 進数型
vbByte 17 バイト型 (Byte)
vbUserDefinedType 36 ユーザー定義型を含むバリアント型
vbArray 8192 配列
■関数の挙動(要注意!)
・CIntは変換できないとエラーを出す
CInt("2") ⇒ 2
CInt(" 2 ") ⇒ 2
CInt(" 2 3 ") ⇒ エラー
CInt("") ⇒ エラー
CInt("123") ⇒ 123 (合法!!)
CInt("4.6") => 5
CInt("4,6") => 46
・CIntは四捨五入するので注意!
浮動小数を切り捨てしたい場合はInt関数かFix関数を使う。違いは負の場合。
たとえば、引数として -8.4 を指定すると、Int 関数は -9、Fix 関数は -8 をそれぞれ返します。
・Trim
Trim が削除するのはスペース(0x20)だけ。タブや改行文字は削除しない。
・Split が返す配列は要注意。
UBound(Split("", ",")) => -1
UBound(Split("hoge", ",")) => 0
UBound(Split("ho,ge", ",")) => 1
●デフォルト引数
Public Sub DefOption(
Optional ByVal bOption As Boolean = True)
■VBとVBScriptの違い
・VBScript には GOTO がない
・VB には Eval がない
●イミディエイトウィンドウに表示
Debug.Print "hgoehgoe"
●アサート
Debug.Assert a = 2
●実行ファイルのパスを取得する
App.Path
●アプリケーションの関連付けを実行する。
' Win32API 宣言
Private Declare Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long _
) As Long
Call ShellExecute(OwnerHwnd, "Open", LogFileName, App.path, "", 5)
●フォームの開始時に自動的に実行するサブルーチン
Private Sub Form_Load()
'Debug.Print "moge"
End Sub
●フォームを出さないアプリを作る(コンソールアプリ)
1. 「標準モジュール」を追加し、その中に Main() を作る。
2. プロジェクトプロジェクトの設定から変更する
●コマンドライン引数を取得する
Command()
●環境変数を取得する
Environ("PATH")
●ファイルを書き込む
Set fso = CreateObject("Scripting.FileSystemObject")
Set s_LogFile = fso.CreateTextFile(LogFileName, True) ' 第2引数がすでにファイルがあるとき上書きするかどうか
' s_LogFile は TextStream オブジェクト
●テキストファイルを読み込む
Set file = fso.OpenTextFile("c:\ao\en39\Projects.txt")
While Not file.AtEndOfStream
txt = file.ReadLine
targets.Add (Trim(txt))
Wend
file.Close
●FileSystemObjectのプロパティ
AtEndOfLine プロパティ
ファイル ポインタが TextStream ファイル内で行末マーカーの直前にあれば true を返し、直前になければ false を返します。
AtEndOfStream プロパティ
ファイル ポインタが TextStream ファイルの末尾にあれば true を返し、末尾になければ false を返します。
Attributes プロパティ
ファイルまたはフォルダの属性を設定または参照します。
AvailableSpace プロパティ
指定したドライブ上またはネットワーク共有上でユーザーが利用可能な領域の量を返します。
Column プロパティ
TextStream ファイル内での現在の文字位置の列番号を返します。
CompareMode プロパティ
Dictionary オブジェクト内の文字列キーを比較する際の比較モードを設定または参照します。
Count プロパティ
コレクション内または Dictionary オブジェクト内にある項目の数を返します。
DateCreated プロパティ
指定したファイルまたはフォルダが作成された日付と時刻を返します。読み取り専用です。
DateLastAccessed プロパティ
指定したファイルまたはフォルダが最後にアクセスされた日付と時刻を返します。
DateLastModified プロパティ
指定したファイルまたはフォルダが最後に変更された日付と時刻を返します。
Drive プロパティ
指定したファイルまたはフォルダのあるドライブのドライブ名を返します。
DriveLetter プロパティ
物理ローカル ドライブまたはネットワーク共有のドライブ名を返します。
Drives プロパティ
ローカル コンピュータ上で利用可能なすべての Drive オブジェクトからなる Drives コレクションを返します。
DriveType プロパティ
指定したドライブの種類を示す値を返します。
Files プロパティ
指定したフォルダ内にあるすべての File オブジェクトからなる Files コレクションを返します。隠しファイル属性やシステム ファイル属性が設定されたものも含まれます。
FileSystemProperty
指定したドライブで使用されているファイル システムの種類を返します。
FreeSpace プロパティ
指定したドライブ上またはネットワーク共有上でユーザーが利用可能な空き領域の量を返します。
IsReady プロパティ
指定したドライブがレディ状態であれば true を返し、レディ状態でなければ false を返します。
IsRootFolder プロパティ
指定したフォルダがルート フォルダであれば true を返し、ルート フォルダでなければ false を返します。
Item プロパティ
Dictionary オブジェクト内において指定したキーに対応する項目を設定または参照します。コレクションの場合は、指定したに基づくを返します。
Key プロパティ
Dictionary オブジェクト内でキーを設定します。
Line プロパティ
TextStream ファイルにおける現在の行番号を返します。
Name プロパティ
指定したファイルまたはフォルダの名前を設定または参照します。
ParentFolder プロパティ
指定したファイルまたはフォルダの親にあたるフォルダ オブジェクトを返します。
Path プロパティ
指定したファイル、フォルダ、またはドライブのパスを返します。
RootFolder プロパティ
指定したドライブのルート フォルダを表す Folder オブジェクトを返します。
SerialNumber プロパティ
ディスク ボリュームを一意に識別するために使用する 10 進シリアル番号を返します。
ShareName プロパティ
指定したドライブのネットワーク共有名を返します。
ShortName プロパティ
従来の 8.3 命名規則を必要とするプログラムで使用する短い名前を返します。
ShortPath プロパティ
従来の 8.3 命名規則を必要とするプログラムで使用する短いパスを返します。
Size プロパティ
ファイルの場合は、指定したファイルのサイズをバイト単位で返します。フォルダの場合は、フォルダに含まれているすべてのファイルおよびサブフォルダの合計サイズをバイト単位で返します。
SubFolders プロパティ
指定したフォルダ内にあるすべてのフォルダからなる Folders コレクションを返します。隠しファイル属性やシステム ファイル属性が設定されたものも含まれます。
TotalSize プロパティ
ドライブまたはネットワーク共有の総容量をバイト単位で返します。
Type プロパティ
ファイルまたはフォルダの種類に関する情報を返します。
VolumeName プロパティ
指定したドライブのボリューム名を設定または参照します。
●FileSystemObjectのメソッド
Add メソッド (Dictionary)
キーと項目のペアを Dictionary オブジェクトに追加します。
Add メソッド (Folders)
新しいフォルダを Folders コレクションに追加します。
BuildPath メソッド
名前を既存のパスの末尾に付加します。
Close メソッド
開いている TextStream ファイルを閉じます。
Copy メソッド
指定したファイルまたはフォルダを、ある場所から別の場所にコピーします。
CopyFile メソッド
1 つまたは複数のファイルを、ある場所から別の場所にコピーします。
CopyFolder メソッド
フォルダを、ある場所から別の場所に再帰的にコピーします。
CreateFolder メソッド
フォルダを作成します。
CreateTextFile メソッド
指定した名前のファイルを作成し、そのファイルの読み取り、書き込みに使用できる TextStream オブジェクトを返します。
Delete メソッド
指定したファイルまたはフォルダを削除します。
DeleteFile メソッド
指定したファイルを削除します。
DeleteFolder メソッド
指定したフォルダとその中身を削除します。
DrivesExists メソッド
指定したドライブが存在すれば true を返し、存在しなければ false を返します。
Exists メソッド
指定したキーが Dictionary オブジェクト内に存在すれば true を返し、存在しなければ false を返します。
FileExists メソッド
指定したファイルが存在すれば true を返し、存在しなければ false を返します。
FolderExists メソッド
指定したフォルダが存在すれば true を返し、存在しなければ false を返します。
GetAbsolutePathName メソッド
指定したパスから、省略されていない完全なパスを返します。
GetBaseName メソッド
パスの最後の構成要素のベース名 (ファイル拡張子を除いたもの) を表す文字列を返します。
GetDrive メソッド
指定したパスのドライブに対応する Drive オブジェクトを返します。
GetDriveName メソッド
指定したパスのドライブ名を表す文字列を返します。
GetExtensionName メソッド
パスの最後の構成要素の拡張子名を表す文字列を返します。
GetFile メソッド
指定したパスにあるファイルに対応する File オブジェクトを返します。
GetFileName メソッド
指定したパスの最後の構成要素のうちドライブ指定以外の部分を返します。
GetFileVersion メソッド
指定したファイルのバージョン番号を返します。
GetFolder メソッド
指定したパスにあるフォルダに対応する Folder オブジェクトを返します。
GetParentFolderName メソッド
指定したパスの最後の構成要素の親フォルダ名を表す文字列を返します。
GetSpecialFolder メソッド
指定した特殊フォルダのオブジェクトを返します。
GetTempName メソッド
ランダムに生成される一時ファイルまたは一時フォルダの名前を返します。これらは一時ファイルや一時フォルダを必要とする処理を実行する際に便利です。
Items メソッド
Dictionary オブジェクト内のすべての項目を格納した配列を返します。
Keys メソッド
Dictionary オブジェクト内のすべての既存のキーを格納した配列を返します。
Move メソッド
指定したファイルまたはフォルダを、ある場所から別の場所に移動します。
MoveFile メソッド
1 つまたは複数のファイルを、ある場所から別の場所に移動します。
MoveFolder メソッド
1 つまたは複数のフォルダを、ある場所から別の場所に移動します。
OpenAsTextStream メソッド
指定したファイルを開き、ファイルの読み書きや追加書き込みに使用できる TextStream オブジェクトを返します。
OpenTextFile メソッド
指定したファイルを開き、ファイルの読み書きや追加書き込みに使用できる TextStream オブジェクトを返します。
Read メソッド
指定した数の文字を TextStream ファイルから読み取り、その結果の文字列を返します。
ReadAll メソッド
TextStream ファイル全体を読み取り、その結果の文字列を返します。
ReadLine メソッド
TextStream ファイルから 1 行 (改行文字を含まない) を読み取り、その結果の文字列を返します。
Remove メソッド
キーと項目の 1 組のペアを Dictionary オブジェクトから削除します。
RemoveAll メソッド
すべてのキーと項目のペアを Dictionary オブジェクトから削除します。
Skip メソッド
TextStream ファイルを読み取るときに、指定した文字数をスキップします。
SkipLine
TextStream ファイルを読み取るときに、次の行をスキップします。
Write メソッド
指定した文字列を TextStream ファイルに書き込みます。
WriteBlankLines メソッド
指定した数の改行文字を TextStream ファイルに書き込みます。
WriteLine メソッド
指定した文字列と改行文字を TextStream ファイルに書き込みます。
●TextStream オブジェクトのメソッド
Close
開いた状態の TextStream ファイルを閉じます。
Read
TextStream ファイルから指定された文字数を読み込み、その結果の文字列を返します。
ReadAll
TextStream ファイル全体を読み込み、その結果の文字列を返します。
ReadLine
TextStream ファイルから 1 行 (改行文字を除く) を読み込み、その結果の文字列を返します。
Skip
TextStream ファイルを読み込むときに指定された数の文字数をスキップします。
SkipLine
TextStream ファイルを読み込むときに次の行をスキップします。
Write
指定した文字列を TextStream ファイルに書き込みます。
WriteBlankLines
指定された数の改行文字を TextStream ファイルに書き込みます。
WriteLine
指定した文字列と改行文字を TextStream ファイルに書き込みます。
●TextStream オブジェクトのプロパティ
AtEndOfLine
TextStream ファイル内でファイル ポインタが行末 (EOL) の直前に置かれている場合に真 (true) を返します。それ以外の場合は、偽 (false) を返します。値の取得のみ可能です。
AtEndOfStream
TextStream ファイル内でファイル ポインタがファイルの最後に置かれている場合に真 (true) を返します。それ以外の場合は、偽 (false) を返します。値の取得のみ可能です。
Column
TextStream ファイル内での現在の文字位置のカラム番号を返します。値の取得のみ可能です。
Line
TextStream ファイル内での現在の行番号を返します。値の取得のみ可能です。
VBとVBScriptの違い
http://www5b.biglobe.ne.jp/~yone-ken/VB/diff_vbs.html
上記の中で特に困ったところ、大きな違いを取り上げる。
変数
型指定はできない。すべてVariant型。
&、%などの型指定子は使えません。CLng、CInt関数などで型変換する。
VBのコンポーネント(ActiveX Dll)などを使用する場合、VBScriptの変数はすべてVariantだということに留意する必要がある。(5. VBのコンポーネントとの連携 参照)
Select文
Isは使えない
例) Case Is <= 10 ' こういうことはできません。
Toが使えない
例) Case 10 To 50 ' こういうこともできません。
For文でのNextの後の変数名は付けられない。(★2001/5/10追加)
例) For i = 1 To 5
'何かの処理
Next i
このNextのiは書けません。省略しましょう。
エラートラップ
On Error Resume NextとOn Error Goto 0しか使えない。
そのため、On Error Resume Nextを設定しておき、エラーが起きると思われる場所の直後にErr.Numberをチェックしてエラー処理をする必要がある。
VBのコンポーネントとの連携
VB製のコンポーネントと連携する場合、VB側のコンポーネントでは原則ByValにした方がよい。(省略するとByRefなので気を付ける)
なぜなら、VBSではVariant型しかないので、コンポーネントのメソッドがVariant以外の型で参照渡しになっていると明示的な型変換が必要になる。しかし、引数がオブジェクト変数の場合は型変換をする方法がないので、そのメソッドは実質的に使えないことになる。
関数
Format関数がない(地道な文字列処理で対処)
Date、Time関数はない(Now関数はある)
(★大嘘でした。ありましたm(_ _)m 2003/07/14)
InStrのバグ 
VBScript の InStr関数の全角濁点の処理に問題があります。
vbTextCompareモードで処理した場合、全角濁点が2文字として 換算されています。
例:
InStr(1, "もじれつ", "れ") = 3
InStr(1, "もじれつ", "れ", vbTextCompare) = 4
http://www.kawabata.com/asp-tips.asp
inputboxの最大文字数制限 
VBScript の inputbox は便利だが、入力できる文字数が 254 文字までという制限がある。
(Windows XP で確認)
「バイナリ互換」についての説明 
(英語)
http://www.keysound.com/html/version_compatibility.htm
CSVファイル読み込み 
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t06.htm
a>り
以下のように Input を使うと、データ内にカンマを使うCSVファイルも読み込める。
Private Sub Command1_Click()
Dim fno As Integer
Dim ct As Integer
Dim i As Integer
ct = 3
ReDim rec(ct) As String
Open "c:\ao\infile.csv" For Input As #1 Len = 32000
Open "c:\ao\outfile.csv" For Output As #2 Len = 32000
Do Until EOF(1)
For i = 1 To ct
Input #1, rec(i)
Next
Print #2, "1=[" & rec(1) & "] "; '** 1 項目ライト
Print #2, "2=[" & rec(2) & "] "; '** 2 項目ライト
Print #2, "3=[" & rec(3) & "] "; '** 2 項目ライト
Loop
Close #2
Close #1
End Sub
infile.csv
hoge, "s,age", moge
outfile.csv
1=[hoge] 2=[s,age] 3=[moge]
VBScript 
CSVファイル読み込み(VBScript版) 
http://blogs.wankuma.com/jeanne/archive/2007/04/20/72209.aspx