三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

CreateObject("htmlfile") で HTMLDocumentを作成可能。※IHTMLDocumentじゃなかった・・・

2022/04/24 追記
Dim oDocument As Object
Set oDocument = CreateObject("htmlfile")
で作成したhtmlfileドキュメントオブジェクトに
html文字列を書き込む、そんなデバッグ風景です。
www.youtube.com
https://www.youtube.com/watch?v=RjZZUq40gxY
目次
00:00 0.IEが無くなるので CreateObject("htmlfile")
00:26 1.DoEventsがないと処理が追い付かない?
03:25 2.oDocument.write って追記なの?
07:23 3.JRAオッズ取得を例題にデバッグ
08:17 文字化けの説明
10:00 CreateObject("htmlfile")でDocumentを作り
10:36 リンクからオッズのAタグを取り出す

Option Explicit

Sub test_001()

    Dim oDocument As Object
    Set oDocument = CreateObject("htmlfile")

    oDocument.write "<html><body>te<b>st</b></body></html>"
    'HTMLをセット
    oDocument.write "<html><body>test2</body></html>"
    oDocument.write "<html><body><p>test3</p></body></html>"
    oDocument.write "<html><body>test4</body></html>"
    Debug.Print "html:" & oDocument.body.innerHTML
    Stop

End Sub

GetとPOST シフトJISで文字化けしたり・・・・

'URLを受け取り、HTML文字列を返す(シフトJISページ用に変換後)
Public Function get_htmlfile(strURL As String) As String

    Dim objDOC As Object
    
    Set objHTML = CreateObject("MSXML2.XMLHTTP")
    
    objHTML.Open "GET", strURL, False
    'objHTML.overrideMimeType "text/plain; charset=Shift_JIS"
    DoEvents
    objHTML.send
    Sleep 250  '0.25秒待つ

    DoEvents
    Do While objHTML.readyState <> 4
        DoEvents
    Loop
    
    Dim strHTML As String
    'strHTML = objHTML.responseText
    strHTML = StrConv(objHTML.responseBody, vbUnicode)

    'テキスト確認 デバッグ用
    Dim strFNAME As String
    strFNAME = ThisWorkbook.Path & "\testhtml.txt"
    Open strFNAME For Output As #1
    Print #1, Now() & " に実行"
    Print #1, "strURL:" & strURL
    Print #1, strHTML
    Close #1

    'Debug.Print strHTML
    Sleep 250  '0.25秒待つ
    get_htmlfile = strHTML  'リターン値で返す

End Function


'URL,パラメータを受け取り、HTML文字列を返す(シフトJISページ用に変換後)
Public Function get_htmlfile_post(strURL As String, strPARA As String) As String

    Dim objHTML As Object
    
    Set objHTML = CreateObject("MSXML2.XMLHTTP")
    
    objHTML.Open "POST", strURL, False
    objHTML.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    objHTML.send (strPARA)
    DoEvents
    Sleep 250  '0.25秒待つ

    DoEvents
    Do While objHTML.readyState <> 4
        DoEvents
    Loop
    
    Dim strHTML As String
    'strHTML = objHTML.responseText
    strHTML = StrConv(objHTML.responseBody, vbUnicode)

    'テキスト確認 デバッグ用
    Dim strFNAME As String
    strFNAME = ThisWorkbook.Path & "\testhtml.txt"
    Open strFNAME For Output As #1
    Print #1, Now() & " に実行"
    Print #1, "strURL:" & strURL
    Print #1, "strPARA:" & strPARA
    Print #1, strHTML  'HTML
    Close #1

    'Debug.Print strHTML
    
    get_htmlfile_post = strHTML  'リターン値で返す

End Function



2012/01/12 追記


人力検索の回答に似たような処理があったので、先に

http://q.hatena.ne.jp/1326289490#a1127039

↑こちらを参考にするといいかも。


元の三流記事


↑よくみると、IHTMLDocument 頭IがなくただのHTMLDocumentだった インターフェースのIかわからないが、これだと使えない、、素直に参照設定した方がいいのかなぁ・・・


CreateObject("htmlfile") で HTMLDocumentを作成可能。不思議。
とりあえず、メモメモ。
と思ったら、IHTMLDocumentの頭Iが無いよ、、、しくじった。失敗メモですね。

Option Explicit

Sub aaa()

    Dim objDOC As Object

    'なんで、"htmlfile"が不明だが、これでHTMLDocumentを作成可能。不思議。
    Set objDOC = CreateObject("htmlfile") 'createObject "MSHTML"や"MSHTML.HTMLDocument"だとエラー・・
    
    Debug.Print TypeName(objDOC)
    MsgBox TypeName(objDOC)
    
End Sub



続き、は、

MSHTMLを参照設定後、As HTMLDocument と.createDocumentFromUrlで文章を読み込み使うテスト
http://d.hatena.ne.jp/ken3memo/20090904/1252025888

で、参照設定して、As HTMLDocumentで使ったけど、なんかなぁ。素直にCreateObjectで行いたいんだけど。。。

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。
・[Excel/Access VBA]の解説
・[ASP(Active Server Pages)]の解説。
・[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
・[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
三流君を踏み台にする
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)