Vba 如何在excel 2016中进行图像url验证?

Vba 如何在excel 2016中进行图像url验证?,vba,excel,Vba,Excel,如果图像URL出现404错误,是否有方法在excel中报告有效或无效不打开每个图像?例如,检查404的头?以下是我尝试过的一些代码片段 Function URLExists(url As String) As Boolean Dim Request As Object Dim ff As Integer Dim rc As Variant On Error GoTo EndNow Set Request = CreateObject("WinHttp.W

如果图像URL出现404错误,是否有方法在excel中报告有效或无效
不打开每个图像?例如,检查404的头?

以下是我尝试过的一些代码片段

Function URLExists(url As String) As Boolean
    Dim Request As Object
    Dim ff As Integer
    Dim rc As Variant

    On Error GoTo EndNow
    Set Request = CreateObject("WinHttp.WinHttpRequest.5.1")

    With Request
      .Open "GET", url, False
      .Send
      rc = .StatusText
    End With
    Set Request = Nothing
    If rc = "OK" Then URLExists = True

    Exit Function
EndNow:
End Function


对我来说,所有URL上的这些报告都是真实的。当我检查时,例如

http://www.bangallawebservices.com/images/BWA22055.jpg

这些确实给出了返回值的不希望的结果,上图是404错误的一个示例,通过这些代码片段,404错误在excel中被算作有效URL


我还尝试了Office Power Up addin的免费演示,使用了
pwrisbrokernurl
,它返回了所有false(未损坏),而实际上有些已损坏。Excel被授予通过防火墙完全访问internet的权限。
这对我很有用。它不返回布尔值,而是返回实际状态或错误描述(如果在执行过程中存在):

Public Function IsURLGood(url As String)
    Dim request As Object
    Set request = CreateObject("WinHttp.WinHttpRequest.5.1")
    On Error GoTo haveError
    With request
        .Open "HEAD", url
        .Send
        IsURLGood = .Status
    End With
    Exit Function
haveError:
    IsURLGood = Err.Description
End Function
快速测试:

编辑:

您可以执行以下操作,而不是将其作为UDF运行:

Sub ProcessUrls()
    Dim c As Range
    For Each c in Activesheet.Range("A1:A20000").Cells
        c.Offset(0, 1).Value = IsURLGood(c.Value) 'put result in ColB
    Next c
End sub

在你提供的示例中,这些代码片段对我来说很好。“我尝试了一些东西,但没有任何效果”在这里发布时通常不是一个好方法。包括您尝试过的实际代码,以及对运行时发生的情况的描述,将为您提供更多建议和帮助。这不是我,但编辑不会提高您的机会。。。这里有一个很好的答案:可能会更改“获取”标题,因为您实际上不需要下载图像……或者,现在就看这里,这篇文章被编辑以共享详细信息和使用的代码示例,包括404图像链接。这实际上是我已经尝试过的教程和代码片段之一@TimWilliams我刚刚用excel完成了一堂大学课程,我们在VBA中没有涉及太多内容,只是记录宏代码后查看宏代码的基础知识。这很有效!非常感谢@TimWilliams@如果你有30K行(你原来的帖子),那么你会想要制作WiHTTP.WiNHTPREQUEST。5.1静态的。另外,或者从@ JEPED建议,考虑不要使用一个UDF,而是一个子,而不是确保每个检查只运行一次。对于如何基本上光栅化此公式使用的列以只保留值,您有什么建议吗?当我只复制/粘贴值时,它会冻结excel(超过20K行)。如果我尝试保存为基于文本的文件类型(如CSV),excel也会冻结。我会读到UDF和Sub之间的区别,再一次我是VB新手,谢谢。
Sub ProcessUrls()
    Dim c As Range
    For Each c in Activesheet.Range("A1:A20000").Cells
        c.Offset(0, 1).Value = IsURLGood(c.Value) 'put result in ColB
    Next c
End sub