こんにちわ
>>あと、もし曜日に関係ない従来のアドレスが使えるとしたら、・・・
>これは忘れたほうがいいです。
これは、言葉足らずでした。ここで算出した日付を今週の日付として使用しています。
これを無くしますと、サイトの中から探す必要があります。
あなたの提示されたマクロでうまくいかなかった原因は
一部のサイトで、"4:00~"のデータが欠落していたからです。
URLを一部を変えている理由
大勢の人が、一斉にアクセスしないようにするためと、
MSXML2使ったダウンロードを喜ばないサイトもあります。
金曜日の17時前後のテスト、土日のテストもしてください。
Sub use_XMLHTTP()
Dim myList As Range
Dim myRge As Range
Dim objHttp As Object
Dim strURL As String
Dim myTp1, myTp2, myTp3
Dim i As Long, j As Long, k As Long
Dim 月曜日日付 As Date
Dim myStr As String
Application.ScreenUpdating = False
If Format(Date, "aaa") = "日" And Time > TimeValue("23:50:00") Then
MsgBox "いまの時間帯は、実行できません。"
Exit Sub
ElseIf Format(Date, "aaa") = "月" And Time < TimeValue("00:10:00") Then
MsgBox "いまの時間帯は、実行できません。"
Exit Sub
ElseIf Format(Date, "aaa") = "金" And _
(Time > TimeValue("16:50:00") And Time < TimeValue("17:10:00")) Then
MsgBox "いまの時間帯は、実行できません。"
Exit Sub
End If
Select Case Weekday(Date, vbMonday)
Case Is <= 4 '月、火、水、木
月曜日日付 = Date - Weekday(Date, vbMonday) + 1
Case 5 '金
If Time < TimeValue("17:00:00") Then
月曜日日付 = Date - 4
Else
月曜日日付 = Date + 3
End If
Case Else '土、日
月曜日日付 = Date - Weekday(Date, vbMonday) + 8
End Select
With Sheets("Sheet2")
Set myList = .Range(.Range("A1"), .Range("A" & Rows.Count).End(xlUp))
End With
Set objHttp = CreateObject("MSXML2.XMLHTTP")
With objHttp
For Each myRge In myList
strURL = "http://www.st●●●igio.com/program/list/prg/prgid/" & myRge.Value & _
"/" & Format(月曜日日付, "yyyy/mm/dd") & "/"
'Debug.Print strURL
.Open "GET", strURL, False
.Send
If (.Status < 200 Or .Status >= 300) Then
MsgBox strURL & " のページは見つかりませんでした。"
Else
myTp1 = .responseText
Sheets("Sheet1").Columns("A:B").ClearContents
Sheets("Sheet1").Cells(1, 1).Value = "■" & Format(月曜日日付, "yymmdd") & _
"SD" & myRge.Value
myTp1 = Split(myTp1, "<h3>")
For k = 1 To UBound(myTp1)
j = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("Sheet1").Cells(j, 1).Value = "■" & Left$(myTp1(k), InStr(myTp1(k), "<") - 1)
myTp2 = Split(myTp1(k), "<td class=""title"">")
For i = 1 To UBound(myTp2)
myTp3 = Split(myTp2(i), "</td><td>")
j = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("Sheet1").Cells(j, 1).Value = myTp3(0)
Sheets("Sheet1").Cells(j, 2).Value = Left$(myTp3(1), InStr(myTp3(1), "<") - 1)
Next i
Next k
'2003まで2007以降は未チェック
'myStr = Dir(ThisWorkbook.Path & "\" & Sheets("Sheet1").Range("A1").Value & ".xls")
myStr = Dir(ThisWorkbook.Path & "\" & Sheets("Sheet1").Range("A1").Value & ".xlsx")
If myStr <> "" Then myStr = Format(Date, "_mmdd")
Sheets("Sheet1").Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Range("A1").Value & myStr
ActiveWorkbook.Close
End If
Next myRge
End With
Set objHttp = Nothing
Application.ScreenUpdating = True
End Sub
お礼
おはようございます。 お礼が遅くなりました。 作っていただいたものについて各曜日ごとにチェックいたしました。 金曜日15.00(今週分2012.7.9のものを読込み) 金曜日17.00(実行不可) 金曜日18.00(翌週分2012.7.16のものを読込み) 土曜、日曜(翌週分2012.7.16のものを読込み) 月曜日05.00(今週分2012.7.16のものを読込み) といずれの日においても意図のものを読み込むことができました。 インデックスや曲名はTAG(<h3>等)で判定しているのですね。 おかげさまで、これで今までどおりのことができるようになり感謝しています。 どうもありがとうございました。 なお、この間お話してある、NowPlayingのテーブルがまだ再開していないためしばらく閉鎖せずに、再開した段階で再度チェックしてみて修正が必要であれば引き続きお願いさせていただきたいと思いますのでよろしくお願いします。 >これを無くしますと、サイトの中から探す必要 たしかに以前のフォームだと、テーブルの中に放送日が入っていたため、そこから取り出すことができました。(現在のPDFの内容と同じスタイルでした) 私も現在のフォームになったとき日付の取り出しができなくなったので、開始時間の行に放送日を入れてほしい旨センターに頼んだのですが反応なしでした。 あとこれはほとんど必要ないと思いますが、たとえば先週の番組表を取り出したいときは、上のVBAとはまたかなり替えたものが必要になりますよね。 現在単発でできるVBAは、手直ししたものを作ってあるためそれを使えば間に合うのでそのときはそれを使うつもりですが。
補足
こんにちわ NowPlayingの件ですが、今日から再開されましたが幸いにして、欄外に表示されるようになりました。そのため読込み範囲に影響がないことになり、このまま修正の必要がなく利用することができそうです。 このたびは大変ご面倒をかけましたが丁寧に対応してくださりありがとうございました。 また、いつかご縁がありましたらよろしくお願いいたします。 (締め切り後に、万一継続質問が発生しましたら同じタイトルで質問を出させていただきますのでお目に止まっていただけることを願っています)