[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『既存のA列のURLをDLするシートに404と403の結果をB列に表示させたい』(繁忙マン)
御世話になります。
他所で見つけた以下の様なVBAを用いて、A列にあるURLのhtmlをダウンロードしております。 「404 Not Found」「403 Forbidden」のときは当然に何もダウンロードされないわけですが、 このようなダウンロードされたか否か、「404 Not Found」「403 Forbidden」だったかのステータスを B列に表示させる方法はないでしょうか?
例えば、A1のURLがDLできたらB1に「〇」、A2のURLが「404 Not Found」だったらB2に「×」、 A3のURLが「403 Forbidden」だったらB3に「△」といった方法があれば有難いなと思っております。
DLできたら「〇」、「404 Not Found」だったら「×」、此れ以外だったら「△」でも助かります。
何方か御支援を頂けないでしょうか。
--------------------------------------------
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Sub kaitou()
Dim FILENAME As String Dim Y As Long Dim KA As String Dim KB As String
Y = 1 KA = 0
Do While Cells(Y, 1).Value <> "" url = Cells(Y, 1).Value KA = Right(Cells(Y, 1).Value, 4) KB = KA KB = Left(KB, 1) If KB <> "." Then FILENAME = "C:\Users\M\" & Y & "." & KA Else FILENAME = "C:\Users\M\" & Y & KA End If RE = URLDownloadToFile(0, url, FILENAME, 0, 0) Y = Y + 1 Loop End Sub
< 使用 Excel:Excel2016、使用 OS:Windows7 >
以下が参考になるだろうか? https://oshiete.goo.ne.jp/qa/5474619.html
なお、正常に開かれた場合、URLDownloadToFileは0を返すようだ。 (ねむねむ) 2017/05/24(水) 14:55
皆様、引き続き宜しくお願い致します。
(繁忙マン) 2017/05/25(木) 07:11
ダウンロードできた場合はURLDownloadToFileの返値が0になるそうなので成功はそれで判断できそうだ。 (ねむねむ) 2017/05/25(木) 09:40
以下のようなことではどうですか?
Option Explicit
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long Dim http As Object '■追加しているので注意
Sub test() Dim folderName As String Dim url As String Dim fileName As String Dim baseName As String Dim dot As String Dim re As Variant Dim k As Long Dim status As Long
folderName = "C:\Users\M\"
k = 1 Do While Cells(k, 1).Value <> "" url = Cells(k, 1).Value baseName = Right(url, 4) dot = Left(baseName, 1)
If dot <> "." Then fileName = folderName & k & "." & baseName Else fileName = folderName & k & baseName End If
status = checkURL(url) If status = 200 Then re = URLDownloadToFile(0, url, fileName, 0, 0) Cells(k, 2).Value = "○" '' Cells(k, 3).Value = re '0が返りますね。 Else Cells(k, 2).Value = status End If
k = k + 1 Loop End Sub
'' url にアクセスして statusコードを得る Function checkURL(url As String) As Long If http Is Nothing Then Set http = CreateObject("Msxml2.XMLHTTP.6.0") End If http.Open "HEAD", url, False http.send checkURL = http.status End Function
statusコードで判断して○×△にするところは、ご自分で自由に修正してください。 なお、ファイルのダウンロード部分は、変数を変更しただけで、内容は変えていません。
(γ) 2017/05/26(金) 00:04
まさにイメージしていた通りでした。
御礼申し上げます。
ただ、頂戴したものを使ったところ「404」「407」は表示されるのですが、
「403」が「404」に含まれてしまうようです。
これはやむをえない仕様もしくは対象サイトの問題なのでしょうか?
対象サイトを示せずに恐縮ですがご返信いただければ幸いです。
(繁忙マン) 2017/05/27(土) 02:59
(γ) 2017/05/27(土) 07:40
(γ) 2017/05/27(土) 10:11
(γ) 2017/05/27(土) 13:13
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.