Visual Basic

制作過程で必要になったサブルーチンなど。 この情報はかなり古く、VB 4.0〜6.0 でしか確認していません。.NET 以降だとそのままでは使えないかもしれません。

- Index -

文字列末の \ を取り除く (CheckRoot)
リストボックスに項目があるかチェック (CheckList)
0byte のファイルを作る
0 1 0 1 … と繰り返す
二重起動を防止
フォームを画面中央に配置
ファイル全体を変数に高速格納



文字列末の \ を取り除く (CheckRoot)
Public Function CheckRoot(s1 As String) As String

	'文字列末の \ を取り除く(ルートのときの対策)
	If Right(s1, 1) = "\" Then s1 = Left(s1, Len(s1) - 1)

	CheckRoot = s1 '結果を返す

End Function

または、こんな方法もあります。1行でスッキリ…かな?

Public Function CheckRoot(s1 As String) As String

	'文字列末の \ を取り除く(ルートのときの対策)
	CheckRoot = Left(s1, Len(s1) + (Right(s1, 1) = "\"))

End Function

更にこんな方法も。こちらは逆に \ を加えるので、上のと使い方が異なります。

Public Function CheckRoot(s1 As String) As String

	'ルート以外のときは、文字列末に \ を加える
	CheckRoot = s1 & Right("\", -(Right(s1, 1) <> "\"))

End Function

上のと結果は同じですが、IIf の使用例。

Public Function CheckRoot(s1 As String) As String

	'ルート以外のときは、文字列末に \ を加える
	CheckRoot = s1 & IIf(Right(s1, 1) = "\", "", "\")

End Function

で、これは何か?
例えば App.Path でパスを取得した際、ルートでは C:\ となりますが、フォルダでは C:\TEST などとなります。

Open App.Path & "\test.dat" For Output As #1

例えば上記を実行する際 App.Path が C:\TEST というパスを返せばいいのですが、 ルートだった場合は C:\ と返してきます。結果 C:\\test.dat と \ が二重になってしまい、エラーになります。 この問題を回避するために CheckRoot を使うわけです。

Open CheckRoot(App.Path) & "\test.dat" For Output As #1

こうすることで、ルートでもエラーを回避できます。

リストボックスに項目があるかチェック (CheckList)
Public Function CheckList(obj As Object) As Boolean

	'リストボックスに項目があるかチェック
	'あれば True 無ければ False を返す

	CheckList = (obj.List(0) <> "")

End Function

リストボックスに項目があるかどうかを確認したいときに使います。

If CheckList(List1) Then
	MsgBox "リストボックスに項目はあります。"
Else
	MsgBox "リストボックスに項目はありません。"
End If

このような処理が複数無ければ、関数にしないで下記のように使う手もあります。

If (List1.List(0) <> "") Then MsgBox "項目はあります♪"

0バイトのファイルを作る オープンしてクローズするだけ。FileName には任意のファイル名が入ります。

Open FileName For Output As #1
Close #1

0 1 0 1 … と繰り返す
実行するたびに 0→1→0→1 … と繰り返します。スイッチ処理などに使えます。

n = n + 1 - n * 2
または
n = Switch(n = 0, 1, n = 1, 0)
または
n = not n

いちばん下のだけでよさそう。Boolean なら False/True の入れ替えになります。

二重起動を防止
Private Sub Form_Load()

	'二重起動を防止
	If App.PrevInstance Then End

End Sub

フォームを画面中央に配置
VB 5.0 以降ではプロパティがあったような気が…。With を使うのは個人的な趣味です。 Top の -200 は個人的に中央より少し上に配置した方が良い気がしているため。

Private Sub Form_Load()

	'フォームを画面中央に配置
	With Screen
		Left = (.Width - Width) / 2
		Top = (.Height - Height) / 2 - 200
	End With

End Sub

ファイル全体を変数に高速格納 テキストファイルを改行コード等も含めて丸ごと読み込むのに便利です。 1ラインずつ読み込むのと違いループ処理も必要ないので簡潔かつ高速です。

Dim s1 As String	'変数を宣言

Open "test.txt" For Binary As #1
	s1 = String(LOF(1), 0)
	Get #1, 1, s1
Close #1

MsgBox s1		'試しに表示♪

当然ながら、上記の例ではファイル test.txt がカレントにないとエラーになります。

s1 = String(LOF(1), 0) の部分は、予め読み込むサイズをセットする必要があるためで、 例えば変数宣言のところで Dim s1 As String * 1024 と宣言すれば 1024バイトだけを 読み込むようにもできます。(この場合 s1 = String(LOF(1), 0) は不要)

LOF(n) は Open ステートメントで開いたファイルの長さをバイト単位で返す関数です。n はファイル番号です。