LenやLenBで引数に指定すると0を返す
長さ0の文字列("")と同様にLenやLenBで0を返すが、長さ0の文字列("")とは異なる
StrPtr関数で判定すると、
長さ0の文字列→アドレスを返す
値0の文字列→0を返す
バリアント型の変数が初期化されていない状態を表す。
バリアント型変数の初期値。
VBAでは、明示的に型を変換しなくても、暗黙的に型の変換(型強制)が行われる。
バリアント型のEmptyを文字列として扱うと、String型に型強制されて長さ0の文字列("")になり、数値として扱うと0に、ブール値として扱うとFalseになる。
Nullを格納できるのはバリアント型だけ
フィールドを表すオブジェクトやコントロールのValueプロパティはバリアント型。
バリアント型の初期値は前述のとおりEmptyだが、フィールドに有効な値がない場合や、
バインドしていない(非連結)コントロールの場合、初期値はEmptyでなくNullになってしまう。
テーブル1の[TextField]フィールド、[LongField]フィールドにそれぞれ文字列と数値が入っているとき、
レコードセットのフィールドは内部処理形式String型、Long型となるが、テーブル1の両フィールドに値がないとき、どちらもNullとなる。
NullのときにString型やLong型の変数に代入すると、Emptyのように型変換されないため、
dim myStr as String, myLong As Long
myStr = .Item("TextField").Value '--(※)
myNum = .Item("LongField").Value '--(※)
(※)のコードでエラーとなります。
これはリソースを解放するわけではなく、オブジェクトへの参照を解除するだけである。
プロシージャレベルの変数を解除する場合、オブジェクトの仕様が終わりすぐにプロシージャも終了する場合はそこで自動的に解除されるので上記の文は必ずしも必要ではない。
コントロールの参照時は「!」を、プロパティなどの参照時は「.」を、と使い分ける。
Public Function LenH(ByVal TEXT As String) As Integer
LenH = LenB(StrConv(TEXT, vbFromUnicode))
End Function
Dim MyControl As Control
Dim AllName As String
Dim i As Integer
AllName = "フォームに配置されている全てのコントロール名" & Chr(13)
For Each MyControl In Controls
i = i + 1
AllName = AllName & Chr(13) & _
i & ":MyControl.Name = " & MyControl.Name
Next
UserForm1.ActiveControl.Name
オブジェクトに値を入れる時
DoEvents は「いったん制御をOSに戻します」というもの。Windows上ではさまざまな処理を行っているが、それを順次切り替えて行っている。処理時間の掛かる、いわゆる重い処理で占有してしまうと他の処理が待ちになってしまう。
最終更新:2013年10月23日 13:00