私はClassic ASPで書かれたアプリをVBずっと前に外部の会社が作成したスクリプトを維持しています。
次のような画像ファイルパスの配列があります。
dim banners, arrKeys, i
set banners=CreateObject("Scripting.Dictionary")
banners.Add "banner1.jpg", "http://www.somelink.com"
banners.Add "banner2.jpg", "http://www.somelink.com"
banners.Add "banner3.jpg", "http://www.somelink.com"
これは、バナー広告があるページにのみ存在します。インクルードファイル(すべてのページに共通)でこのリストを反復処理する標準コードがいくつかあります。
If Not banners Is Nothing then
' then loop through the Dictionary and make a list of image links
End if
問題は、banners
がページでインスタンス化されていない場合(すべてのページではない)、Can't find object
エラー
VBスクリプトにオブジェクトが存在するかどうかを確認する適切な方法は何ですか?
@Atømix:置換
If Not banners Is Nothing then
そして使用
If IsObject(banners) Then
その後、他のコードをインクルードファイルに配置し、ページの上部で使用して、不必要な重複を回避できます。
@Cheran S:上記のスニペットをOption Explicit
on/offでテストしましたが、Dim banners
が存在するかどうかに関係なく、どちらのバージョンでもエラーは発生しませんでした。 :-)
IsObject
は機能しますが、IsEmpty
の方が適切なオプションである可能性があります。特に、変数が存在するか初期化されているかどうかを確認することを目的としています。
要約する:
IsEmpty(var)
は、変数が存在するかどうか(Object Explicitなし)、または初期化されているかどうかをテストしますIsNull(var)
は、変数が割り当てられているかどうかをテストします Null
var Is Nothing
_ は、変数がSet
から Nothing
になったかどうかをテストしますが、オブジェクトではないもので試行するとエラーをスローしますIsObject(var)
は、変数がオブジェクトかどうかをテストします(False
が var
の場合、明らかにEmpty
を返します)。変数が宣言されているが初期化されていない場合、その値はEmpty
になり、IsEmpty()
関数で確認できます。
_Dim banners
If IsEmpty(banners) Then
Response.Write "Yes"
Else
Response.Write "No"
End If
' Should result in "Yes" being written
_
banners
は、その値を_Set banners = Nothing
_で明示的に割り当てた場合にのみNothing
と等しくなります。
ただし、_Option Explicit
_をオンにすると、この手法で問題が発生します(これは推奨事項ですが、常にそうとは限りません)。その場合、banners
がDim
edになっておらず、IsEmpty(banners)
をテストしようとすると、ランタイムエラーが発生します。 _Option Explicit
_がオンになっていない場合、問題はないはずです。
編集:私はちょうどこれを見た 関連する質問と回答 も役立つかもしれません。
多少関連するのは、オプションのパラメーター(この場合はオブジェクト)が渡されたかどうかをテストするIsMissing()
です:
Sub FooBar(Optional oDoc As Object)
'if parameter is missing then simulate it
If IsMissing(oDoc) Then Dim oDoc as Object: oDoc = something
...
すべてのページに少なくともdim banners
が必要です。
すべてのページにhead.asp
または何かが含まれていませんか?
IsEmpty、Is Object、IsNullはどちらも「Option Explicit」設定では機能しません。上記のstealthyninjaが誤解を招くように答えているためです。私が知っている唯一の方法は、「Option Explicit」を「On Error Resume Next」設定で「ハッキング」することです、Tristan Havelickはここでうまくやっています: VBScript関数が定義済み?