[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.