こんにちは。
>普通のプロシージャエラー(構文エラーとか実行時エラー)のような表示ではないエラーメッセ-ジがでます。
それは、構文や実行時エラーではありませんから、サイレントモードがあるなら、そのオプションをOnにすればよいし、そうでなければ、自動的に取得はできません。MsgBox で対話モードにしてしまうと、コードが停止してしまいます。
http://trade.gaitame/rate に関しては、
>インターネットサーバーまたはプロシキサーバーが見つかりませんでした。
そのメッセージは、正確には表していないような気がします。
以下は、単なるサンプルです。
以下の場合は、Yahoo の為替コーナーとhttp://trade.gaitame/rate を判定するだけのものです。
実際のコードは、もう少し複雑になりますが、考えていただくためのたたき台にしてください。
例えば、以下のようにMsgBox にコメントブロックを入れて、サイレントモードにし、単に、参照渡しフラグで、ブーリアン値を取れるようにすれば、次に進めます。IEAccess 関数側では、メッセージは吐き出していません。
この場合は、True がエラー値です。URLはループにしてアクセスさせます。値が取れた段階で、ループから解除させます。
'標準モジュール
'------------------------------------------
'Option Explicit
Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub Test1()
Dim flg As Boolean
Dim myRate As Double
Dim v As Variant
Const URL1 As String = "https://trade.gaitame.com/members/"
Const URL2 As String = "http://quote.yahoo.co.jp/m3"
For Each v In Array(URL1, URL2)
flg = False
IEAccess v, flg
If flg = False Then
MsgBox v & vbCrLf & "は通じました!", 64
Exit For
Else
MsgBox v & vbCrLf & "通じていません", 48
End If
Next v
End Sub
Private Function IEAccess(ByVal strURL As String, ByRef flg As Boolean)
Dim objIE As Object
Dim i As Long
Set objIE = CreateObject("InternetExplorer.Application")
'objIE.Visible = True
objIE.Navigate strURL
On Error GoTo ErrHandler
With objIE
While .Busy
DoEvents
i = i + 1
Sleep 100
If i > 30 Then
' MsgBox "アクセスできませんでした。", vbInformation
flg = True
GoTo ErrHandler
End If
Wend
While .ReadyState <> 4
DoEvents
i = i + 1
Sleep 100
If i > 30 Then
' MsgBox "アクセスできませんでした。", vbInformation
flg = True
GoTo ErrHandler
End If
Wend
If InStr(.LocationName, "為替") = 0 Then
flg = True
Else
'本来は、ここにRateを取得するプログラムを入れる
End If
End With
ErrHandler:
If Err.Number > 0 Then
flg = True
Err.Clear
End If
Set objIE = Nothing
End Function
お礼
参考になりました。このプロシージャを元に考えて行きたいと思います。ありがとうございました。