Sub MyRssFnnNews()
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem FNN(フジニュースネットワーク)RSS取り込み処理
  Rem 作譜:Hitrock Camellia Shinopy
  Rem 言語:Excel VBA
  Rem 機能...
  Rem   指定したサイトのRSSを取り込みする。
  Rem 注記...
  Rem   1. MyRssFnnNewsを起動して実行。
  Rem   2. 初回実行前に「myFile」に取り込むRSSデータの保存先を指定すること。
  Rem 履歴...
  Rem   第01版:2008/09/08:作成。
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Dim myTitle As String
  Dim myAns  As Long
  Dim myFlag As Boolean
  Dim i As Long
  Dim c As Long
  Dim myMax As Long
  Dim mySheetFirst As Long
  '
  Dim mySite As String
  Dim mySiteArray As Variant
  Dim mySheet As String
  Dim mySheetArray As Variant
  Dim myURL As Variant
  Dim myText As String
  Dim myStatusBar As String
  '
  Dim myHTTP As Variant ' IXMLHTTPRequest
  Dim myStream As Variant ' Stream
  Dim myFile As String
  '
  Dim myFileValue As Boolean
  Dim myXmlDoc  As Variant
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  myTitle = "MyRssFnnNews"
  myFile = "C:\Documents and Settings\User\My Documents\Zzz\MyRssFnnNews.xml"
  Call MyRssFnnNewsPopUp(myTitle)
  '
  Select Case CommandBars(myTitle).Controls(1).FaceId
    Case 964: myAns = vbOK
    Case 330: myAns = vbCancel
  End Select
  '
  If CommandBars(myTitle).Controls(2).FaceId = 220 Then
    myFlag = True
  Else
    myFlag = False
  End If
  '
  If myAns = vbCancel Then GoTo MyRssFnnNewsSubExit
  '
  Call MyRssFnnNewsMySite(mySite, myFlag)
  mySiteArray = Split(mySite, ",")
  Call MyRssFnnNewsMySheet(mySheet)
  mySheetArray = Split(mySheet, ",")
  '
  mySiteArray = Split(mySite, ",")
  myMax = UBound(mySiteArray) + 1
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  myStatusBar = "FNN(フジニュースネットワーク)RSS取り込み処理 開始!"
  Application.StatusBar = "MyRssFnnNews: " & myStatusBar
  '
  Application.CommandBars("Task Pane").Visible = False
  Application.ScreenUpdating = False
  Range("A1").Select
  mySheetFirst = ActiveSheet.Index
  '
  c = Worksheets.Count - ActiveSheet.Index + 1
  If c < myMax Then
    c = myMax - c
    For i = 1 To c
      Worksheets.Add After:=Sheets(Worksheets.Count), Count:=1
    Next ' i
    Sheets(mySheetFirst).Activate
  End If
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  Set myXmlDoc = CreateObject("MSXML2.DOMDocument")
  Set myHTTP = CreateObject("Microsoft.XMLHTTP")
  Set myStream = CreateObject("ADODB.Stream")
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
MyRssFnnNewsSubEntry:
  c = 0
  For Each myURL In mySiteArray
    c = c + 1
    myStatusBar = c * 100 \ myMax & "%  " & c & "/" & myMax & "頁 "
    Application.StatusBar = "MyRssFnnNews" & ":" & myStatusBar
    '
    Columns("A:A").Select
    With Selection
      .ColumnWidth = 70
      ' .RowHeight = 19
      .VerticalAlignment = xlTop
      .WrapText = True
    End With
    Columns("B:B").Select
    With Selection
      .ColumnWidth = 50
      .VerticalAlignment = xlTop
      .WrapText = True
    End With
    Rem *----*----*    *----*----*
    '
    Call myHTTP.Open("GET", myURL, False)
    On Error Resume Next
    myHTTP.Send
    '
    If Err.Number <> 0 Then
      Range("A1").Value = Err.Number
      Range("B1").Value = Err.Description
    Else
      Const AdBinary = 1
      ' Const AdTypeText = 2
      Set myStream = CreateObject("ADODB.Stream")
      myStream.Type = AdBinary
      myStream.Open
      myStream.write (myHTTP.responseBody)
      myStream.Position = 0
      myStream.Type = AdBinary
      Call myStream.SaveToFile(myFile, 2) ' 上書き
      myStream.Close
      '
      myXmlDoc.Async = False
      myFileValue = myXmlDoc.Load(myFile)
      '
      If myFileValue = True Then
        Call MyRssFnnNewsMyXmlDoc(myXmlDoc, myFile, mySheetArray)
      Else
        Range("A1").Value = "XMLファイルがありません!"
        Range("B1").Value = myURL
      End If
    End If
    On Error GoTo 0
    Rem *----*----*    *----*----*
    '
    Range("B1").Select
    ActiveWindow.ScrollColumn = 1
    ActiveWindow.Zoom = 80
    On Error Resume Next
    ActiveSheet.Next.Select
    On Error GoTo 0
    DoEvents
  Next ' myURL
  '
  Sheets(mySheetFirst).Activate
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
MyRssFnnNewsSubExit:
  Application.ScreenUpdating = True
  On Error Resume Next
  Kill myFile
  On Error GoTo 0
  myText = "処理が終了しました。"
  Application.StatusBar = "MyRssFnnNews: " & myText & " " & Now()
  Application.Speech.Speak myText, False
