Top > VB6.0

関連ページ:ASP

VisualBasic 6.0 Edit

参考リンク Edit

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 Edit

他の言語を知っている人が急遽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)
●変数の型を調べるにはTypeName(hoge)


●イミディエイトウィンドウに表示
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のバグ Edit

VBScript の InStr関数の全角濁点の処理に問題があります。

   vbTextCompareモードで処理した場合、全角濁点が2文字として 換算されています。
   例:
   InStr(1, "もじれつ", "れ") = 3
   InStr(1, "もじれつ", "れ", vbTextCompare) = 4

http://www.kawabata.com/asp-tips.asp

inputboxの最大文字数制限 Edit

VBScript の inputbox は便利だが、入力できる文字数が 254 文字までという制限がある。
(Windows XP で確認)

「バイナリ互換」についての説明 Edit

(英語)
http://www.keysound.com/html/version_compatibility.htm

CSVファイル読み込み Edit


以下のように 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 Edit

CSVファイル読み込み(VBScript版) Edit

http://blogs.wankuma.com/jeanne/archive/2007/04/20/72209.aspx

VBScriptとVBAの違い Edit

http://msdn.microsoft.com/ja-jp/library/cc392401.aspx

種類含まれていない機能/キーワード
Select Case ステートメントキーワード Is または比較演算子が含まれる式
キーワード To を使う値の範囲の指定が含まれる式
エラー処理Erl 関数
Error ステートメント
Resume ステートメント、Resume Next ステートメント
演算子Like 演算子
オブジェクトClipboard オブジェクト
Collection オブジェクト
オブジェクトの使用演算子を使用したコレクションへの参照
オブジェクト操作キーワード TypeOf
コレクションAdd メソッド、Count プロパティ、Item メソッド、Remove メソッド
! 演算子を使用したコレクションへの参照
財務処理すべての財務処理関数
条件分岐#Const ディレクティブ
#If...Then...#Else ディレクティブ
制御構造DoEvents 関数
GoSub...Return ステートメント、GoTo ステートメント
On Error GoTo ステートメント
On...GoSub ステートメント、On...GoTo ステートメント
行番号、行ラベル
宣言Declare ステートメント (DLL 参照のための宣言)
キーワード Optional
キーワード ParamArray
Static ステートメント
ダイナミック データ エクスチェンジ (DDE)LinkExecute メソッド、LinkPoke メソッド、LinkRequest メソッド、LinkSend メソッド
データ型バリアント型 (Variant) を除くすべての組み込みデータ型
Type...End Type ステートメント
デバッグDebug.Print
End ステートメント、Stop ステートメント
配列Option Base ステートメント
0 以外のインデックスの最小値を指定した配列の宣言
日付と時刻Date ステートメント、Time ステートメント
その他Deftype ステートメント
Option Base ステートメント
Option Compare ステートメント
Option Private Module ステートメント
ファイル入出力すべてのファイルの入出力機能
変換CVar 関数、CVDate 関数
Str 関数、Val 関数
文字列固定長文字列
LSet ステートメント、RSet ステートメント
Mid ステートメント
StrConv 関数


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes