Nikolasは、外部データを定期的に取得するためのWebクエリを開発しました。問題は、Webクエリを実行すると、「Webページを開くことができません…​」というエラーメッセージが頻繁に表示されることです。このメッセージは、NikolasとWebサーバー間のインターネット接続が中断された場合に表示されます。Excelを続行するには、エラーメッセージで[OK]をクリックする必要があります。

これは、ニコラスがコンピューターから離れているときに問題を引き起こします。これは、Webクエリがすべてのデータを収集しないため、問題が発生したときに[OK]ボタンがクリックされるのを辛抱強く待っているためです。 Nikolasは、メッセージを表示せず、現在の試行で接続できない場合は待機に戻るようにWebクエリに指示する方法を望んでいます。

残念ながら、Excelに必要な処理を実行するように指示する方法はありません。 「Webページを開くことができません…​」というメッセージが表示された場合、そのメッセージを抑制することは事実上不可能です。唯一の解決策は、問題を回避するマクロを作成することです。たとえば、Internet Explorerのインスタンス(問題はありません)を作成するマクロを開発して、Webページに到達する際のエラーをテストできます。

次のマクロは、このアプローチを実装しています。

Option Explicit 'Declare Sleep API Private Declare Sub Sleep Lib "kernel32" (ByVal nMilliseconds As Long)



Function GetData(strStartURL As String) As String     Dim Attempt As Long     Dim Connected As Boolean     Dim ieDocNew As MSHTML.HTMLDocument

GetData = "N/A"

Attempt = 0

retry:

Attempt = Attempt + 1

'Create browser object references and open an IE window     Dim ieNew As New InternetExplorer     'Load page     With ieNew         .Visible = True       'show window         .navigate strStartURL 'open page         While Not .readyState = READYSTATE_COMPLETE             Sleep 500         'wait 1/2 sec before trying again         Wend     End With

'The page should be open in IE, time for parsing     'Create document object model references     Set ieDocNew = ieNew.Document

If ieDocNew.Scripts.Length = 13 _       And ieNew.LocationName = "Microsoft Excel Tips" _       Then         Connected = True         GetData = "Data successfully captured"



'This is where you do something with the data     End If

'Clean up IE objects     Set ieDocNew = Nothing     ieNew.Quit     Set ieNew = Nothing     DoEvents     If Attempt < 10 And Not Connected Then GoTo retry End Function

このマクロが正しく動作するには、VBAインターフェイス内でいくつかの構成が必要であることに注意してください。具体的には、[ツール]メニューから[参照]を選択し、プロジェクトにMicrosoftHTMLオブジェクトライブラリとMicrosoftInternetControlsへの参照が含まれていることを確認する必要があります。

マクロが行うことは、IEを使用して関数に渡されたURL(strStartURL内)に接続し、そこで見つかったコンテンツを取得することです。

接続が成功すると、ConnectedがTrueに設定され、サイトでデータを解析して使用できます。この関数は、記述されているとおり、「データが正常にキャプチャされました」を呼び出し元のルーチンに返しますが、リモートサイトから取得した値を簡単に返すこともできます。次に、その値をワークシートに詰め込むことができますが、呼び出しルーチンです。

また、この関数は、キャプチャしたページで基本的な解析を行い、URLにあるページタイトルに予期される表現が見つかった場合にのみ接続が成功したと見なすことにも注意してください。

マクロがどのように機能するかを理解するには、次のようないくつかのマクロを使用します。

Sub TEST_GetData1()

MsgBox GetData("http://excel.tips.net")

End Sub
Sub TEST_GetData2()

MsgBox GetData("http://excel.tipsxx.net")

End Sub
Sub TEST_GetData3()

MsgBox GetData("http://excel.tips.net/junk")

End Sub

最初のものは機能するはずです。次の2つには、「N / A」というメッセージが表示されます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(10525)は、Microsoft Excel2007および2010に適用されます。