web-dev-qa-db-ja.com

VBA変数が空かどうかを確認

オブジェクトがあり、その中にいくつかのプロパティがfalseに設定されているかどうかを確認します。

If (not objresult.EOF) Then
  'Some code 
End if

しかし、どういうわけか、時々objresult.EOFEmptyですが、どうすれば確認できますか?

  • IsEmpty関数はExcelセル専用です
  • objresult.EOF Is Nothing-Emptyを返します
  • objresult.EOF <> null-Emptyも返します!
43
fessguid

テスト方法は、プロパティのデータタイプによって異なります。

 |タイプ|テスト| Test2 
 |数値(ロング、整数、ダブルなど)| If obj.Property = 0 Then | 
 |ブーレン(真/偽)| If obj.Property Then | If obj.Property = False Then 
 |オブジェクト| obj.Propertyが何もない場合| 
 |ストリング| If obj.Property = "" Then | If LenB(obj.Property)= 0 Then 
 |バリアント| If obj.Property = Empty Then | 

F2を押してオブジェクトブラウザを起動し、オブジェクトを検索することで、DataTypeを確認できます。別の方法は、TypeName関数を使用することです:MsgBox TypeName(obj.Property)

82
Oorang

VariantがNullかどうかを確認するには、次のようにする必要があります。

Isnull(myvar) = True

または

Not Isnull(myvar)
18
Valentin Despa

数値については、数値セルがemptyの場合、VBAがデフォルト値0を割り当てるため、VBAコードが入力されたゼロと空白の数値の違いを見分けるのが難しいため、注意が必要です。細胞。

セルに実際の0が入力されているかどうかを確認するために、次のチェックが機能しました。

If CStr(rng.value) = "0" then
    'your code here'
End If
11
deasa

Access VBAで正当に0を割り当てることができる整数で同様の問題が発生しました。上記の解決策はどれも私にとってはうまくいきませんでした。

最初はブール変数とIFステートメントを使用しました:

Dim i as integer, bol as boolean
   If bol = false then
      i = ValueIWantToAssign
      bol = True
   End If

私の場合、整数変数の割り当てはforループと別のIFステートメント内にあったので、より簡潔なため、代わりに「Exit For」を使用することになりました。

そうだ:

Dim i as integer
ForLoopStart
   If ConditionIsMet Then
      i = ValueIWantToAssign
   Exit For
   End If
ForLoopEnd
0
Galanor