Classic ASPページに次のVBScriptがあります。
function getMagicLink(fromWhere, provider)
dim url
url = "magic.asp?fromwhere=" & fromWhere
If Not provider is Nothing Then ' Error occurs here
url = url & "&provider=" & provider
End if
getMagicLink = "<a target='_blank' href='" & url & "'>" & number & "</a>"
end function
If Not provider Is Nothing Then
という行に「Object Required」エラーメッセージが表示され続けます。
値がNULLであるか、NULLではないので、なぜこのエラーが発生するのですか?
編集: オブジェクトを呼び出すとき、NULLを渡すか、文字列を渡します。
コードから見ると、provider
はオブジェクトではなく、バリアントまたはその他の変数のように見えます。
Is Nothing
はオブジェクト専用ですが、後でそれはNULLまたはNOT NULLである必要がある値であり、IsNull
によって処理されると言います。
使用してみてください:
If Not IsNull(provider) Then
url = url & "&provider=" & provider
End if
あるいは、それがうまくいかない場合は、試してください:
If provider <> "" Then
url = url & "&provider=" & provider
End if
コメントには多くの混乱があります。 Null
、IsNull()
、およびvbNull
は主にデータベースの処理に使用され、通常VBScriptでは使用されません。呼び出し元のオブジェクト/データのドキュメントに明示的に記載されていない場合は、使用しないでください。
変数が初期化されていないかどうかをテストするには、IsEmpty()
を使用します。変数が初期化されていないか、""
が含まれているかどうかをテストするには、""
またはEmpty
でテストします。変数がオブジェクトかどうかをテストするには、IsObject
を使用し、このオブジェクトにIs Nothing
の参照テストがないかどうかを確認します。
あなたの場合、最初に変数がオブジェクトであるかどうかをテストし、次に変数がNothing
であるかどうかを確認します。 Nothing
に。
コード内で混合して一致させるスニペット:
If IsObject(provider) Then
If Not provider Is Nothing Then
' Code to handle a NOT empty object / valid reference
Else
' Code to handle an empty object / null reference
End If
Else
If IsEmpty(provider) Then
' Code to handle a not initialized variable or a variable explicitly set to empty
ElseIf provider = "" Then
' Code to handle an empty variable (but initialized and set to "")
Else
' Code to handle handle a filled variable
End If
End If
変数の最後に空白( "")を追加して比較を行います。以下のようなものは、その変数がnullであっても動作するはずです。スペースの場合にのみ変数をトリムすることもできます。
If provider & "" <> "" Then
url = url & "&provider=" & provider
End if