VBA: WEBページ(HTML)をローカルに保存

指定のURLから生成されるHTMLをファイル化して、ローカルに保存する。

Private Declare Function DeleteUrlCacheEntry Lib "wininet" Alias "DeleteUrlCacheEntryW" ( _
    ByVal lpszUrlName As Long) As Long
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileW" ( _
    ByVal pCaller As Long, _
    ByVal szURL As Long, _
    ByVal szFileName As Long, _
    ByVal dwReserved As Long, _
    ByVal lpfnCB As Long) As Long
 
Public Sub test_download()
    If HTML_Download("http://xxxx", "C:\temp\test.html") <> 0 Then
        MsgBox "Fail!"
    Else
        MsgBox "Done!"
    End If
End Sub
 
Function HTML_Download(ByVal HTML_URL As String, ByVal SavePath As String) As Long
    DeleteUrlCacheEntry StrPtr(HTML_URL)
    HTML_Download = URLDownloadToFile(0, StrPtr(HTML_URL), StrPtr(SavePath), 0, 0)
End Function

VBA:HTML内から値の取り出し

HTMLファイル内にあるテーブル<table>内の値を取り出す。
今まではINSTR関数で地道に処理していたが、もっとスマートな方法を準備した。


Sub html_TD_value()
    Dim objXML As New MSHTML.HTMLDocument
    Dim htmlDoc As New MSHTML.HTMLDocument
    Dim htmlDoc2 As Object
    Dim htmlDoc3 As Object
    Dim htmlDoc4 As Object

    ' 事前に出力されたHTMLファイルを取り扱う
    Set htmlDoc = objXML.createDocumentFromUrl("file:///C:/temp/test.html", vbNullString)

    'wait処理が面倒だから0.5秒待つことにする(ローカルファイルアクセスのため高速なはず)
    Application.Wait [Now() + "0:00:00.5"]

   ' id="xxxx"まで飛ぶ
    Set htmlDoc2 = htmlDoc.getElementById("xxxx")
   '1行目(TR)は飛ばして2行目から処理
    For i = 1 To htmlDoc2.getElementsByTagName("tr").Length - 1

        ' 
<TR>まで飛ぶ
        Set htmlDoc3 = htmlDoc2.getElementsByTagName("tr")(i)
        For j = 0 To htmlDoc3.getElementsByTagName("td").Length - 1

            ' 
<TR>内の
<TD>まで飛ぶ
            Set htmlDoc4 = htmlDoc3.getElementsByTagName("td")(j)
            ' 
<TD>の値をゲット
            Debug.Print i, j, htmlDoc4.innerText

        Next
    Next
End Sub

WORDテクニック

行間の改善

14ptの大きさを境に突然行間が大きくなる
理由はググって頂くとして、
解消方法は行間オプションを開いて下記のチェックを外す
□ 1ページの行数を指定時に文字を行グリッド線に合わせる

初期設定にしたい場合は、
ホームタブ内のスタイルの「標準」を右クリックから変更を選び、段落設定を上記のように直す
この時に、下記の設定も忘れないこと
○ このテンプレートを使用した新規文書

 

段組み内での改行

通常、Ctrl+Enterで次ページ送りだが、
Shift+Ctrl+Enterを押すと、次の段組へ飛ぶことができる

 

余白を最初から狭くしておく

新規作成時に、広い余白が用紙を無駄にします
ページレイアウトのタブにて、ページ設定の右下にある小さなアイコン
*四角+右下矢印付き
これをWクリックを押して、ページ設定画面を表示させる
ここの左下の「規制に設定」を押して反映させる。