Nikolas开发了一个Web查询来定期检索外部数据。问题在于,在运行Web查询时,他经常收到“无法打开网页…​”错误消息。当Nikolas与Web服务器之间的Internet连接中断时,将出现此消息,并且他需要在错误消息上单击“确定”,以便Excel继续运行。

当Nikolas离开他的计算机时,这会带来一个问题,因为这可能意味着Web查询未收集到所有应引起的数据,这是因为它在遇到问题时需要耐心等待单击OK按钮。 Nikolas需要一种方法来告诉Web查询不显示消息,并且如果当前尝试无法连接,则返回到等待状态。

不幸的是,没有办法告诉Excel做您想做的事情。当出现“无法打开网页…​”消息时,实际上是不可能屏蔽该消息的。唯一的解决方案是尝试创建可解决该问题的宏。例如,您可以开发一个宏来创建Internet Explorer实例(没有问题),以测试到达网页的错误。

下面的宏实现了这种方法。

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接口中进行一些配置才能正常运行。具体来说,您需要从“工具”菜单中选择“引用”,并确保该项目包括对Microsoft HTML对象库和Microsoft Internet控件的引用。

宏的作用是使用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

第一个应该工作;后两个应该显示“ N / A”消息。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(10525)适用于Microsoft Excel 2007和2010。