◆プログラムが暴走した場合 |
|
Ctrl + Break で意外と止まる
|
|
◆ウインドウクラス名 |
|
タスクバー | : | SysTabControl32 |
タスクトレイ | : | TrayNotifyWnd |
タククバーの時計 | : | TrayClockWClass |
スタートボタン | : | Button |
電卓 | : | SciCalc |
メモ帳 | : | Notepad |
MS-PAINT | : | MSPaintApp |
|
|
◆ファイルサイズを取得する |
|
Private Sub Command1_Click()
Debug.Print FileLen("C:\Windows\winhlp32.exe")
End Sub
|
|
◆正の数、負の数、0かを判定する |
|
Private Sub Command1_Click()
'0より大きい場合は1、0の場合は0、0より小さい場合は-1が返る
Debug.Print Sgn(0.6)
Debug.Print Sgn(0)
Debug.Print Sgn(-0.6)
End Sub
|
|
◆ファイルを検索する(指定ディレクトリ」内のみで再帰せず) |
|
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
' 機 能:ファイルを検索する
' 引 数:(i)TargetFile … ファイル名(指定例:C:\XXX\YYY\ZZZ\*.txt)
' 返り値:見つけたファイルの数
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Public Function SerachFile(ByVal TargetFile As String) As Long
Dim FoundFile As String
'1つ目を検索
FoundFile = Dir$(TargetFile, vbNormal)
'2つ目以降があればを検索
Do While FoundFile <> ""
SerachFile = SerachFile + 1
Debug.Print FoundFile
FoundFile = Dir$
Loop
End Function
|
|
◆タイトルバーを消去する |
|
フォームのプロパティを以下の通りに設定してあげればよい。
Form1.ControlBox = False
Form1.MaxButton = False
Form1.MinButton = False
Form1.Caption = ""
また、
Form1.Caption = "あいうえお"
としてやれば、タイトルバーを表示させることができる。
|
|
◆16進数を10進数にする |
|
Private Sub Command1_Click()
Debug.Print Val("&H70")
End Sub
|
|
◆ツールチップを表示する |
|
Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1.ToolTipText = "ツールチップだよ"
End Sub
|
|
◆月末の日付を計算する |
|
Private Sub Command1_Click()
Dim yymm As String
yymm = "1999/02"
Debug.Print DateAdd("m", 1, CDate(yymm & "/01")) - 1
End Sub
|
|
◆どんな使用環境にも対応できるように文字の大きさを設定する |
|
'フォントサイズ × Screen.TwipsPerPixelX ÷ 15 でよい(昔のテクなのでもう通用しないかも)
Label1.FontSize = Int(11 * Screen.TwipsPerPixelX / 15)
Command1.FontSize = Int(10 * Screen.TwipsPerPixelX / 15)
|
|
◆使用可能フォントを列挙する |
|
Private Sub Command1_Click()
Dim i As Long
For i = 0 To Screen.FontCount - 1
Debug.Print Screen.Fonts(i)
Next i
End Sub
|
|
◆スクロールバーの点滅を無効にする |
|
(1)TabStop プロパティを False にすればよい。
(2)API関数を使いたい場合は以下のようにすればよい。
|
Private Declare Function HideCaret Lib "user32" (ByVal hwnd As Long) As Long
Private Sub HScroll1_GotFocus()
Dim apiResultCode As Long
apiResultCode = HideCaret(HScroll1.hwnd)
End Sub
|
|
|
◆閏年か判定する |
|
Public Function IsLeapYear(ByVal ToYear As Integer) As Boolean
IsLeapYear = (ToYear Mod 4 = 0) And (ToYear Mod 100 <> 0) Or (ToYear Mod 400 = 0)
End Function
|
|
◆テキストボックスを入力不能にする |
|
Private Sub Text1_KeyPress(KeyAscii As Integer)
keyascii = 0
End Sub
|
|
◆配列を初期化をする |
|
'Visual Basic 5.0 のヘルプファイルより |
Dim NumArray(10) As Integer | '整数型の配列 |
Dim StrVarArray(10) As String | '可変長文字列型の配列 |
Dim StrFixArray(10) As String * 10 | '固定長文字列型の配列 |
Dim VarArray(10) As Variant | 'バリアント型の配列 |
Dim DynamicArray() As Integer | '動的配列 |
ReDim DynamicArray(10) | 'メモリ領域を割り当てます |
|
Erase NumArray | '各要素の値を 0 にします |
Erase StrVarArray | '各要素の値を長さ 0 の文字列 ("") にします |
Erase StrFixArray | '各要素の値を 0 にします |
Erase VarArray | '各要素の値を Empty 値にします |
Erase DynamicArray | '配列が占有していたメモリを解放します |
|
|
◆ファイルが更新された日付を取得する |
|
Private Sub Command1_Click()
Debug.Print FileDateTime("C:\Windows\Winhelp.exe")
End Sub
|
|
◆ファイル名を変更する |
|
Private Sub Command1_Click()
Const OldFile As String = "C:\Test.txt" '変更前のファイル名
Const NewFile As String = "C:\TestNew.txt" '変更後のファイル名
Name OldFile As NewFile
End Sub
|
|
◆フォームをすべて "Unload" する |
|
Private Sub Form_Unload (Cancel As Integer)
Dim i As Long
For i = 0 To Forms.Count - 1
Unload Forms (i)
Next i
End Sub
|
|
◆乱数を発生させる |
|
Rnd(1) | … | 0以上1未満の数を発生させる |
Rnd(1) * 6 | … | 0以上6未満の数を発生させる |
Int(Rnd(1) * 6) | … | 0〜5の整数を発生させる |
Int(Rnd(1) * 6) + 1 | … | 1〜6の整数を発生させる |
|
|
◆IIf文について - C言語で言うところの三項演算子 |
|
Private Function IntMaxValue(ByVal p1 As Long, ByVal p2 As Long) As Long
IntMaxValue = IIf(p1 >= p2, p1, p2)
End Function
|
|
◆Switch文について |
|
Private Function GetColorSwitch(ByVal i As Long) As String
GetColorSwitch = Switch(i = 1, "赤", _
i = 2, "青", _
(i <> 1 And i <> 2), "黒" _
)
End Function
|
|
◆Choose文について |
|
Private Function GetWeek(ByVal Num As Long) As String
GetWeek = Choose(Num, "Sunday", "Monday", "Tuesday", _
"Wednesday", "Thursday", "Friday", "Saturday")
End Function
|
|
◆隠し関数ついて |
|
VB5.0 からこっそりというか、Microsoft 非公認というか隠し関数が用意されていることが明るみになった。これが非常に便利な関数で、API関数を使うときなどは大活躍することが多々ある。ちなみにVB4.0では VarPtr() 関数を使用することができるが、下記のように API 宣言をしなければならない。vb40032.dll が今となっては非常に微妙だね。
'VB4.0用宣言
Declare Function VarPtr Lib "vb40032.dll" (variable As Any) As Long
以下はVB5.0用の関数。組み込み済みの関数なので VB4.0 のように宣言をする必要は無く、そのまま気軽に使える。
構文 | 説明 |
StrPtr(Ptr As String) As Long | 文字列が存在しているアドレスを返す |
VarPtr(Ptr As Any) As Long | 変数が存在しているアドレスを返す |
ObjPtr(Ptr As Any) As Long | オブジェクトが存在しているアドレスを返す |
|
|
◆vbNullString と "" の違い |
|
vbNullString は文字列が無い状態。即ちメモリー上にも存在しない。C言語的な表現だと、ポインタ値 0x00000000 となる。
""(空文字列)は長さ 0 バイトの文字列。C言語的な表現だと、ポインタの指す領域に文字列の末尾を示す '\0' があり、文字列は無い。
…でも、
Debug.Print ("" = vbNullString)
とすると、どちらも文字列が無い(文字列の長さが0)ということが評価されるのか不思議と True を返す。両者は異なるはずなのに…。このままでは嘘つき呼ばわれされそうなので、分かりやすいケースを挙げておく。じゃ以下の2行を実行してみようね。
Debug.Print StrPtr("")
Debug.Print StrPtr(vbNullString)
ど〜ですか?
|
|