[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『mht形式でのWEBページ保存』(田吾作)
おはようございます。よろしくお願いいたします。
↓を参考に現在IEで表示しているWEBページをmht形式で保存するコードをほとんどコピーですが作成 しました。
EXCEL VBAでWEBページ保存2 http://oshiete.goo.ne.jp/qa/4253824.html
2008/08/18 00:46のKenKen_SPさんの↓sample2を流用しました。
Sub sample2()
' // この方法でも完全ではないが、実用上はほぼ問題ないか。。な
Const cdoSuppressNone As Long = 0 Const adSaveCreateOverWrite As Long = 2
Dim msg As Object ' // CDO.Message Dim stm As Object ' // ADODB.Stream Dim url As String Dim outFilename As String
url = "http://www.goo.ne.jp/" 'ここを変える outFilename = ThisWorkbook.Path & "\sample.mht"
    Set msg = CreateObject("CDO.Message")
    msg.CreateMHTMLBody url, cdoSuppressNone, "", ""
    Set stm = msg.GetStream
    stm.SaveToFile outFilename, adSaveCreateOverWrite
    stm.Close
Set stm = Nothing Set msg = Nothing
End Sub
sample2のURLを特定のものに変えるだけだったら問題なく 保存でき、保存したものも元のWEBページと同じものが表示 されます。
しかし、下記のようにFunction化して実行すると画像のリンクが切れたり フォーマットが崩れます。マクロの実行も時間がかかったりします。 保存したmhtファイルを開くのも時間がかかります。
「mhtsave」FunctionはURLの部分とoutFilenameの部分以外は変更していま せん。
どのように書き換えたらいいでしょうか? ご指導お願いいたします。
 Sub test()
  Dim mywindow As Object
  Dim w As Object
  Dim myurl As String
  Dim myttl As String
   Set mywindow = CreateObject("Shell.Application")
   For Each w In mywindow.Windows
    If UCase(Right(w.FullName, 12)) = "IEXPLORE.EXE" Then 'IEだったら
       myurl = w.LocationURL 'IEからURL取得
       myttl = w.document.Title 'IEからタイトル取得
       Call mhtsave(myurl, myttl) 'mhtsave呼び出し
    End If
   Next
   Set mywindow = Nothing
 End Sub
 Function mhtsave(ByVal myurl As String, myttl As String)
  Const cdoSuppressNone       As Long = 0
  Const adSaveCreateOverWrite As Long = 2
  Dim msg         As Object ' // CDO.Message
  Dim stm         As Object ' // ADODB.Stream
  Dim url         As String
  Dim outFilename As String
   url = myurl
   outFilename = CreateObject("WScript.Shell").SpecialFolders("Desktop") _
    & "\" & myttl & ".mht"
   Set msg = CreateObject("CDO.Message")
   msg.CreateMHTMLBody url, cdoSuppressNone, "", ""
   Set stm = msg.GetStream
   stm.SaveToFile outFilename, adSaveCreateOverWrite
   stm.Close
   Set stm = Nothing
   Set msg = Nothing
 End Function
※11:22追記 関係あるかわかりませんが、Vistaは32ビット、IEは9です。
※7/13 10:23追記
↓のように一旦テキストボックスにURL、タイトルを取得してIEを閉じた後10秒ほどおいて mht保存するコードを実行しても同様にだめでした。
 Private Sub CommandButton3_Click()
  Dim MyWindow As Object
  Dim w As Object
  Dim myurl As String
  Dim myttl As String
   Set MyWindow = CreateObject("Shell.Application")
   For Each w In MyWindow.Windows
    If UCase(Right(w.FullName, 12)) = "IEXPLORE.EXE" Then
       Me.TextBox1.Value = w.LocationURL
       Me.TextBox2.Value = w.document.Title
    End If
   Next
   Set MyWindow = Nothing
 End Sub
Private Sub CommandButton4_Click() Dim myurl As String Dim myttl As String myurl = Me.TextBox1.Value If myurl = "" Then Exit Sub myttl = Me.TextBox2.Value If myttl = "" Then myttl = Format(Now, "yymmdd_hhmmss") Call mhtsave(myurl, myttl) End Sub
そこでIEのURLを取得してテキストボックスのURLをコピーしてクリップボードに格納 しておきブックを手動で閉じて再度ブックを開いてテキストボックスにURLを貼り付け てからmht保存を実行したらフォーマットが崩れないで保存出来ました。 このときは元のIEは開いたままでもOKでした。
そこで、IE取得した時のエクセルが悪さしてるのかな、と思い↓のようにVBSにしてみ ましたがやはりダメでした。
  Dim MyWindow
  Dim w
  Dim myurl
  Dim myttl
   Set MyWindow = CreateObject("Shell.Application")
   For Each w In MyWindow.Windows
    If UCase(Right(w.FullName, 12)) = "IEXPLORE.EXE" Then
       myurl = w.LocationURL
       myttl = w.document.Title
       call mhtsave(myurl,myttl)
    End If
   Next
   Set MyWindow = Nothing
 wscript.quit
 Function mhtsave(ByVal myurl, myttl)
  Const cdoSuppressNone = 0
  Const adSaveCreateOverWrite = 2
  Dim msg 'As Object ' // CDO.Message
  Dim stm 'As Object ' // ADODB.Stream
  Dim url 'As String
  Dim outFilename 'As String
   url = myurl
   outFilename = CreateObject("WScript.Shell").SpecialFolders("Desktop") _
    & "\" & myttl & ".mht"
   Set msg = CreateObject("CDO.Message")
   msg.CreateMHTMLBody url, cdoSuppressNone, "", ""
   Set stm = msg.GetStream
   stm.SaveToFile outFilename, adSaveCreateOverWrite
   stm.Close
   Set stm = Nothing
   Set msg = Nothing
 End Function
< 使用 Excel:Excel2007、使用 OS:WindowsVista >
フォーマットが崩れるのはフレームを使っているWEBページのようです。
エクセルの学校で試したら崩れませんでした。 (田吾作) 2014/07/13(日) 18:17
WEBページによってはうまく保存出来ない理由が少しづつ 分かってきました。
フレーム云々ではなく、WEBページのタイトルによるみたいです。 保存時にWEBページのタイトルではなく、適当に付けた名前で保存 したらmhtファイルがきちんと開けました。
おそらく、なのですが、WEBページのタイトルの見た目スペースに なっている部分が悪さしているようです。タイトルのスペース部分 と感嘆符部分を削除して保存したらうまくいきました。
ファイルの保存がうまくいってなかったのではなく、保存したファ イルを開くときにファイル名に不適切?な文字が入っているとうま く開けないようです。
保存ファイル名を編集することで対応することにしました。 ご検討いただいた方がいらっしゃいましたらありがとうございま した。 (田吾作) 2014/07/14(月) 00:38
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
 Modified by kazu.