
何度もお世話になります、よろしくお願いいたします。
本日、EXCEL VBAでWEBページを完全保存する方法を質問して
下記を紹介していただきました。
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
--------------------------------------------------------------------------------
Sub DownloadFileFromWeb()
Const strUrl As String = "http://www.puremis.net/excel/index.shtml"
Dim strSavePath As String
Dim returnValue As Long
strSavePath = ThisWorkbook.Path & "\" & "Test.htm"
returnValue = URLDownloadToFile(0, strUrl, strSavePath, 0, 0)
If returnValue = 0 Then
MsgBox "Sccess!"
Else
MsgBox "Did not success."
End If
End Sub
-------------------------------------------------
この状態だと動作は完璧なんですが
たくさんのWEBページを保存するようにVBAを組みたいので
HPアドレスの部分に変数を使いたいのです。
この部分です:Const strUrl As String = "http://www.puremis.net/excel/index.shtml"
でも変数を使うとエラーになってしまうので困り果てております。何か良い方法はございませんでしょうか。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
こんにちは。
> WEBページを完全保存する方法
ご質問なさっていることは、かなり面倒なことです...ね。
ご存じかもしれませんが、WEB ページとは HTML ファイル以外にも
・CSS スタイルシートファイル
・JS などのスクリプトファイル
・画像ファイル
など複数の外部ファイルで構成されています。
# もちろん、HTML 単一で構成されたページもあります。
ご質問文にあるコードだと、この内 HTML ファイルのみローカルに保存して
いるだけで、出力されたファイルをブラウザで開くと、フルパス指定されて
いない画像などは欠けた状態になるはずです。
画像等も含めてローカルに保存したい場合、URLDownloadToFile API を使用
するなら、HTML の中で参照されている先述の外部ファイルも一緒に
URLDownloadToFile API でダウンロードし、かつ HTML ファイルを解析して
参照リンクも書き変えなければなりません。
■案1. IE を操作して保存ダイアログを使う方法
' // IE で WEB ページを保存する
Sub Sample1()
Const READYSTATE_COMPLETE As Long = 4
Const OLECMDID_SAVEAS As Long = 4
Const OLECMDEXECOPT_PROMPTUSER As Long = 1
Dim ie As Object ' // InternetExplorer
Dim url As String
url = "http://www.goo.ne.jp/"
' // ie を起動して目的のページを開く
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate url
While ie.Busy Or ie.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
' // 初期ファイル名を指定するため WEB ページタイトルを変更します
ie.Document.Title = "test"
' // ie の保存ダイアログを表示します
ie.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_PROMPTUSER
End Sub
保存ダイアログの自動化は可能ですけど、API を駆使した面倒なコードになり
ますので省略します。
■案2. MHT ファイルでも良ければ...な方法(Windows2000以降限定)
参考(Wiki): http://ja.wikipedia.org/wiki/MHTML
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
要するに、メールのように HTML に画像ファイルなどが添付されるような
イメージです。
なお、コードは一切エラー処理はしてませんし、必要最小限しか書いてません。
お試しになる場合は、ご自身で試行錯誤してみて下さい。
No.2
- 回答日時:
訂正
ゴミが残っていました
下段の方です
-------------------------------------------------------
Sub DownloadFileFromWeb()
Dim strUrl As String
Dim strSavePath As String
Dim returnValue As Long
strUrl = "http://www.puremis.net/excel/index.shtml"
strSavePath = ThisWorkbook.Path & "\" & "Test.htm"
・
・
・
No.1
- 回答日時:
Sub DownloadFileFromWeb()
Const strUrl As String = "http://www.puremis.net/excelindex.shtml"
Dim strSavePath As String
Dim returnValue As Long
strSavePath = ThisWorkbook.Path & "\" & "Test.htm"
・
・
・
-----------------------------------------------------------
Sub DownloadFileFromWeb()
Dim strUrl As String
Dim strSavePath As String
Dim returnValue As Long
strUrl = "http://www.puremis.net/excel/index.shtml"
strSavePath = ThisWorkbook.Path & "\" & "Test.htm"
・
・
・
違い分かりますか
もう少し理解された方が、後々良いと思いますよ
この回答への補足
ありがとうございます。
なんとか理解できました。
ずうずうしく追加で質問なんですが
IEでWEBページを完全保存したら
filesフォルダが一緒に作成されますけど
VBAの命令で同じように
htmlファイルと、filesフォルダが
同時に作成される方法はありますか?
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCEL VBAでwebページを保存する方法
Visual Basic(VBA)
-
エクセルのマクロでアクティブシートをhtml保存
Visual Basic(VBA)
-
vbaでIEの名前を付けて保存(A)をしたい
Microsoft ASP
-
-
4
エクセルVBAでMHTMLで保存したWebページをGoogle Chromeで表示
Visual Basic(VBA)
-
5
VBAでwebの画像を名前を付けて保存する方法
その他(プログラミング・Web制作)
-
6
VBA IE ダウンロード ダイアログ制御(名前を付けて保存)
Visual Basic(VBA)
-
7
vba クリップボードクリアについて教えてください
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
保存先を記憶する
-
[Excel]保存後起動時に保存前の...
-
ファイルの保存先を指定(固定...
-
デスクトップ保存だけ遅い
-
共有フォルダの情報がリアルタ...
-
インターネットでつながらない...
-
ホームページの文字だけを保存...
-
Thunderbird 添付ファイルの保...
-
Excelから落としたCSVファ...
-
ジャンプリストでピン留の保存場所
-
マクロ、PDFを任意のフォルダへ...
-
ZIP,JPEGファイルをDLしても0K...
-
ダウンロードの保存先が勝手に...
-
動くイラストを保存したい
-
Windows10 保存先に「デスクト...
-
デスクトップに保存した壁紙はH...
-
サムネイルの保存場所
-
拡張子が .mht というファイル...
-
ファイルをダウンロードすると...
-
xlsmのダウンロード(ブラウザ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルの保存先を指定(固定...
-
SONY Music Center For PC に付...
-
デスクトップに保存した壁紙はH...
-
ZIP,JPEGファイルをDLしても0K...
-
ジャンプリストでピン留の保存場所
-
マクロ、PDFを任意のフォルダへ...
-
Thunderbird 添付ファイルの保...
-
エクセル マクロ
-
「名前を付けてページを保存」...
-
サムネイルの保存場所
-
保存先を記憶する
-
インターネットで閲覧した画像...
-
保存したWebページが見られなく...
-
EXCEL VBAでWEBページ保存2
-
保存した覚えのない画像が出て...
-
画像ファイル名で検索しても表...
-
デスクトップ保存だけ遅い
-
エクセル・ワードのデータや文...
-
Sonic Stage ファイルの保存先
-
動くイラストを保存したい
おすすめ情報