Excel VBA脚本在URL列表中查找404错误?

所以,我有一个约5000个URL的列表电子表格。 (我们企业内部网上的所有页面)

我们知道一些链接被破坏了,但是不知道确定哪个链接没有点击所有5000个链接的好方法。

通常情况下,这将是一件简单的事情:创build一个带有5000页链接的网页,然后用像Xenu Link Sleuth这样的工具检查链接。

但是这种情况在这种情况下不起作用,因为许多链接正在被redirect,redirect代码欺骗HTTP.response 200,这会诱使Xenu将其视为一个有效的URL。

但是,有一个好消息:redirect脚本不在Excel中运行。 如果您单击Excel中的错误链接,则redirect脚本不会执行,并且HTTP响应会报告回Excel。 我相信Excel应该能够识别正确的HTTP响应代码(404) – 或者至less链接是否有效。

这使我想到我的问题:

有没有办法使用VBA来编写一个脚本来点击每个链接并捕获结果? 捕获的结果可能是HTTP响应代码的forms,或者您认为在查找5000个页面列表中的不良链接时有用的任何内容。 理想情况下,结果将写入电子表格中与该链接相邻的单元格。

如果有人对VBA有足够的熟悉来解决这个问题,我会永远感激!

这里是一个例子,从Excel的URL列表中检查状态行:

Sub TestLinks() Dim source As Range, req As Object, url$ Set req = CreateObject("Msxml2.ServerXMLHTTP.6.0") ' define were the links and results are Set source = Range("A1:B2") ' clear the results source.Columns(2).Clear ' iterate each row For i = 1 To source.Rows.count ' get the link from the first column url = source.Cells(i, 1) ' send the request using a HEAD to check the status line req.Open "HEAD", url, False req.setRequestHeader "Accept", "image/webp,image/*,*/*;q=0.8" req.setRequestHeader "Accept-Language", "en-GB,en-US;q=0.8,en;q=0.6" req.setRequestHeader "Accept-Encoding", "gzip, deflate" req.setRequestHeader "Cache-Control", "no-cache" req.setRequestHeader "Content-Type", "text/xml; charset=utf-8" req.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36" req.Send ' write the result in the second column source.Cells(i, 2) = req.Status Next MsgBox "Finished!" End Sub 

使用用户定义的函数返回HTML-Status代码并将其拖放到链接旁边。 不过,可能需要一段时间才能检查5000个链接。

 Public Function CheckURL(url As String) As String Dim request As New WinHttpRequest request.Open "GET", url request.Send CheckURL = request.Status End Function 

您可能需要在“Extras” – >“References”下添加对“Microsoft WinHTTP Services”的引用。