2017-06-28 11 views
1

報告される方法はありますか?イメージURLが404エラーを出した場合、Excelで有効または無効ですか?
各画像を開く必要はありませんか?例えば404のヘッダーをチェックする?

は、ここで私はすべてのURLにExcel 2016で画像のURLの検証を行う方法は?


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 


これらのレポート

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 

を試してみた、私のために、TRUEいくつかのスニペットです。私は、例えば

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


をチェックすると、これらは間違いなく戻り値の望ましくない結果を与えている、上記画像は、これらのコードスニペットを介してExcelで有効なURLとしてカウントされてい404エラーの一例です。


私はまた、いくつかは、実際に壊れているとき(壊れていない)すべての偽返さpwrISBROKENURLで、Officeのパワーアップアドインの無料デモを試してみました。 Excelにはファイアウォールを介してインターネットへのフルアクセス権が与えられます。 https://www.youtube.com/watch?v=HU99-fXNV40

+0

あなたが提供してくれた例ではスニペットがうまく動作します。 – Jeeped

+1

「私はいくつかのものを試しましたが、何も働かなかった」というのは、ここに投稿するときには一般的には良いアプローチではありません。試した実際のコードを含めて、実行したときに何が起こったのかの説明とともに、より多くの提案や助けが得られます。 –

+0

それは私ではありませんでしたが、その編集はあなたのチャンスを改善するつもりはありません...ここではかなり良い答えがあります:https://www.mrexcel.com/forum/excel-questions/567315-check-if-url- exists-so-then-return-true.htmlイメージを実際にダウンロードする必要がないので、GETをHEADに変更することがあります。 –

答えて

2

これは私に役立ちます。

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 

クイックテスト:

enter image description here

EDIT:代わりに

実行中に存在する場合には、ブールが、実際の状況やエラーの説明を返しません。これを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 
+0

それはうまくいった!とてもありがとう@TimWilliams! [スクリーンショット](http://i.imgur.com/eSUn4ta.png) –

+1

@LevyImage - オリジナルの投稿ごとに30Kの行がある場合、そのWinHttp.WinHttpRequest.5.1 **を静的にしたいと思うでしょう** [this](https://stackoverflow.com/documentation/vba/877/declaring-variables/16978/when-to-use-a-static-variable#t=20170628234448361758)のように。 – Jeeped

+0

@Jeepedの提案に加えて/代わりに、各チェックを1回だけ実行するために、代わりにUDFを使用せずにSubを使用することを検討してください。 –

関連する問題