End Sub ' MyRssFnnNews *----*----*    *----*----*    *----*----*    *----*----*

Sub MyRssFnnNewsMyXmlDoc(myXmlDoc As Variant, myFile As String, mySheetArray As Variant)
  Dim myTitle  As Variant
  Dim myLink  As Variant
  Dim myDescript  As Variant
  '
  Dim i As Long
  Dim myText As String
  Dim myStatusBar As String
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  Set myTitle = myXmlDoc.selectNodes("//title")
  Set myLink = myXmlDoc.selectNodes("//link")
  Set myDescript = myXmlDoc.selectNodes("//description")
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  For i = 1 To myTitle.Length + 1
    myStatusBar = Application.StatusBar
    myStatusBar = Left(myStatusBar, InStr(myStatusBar, "頁 ") + 1)
    myStatusBar = myStatusBar & i & "/" & myTitle.Length & "行"
    Application.StatusBar = myStatusBar
    '
    If i = 1 Then
      myText = myTitle(i - 1).Text
      ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), Address:=myLink(i - 1).Text, TextToDisplay:=myText ' & " " & myDescript(i - 1).Text
      Cells(i + 1, 2).Value = myDescript(i - 1).Text
      Call MyRssFnnNewsSheetName(mySheetArray)
    Else
      myText = myTitle(i - 1).Text
      ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), Address:=myLink(i - 1).Text, TextToDisplay:=myText
    Cells(i + 1, 2).Value = myDescript(i - 1).Text
    End If
    '
    DoEvents
  Next ' i
End Sub ' MyRssFnnNewsMyXmlDoc *----*----*    *----*----*    *----*----*    *----*----*

Sub MyRssFnnNewsMySite(mySite As String, myFlag As Boolean)
  mySite = "http://rss.fnn-news.com/fnn_news.xml"
  mySite = mySite & "," & "http://rss.fnn-news.com/fnn_news00.xml"
  mySite = mySite & "," & "http://rss.fnn-news.com/fnn_news01.xml"
  mySite = mySite & "," & "http://rss.fnn-news.com/fnn_news02.xml"
  mySite = mySite & "," & "http://rss.fnn-news.com/fnn_news03.xml"
  mySite = mySite & "," & "http://rss.fnn-news.com/fnn_news04.xml"
  mySite = mySite & "," & "http://rss.fnn-news.com/fnn_news05.xml"
  '
  mySite = mySite & "," & "http://rss.fnn-news.com/fnn_news_ranking.xml"
  mySite = mySite & "," & "http://rss.fnn-news.com/fnn_ss.xml"
  mySite = mySite & "," & "http://rss.fnn-news.com/fnn_news_en.xml"
End Sub ' MyRssFnnNewsMySite *----*----*    *----*----*    *----*----*    *----*----*

Sub MyRssFnnNewsMySheet(mySheet As String)
  mySheet = "FNNヘッドラインニュース"
  mySheet = mySheet & "," & "FNN: 社会"
  mySheet = mySheet & "," & "FNN: 政治"
  mySheet = mySheet & "," & "FNN: 経済"
  mySheet = mySheet & "," & "FNN: 国際"
  mySheet = mySheet & "," & "FNN: スポーツ"
  mySheet = mySheet & "," & "FNN: 話題"
  '
  mySheet = mySheet & "," & "FNN: アクセスランキング"
  mySheet = mySheet & "," & "FNNスピーク特集"
  mySheet = mySheet & "," & "FNN Headline news"
End Sub ' MyRssFnnNewsMySheet *----*----*    *----*----*    *----*----*    *----*----*

Sub MyRssFnnNewsSheetName(mySheetArray As Variant)
  Dim myName As String
  Dim mySheet As Variant
  Static myCategory As String
  '
  myName = Cells(1, 1).Text
  '
  For Each mySheet In mySheetArray
    Select Case True
      Case InStr(myName, mySheet) > 0
        myName = mySheet
        Exit For
    End Select
  Next ' mySheet
  '
  myName = Replace(myName, ": ", " ")
  ActiveSheet.Name = myName
End Sub ' MyRssFnnNewsSheetName *----*----*    *----*----*    *----*----*    *----*----*

