プロが教えるわが家の防犯対策術!

このようなコードを使いたいのですが・・・
Set objShell = CreateObject("Shell.Application")
For Each objWindow In objShell.Windows
If TypeName(objWindow.Document) <> "HTMLDocument" Then
Continue
End If

これに対応したやり方というのを下記サイトで見つけました。

http://mga.cocolog-nifty.com/pc_info/2006/11/vbs …
clip


ただどういうう風に書き直したらいいか分からなく困っています。
どなたか解説いただけないでしょうか?

A 回答 (2件)

わざわざ、VBにはないContinueを疑似再現してコードを読みにくくしなくても、下のように書いたら良いと思うんですが。



Set objShell = CreateObject("Shell.Application")
For Each objWindow In objShell.Windows
  If TypeName(objWindow.Document) = "HTMLDocument" Then
    やりたい処理
  End If
Next

もしくは

For Each objWindow In objShell.Windows
  Select Case TypeName(objWindow.Document)
    Case "HTMLDocument"
      やりたい処理その1
    Case "HogeHoge"
      やりたい処理その2
    Case "FugaFuga"
      やりたい処理その3
  End Select
Next

個人的には、C言語などでもContinueは使わない派なので(Breakは多用します)。
行が長く、あるいはネストが深くなるのがイヤなら、サブルーチンとして外出しして、Exit Subですかね。

リンク先のコードは、頭の体操としては面白いし、よく考えられている。
実際に使用するなら、Goto [ラベル]を使った上で目立つように『Continueの代わり』とコメントを書いておく方が、まだ読みやすい。
    • good
    • 0

実行確認していないので間違ってたらすみません。



Set objShell = CreateObject("Shell.Application")
For Each objWindow In objShell.Windows
Do
If TypeName(objWindow.Document) <> "HTMLDocument" Then
Exit Do 'Continue
End If
~~何かの処理~~
Loop Until True
Next

たぶんこうゆうことじゃないかと。
Exit Do(もしくは For)をContinueの代わりにしたいけど、
Exit Do(もしくは For)に対応するDo Loop(For文)が何回も繰り返される必要はないので、
1回実行するだけにしているのがミソですね。
紹介サイト先では、「Until 1」になっているのですが、
VBScriptでは1 = Trueですが、VB.Netでは-1 = Trueだったりするので、
Trueと書いといた方がいいかもしれません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!