¿Cómo hacer la validation de URL de image en excel 2016?

¿Hay alguna forma de que se informe como válido o no válido en Excel si una URL de image arroja un error 404?
Sin abrir cada image? por ejemplo, comprobación de encabezado para 404?

aquí hay algunos fragments que probé

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 

 Public Function IsURLGood(url As String) As Boolean Dim request As New WinHttpRequest On Error GoTo IsURLGoodError request.Open "HEAD", url request.Send If request.Status = 200 Then IsURLGood = True Else IsURLGood = False End If Exit Function IsURLGoodError: IsURLGood = False End Function 

Estos informan sobre todas las URL, para mí, VERDADERO. Cuando reviso, por ejemplo

 http://sofes.miximages.com/excel/BWA22055.jpg 

estos definitivamente están dando resultados no deseados para los valores de retorno, la image de arriba es un ejemplo del error 404 que se count como una URL válida en Excel a través de estos fragments de código.

También probé la demostración gratuita del complemento de Office PowerUp, con pwrISBROKENURL que devolvió todo falso (no roto) cuando algunos de hecho se rompieron. Excel tiene acceso total a internet a través del firewall. https://www.youtube.com/watch?v=HU99-fXNV40

Esto funciona para mí No devuelve un boolean sino el estado real o la descripción del error si hay uno durante la ejecución:

 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 

Examen rápido:

enter image description here

EDITAR:

En lugar de ejecutarlo como un UDF puede hacer esto:

 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