2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« ファイル名に=;,や全角空白を含むファイルをバッチファイルにドロップすると、ファイル名が分割される。(その3) | トップページ | IsEmpty() などは使わないこと。 »

2008年4月21日 (月)

TypeName() と VarType() の違いに注意。

TypeName(varname) は文字列を返し、VarType(varname) は数値を返すだけの違い?と思っていたら大間違い。

varname の評価の仕方が異なる、全くの別物です。

TypeName(varname) は varname を評価し、VarType(varname) は、もし varname がオブジェクトで既定のプロパティがあれば、それを評価します。

VarType() のヘルプを見ると、確かに、そういう記述があります。
objectが既定プロパティを持つとき、VarType(object) はその既定プロパティの型を返します。

これは欠陥仕様だと思いますが、詮無きことなので、もし、varname を評価したければ(普通はそうですが)、

Function VarType2(varname)
  If IsObject(varname) Then
    VarType2=vbObject
    If IsArray(varname) Then VarType2=VarType2 Or vbArray
  Else
    VarType2=VarType(varname)
  End If
End Function

のように代替します。

しかし、それよりも、なによりも、TypeName() を使ったほうが簡単です。

なので、原則、VarType() は使わないで、TypeName() を使いましょう。

もし、varname がオブジェクトでないことが明白なら、VarType() を使うことに問題はありません。

« ファイル名に=;,や全角空白を含むファイルをバッチファイルにドロップすると、ファイル名が分割される。(その3) | トップページ | IsEmpty() などは使わないこと。 »