Sub MyRssFnnNewsPopUp(myTitle As String)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem ポップアップ表示処理
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Dim myCmmdBar As CommandBar
  Dim myCtrlBttnIcon As CommandBarControl
  ' Dim myCtrlBttnDeTail As CommandBarControl
  Dim myCtrlBttnOk As CommandBarControl
  Dim myCtrlBttnCancel As CommandBarControl
  Dim x As Long
  Dim y As Long
  Dim myFaceId As Long
  Dim myMsg As String
  '
  On Error Resume Next
  CommandBars(myTitle).Delete
  On Error GoTo 0
  '
  Set myCmmdBar = CommandBars.Add(Name:=myTitle, Position:=msoBarPopup, Temporary:=True)
  Set myCtrlBttnIcon = myCmmdBar.Controls.Add(Type:=msoControlButton, Before:=1, Temporary:=True)
  ' Set myCtrlBttnDeTail = myCmmdBar.Controls.Add(Type:=msoControlButton, Before:=2, Temporary:=True)
  Set myCtrlBttnOk = myCmmdBar.Controls.Add(Type:=msoControlButton, Before:=2, Temporary:=True)
  Set myCtrlBttnCancel = myCmmdBar.Controls.Add(Type:=msoControlButton, Before:=3, Temporary:=True)
  '
  myMsg = myTitle & vbCrLf
  myMsg = myMsg & "FNN(フジニュースネットワーク)RSS取り込み処理" & vbCrLf & vbCrLf
  '
  With myCtrlBttnIcon
    .DescriptionText = "FNN(フジニュースネットワーク)RSS取り込み処理ポップアップメニュー"
    .Style = msoButtonIconAndWrapCaption
    .Caption = myMsg & "処理を実行しますか?"
    .TooltipText = "処理を実行しますか?"
    .FaceId = 1089
    myFaceId = .FaceId
    .OnAction = "MyRssFnnNewsBttnMyIcon"
  End With
  '
  ' With myCtrlBttnDeTail
  '   .DescriptionText = "[詳細RSSも取り込む]ボタン"
  '  .BeginGroup = True
  '  .Style = msoButtonIconAndCaption
  '  .Caption = "詳細RSSも取り込む"
  '  .TooltipText = "詳細RSSは取り込まない。"
  '  .FaceId = 6963
  '  .OnAction = "MyRssFnnNewsBttnMyDetail"
  'End With
  '
  With myCtrlBttnOk
    .DescriptionText = "[OK]ボタン"
    .BeginGroup = True
    .Style = msoButtonIconAndCaption
    .Caption = "OK"
    .TooltipText = "処理をを実行します。"
    .FaceId = 964
    .OnAction = "MyRssFnnNewsBttnMyOk"
  End With
  '
  With myCtrlBttnCancel
    .DescriptionText = "[キャンセル]ボタン"
    .Style = msoButtonIconAndCaption
    .Caption = "キャンセル" & String(13, " ")
    .TooltipText = "処理を中止します。"
    .FaceId = 330
    .OnAction = "MyRssFnnNewsBttnMyCancel"
  End With
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  x = -1: y = -1
  myFaceId = myCmmdBar.Controls(1).FaceId
  Beep
  '
  Do
    On Error Resume Next
    If x = -1 Then
      myCmmdBar.ShowPopup
    Else
      myCmmdBar.ShowPopup x, y
    End If
    On Error GoTo 0
    DoEvents
    Select Case myCmmdBar.Controls(1).FaceId
      Case 964, 330 ' 実行/キャンセル
        Exit Do
      Case 220, 6963, 1089 ' [チェックボックス]オン・オフ/[処理を実行しますか?]
        x = myCmmdBar.Left
        y = myCmmdBar.Top
        myCmmdBar.Controls(1).FaceId = myFaceId
      Case Else
        x = -1: y = -1
    End Select
  Loop
End Sub ' MyRssFnnNewsPopUp *----*----*    *----*----*    *----*----*    *----*----*

Sub MyRssFnnNewsBttnMyIcon(Optional MyDummy As Boolean)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem [処理を実行しますか?]ボタン処理
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  CommandBars("MyRssFnnNews").Controls(1).FaceId = 1089
End Sub ' MyRssFnnNewsBttnMyIcon *----*----*    *----*----*    *----*----*    *----*----*

Sub MyRssFnnNewsBttnMyDetail(Optional MyDummy As Boolean)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem [詳細RSSも取り込む]ボタン処理
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  With CommandBars("MyRssFnnNews").Controls(2)
    If .FaceId = 6963 Then
      .FaceId = 220
      .TooltipText = "詳細RSSも取り込む。"
    Else
     .FaceId = 6963
     .TooltipText = "詳細RSSは取り込まない。"
    End If
  End With
  CommandBars("MyRssFnnNews").Controls(1).FaceId = CommandBars("MyRssFnnNews").Controls(2).FaceId
End Sub ' MyRssFnnNewsBttnMyDetail *----*----*    *----*----*    *----*----*    *----*----*

Sub MyRssFnnNewsBttnMyOk(Optional MyDummy As Boolean)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem コマンドボタン[OK]OnAction処理
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  CommandBars("MyRssFnnNews").Controls(1).FaceId = 964
End Sub ' MyRssFnnNewsBttnMyOk *----*----*    *----*----*    *----*----*    *----*----*

Sub MyRssFnnNewsBttnMyCancel(Optional MyDummy As Boolean)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem コマンドボタン[キャンセル]OnAction処理
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  CommandBars("MyRssFnnNews").Controls(1).FaceId = 330
End Sub ' MyRssFnnNewsBttnMyCancel *----*----*    *----*----*    *----*----*    *----*----*
inserted by FC2 system