文字化けについて

このQ&Aのポイント
  • アクセスのテーブルをTransferTextでエクスポートし、そのソースの中身のタグをVBAで置換したいです。
  • 日本語部分が?になってしまうため、StrConv関数を使用するものの余分なスペースが入り、文字化けが解消されません。
  • 日本語を含むソースの場合、文字化けの対応方法を教えてください。
回答を見る
  • ベストアンサー

文字化けについて

アクセスのテーブルをTransferTextでエクスポートし、 そのソースの中身のタグをVBAで置換したいのですが Sub test1() Dim objIE As Object Dim myStr As String Dim t As String t = "Table" DoCmd.TransferText acExportHTML, , t, MyDesktop & "\" & t & ".html", True Set objIE = CreateObject("MSXML2.XMLHTTP") objIE.Open "GET", MyDesktop & "\" & t & ".html", False objIE.send myStr = objIE.responseText myStr = Replace(myStr, "<TD DIR=LTR ALIGN=RIGHT>", "<TD>") Debug.Print myStr Set objIE = Nothing End Sub これだと、日本語部分が?になってしまいます。 なので、 myStr = objIE.responseText を myStr = StrConv(objIE.responseText, 64) に変更したら、余分なスペースが入り、結局文字化けしたままです。 http://www2s.biglobe.ne.jp/iryo/vba/IE/http1.html を参考にしたのですが、日本語を含むソースの場合はどうすればいいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

HTMLで出力する際に UTF-8のコードページで出力するようにしてやればいいと思いますよ DoCmd.TransferText acExportHTML, , t, MyDesktop & "\" & t & ".html", True を DoCmd.TransferText acExportHTML, , t, MyDesktop & "\" & t & ".html", True,,65001 としてやって myStr = StrConv(objIE.responseText,4) または myStr = objIE.responseText といった具合で …

rxzhrogxwihi
質問者

お礼

エクスポートする時に文字コードを指定しちゃえばいいのですね。 できました。

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

取得した文字列が 全角になってしまっているように見受けられたので念のために 半角変換を実行したまでですよ 不具合が無ければ objIE.responseTextをそのまま使ってもいいかと …

rxzhrogxwihi
質問者

お礼

ありがとうございます。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

' vbNarrow のつもりだったので ,4ではなく ,8ですね myStr = StrConv(objIE.responseText, 8)

rxzhrogxwihi
質問者

お礼

「,,65001」を付け足すことによって文字化けは回避できたのですが myStr = StrConv(objIE.responseText, 8) で半角にするのは何の為なのでしょうか? 教えて頂ければ助かります。

関連するQ&A

  • VBAでソースが文字化けします。

    ホームページのソースをVBAで表示してみてます。 ヤフーhttp://www.yahoo.co.jp/の場合は問題ないのですが、 ソフトバンクhttp://www.softbank.jp/の場合は日本語が文字化けしてしまいます。 何が違うんでしょうか。 ブラウザで表示して、ソースを表示させてみるとどちらも文字化けせす正常に表示されます。 どなたか教えてください。 コードこんな感じです、ネットで探したものです。 Sub test() Dim http As WinHttp.WinHttpRequest Dim sURI As String Dim sHTML As String Set http = CreateWinHttpRequest 'sURI = "http://www.softbank.jp/" sURI = "http://www.yahoo.co.jp" With http .open "GET", sURI, False .send sHTML = .ResponseText End With Debug.Print sHTML End Sub

  • VBA InStrがうまくできない

    ソースを見ると <div class="hd"> と言うタグは有るのに VBAで Sub test() Dim objIE As Object Dim myObj As Object Dim str電話番号 As String Dim strHTML As Variant Dim intstart As Variant str電話番号 = "03-58**-58**" Set objIE = CreateObject("MSXML2.XMLHTTP") objIE.Open "GET", "http://search.loco.yahoo.co.jp/search?p=" & str電話番号, False objIE.send strHTML = objIE.responseText intstart = InStr(1, strHTML, "<div class=""hd"">") End Sub とした時にintstartは0が返ります。 なぜソース上は<div class="hd">は存在するのに 0が返るのでしょうか?

  • InternetExplorer.Applicat

    Sub test1() Dim objIE As Object Dim i As Long Dim MyRow As Long Dim Str As String Dim tmp As Variant Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://oshiete.goo.ne.jp/" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Str = objIE.Document.Body.innerHTML 'ソースを抜き出す tmp = Split(Str, Chr(10)) '配列に格納する MyRow = 1 '初期値 For i = LBound(tmp) To UBound(tmp) Cells(MyRow, 1) = tmp(i) MyRow = MyRow + 1 Next i objIE.Quit Set objIE = Nothing End Sub ************************************************** Sub test2() Dim objIE As Object Dim Str As String Dim tmp As Variant Dim i As Long Dim MyRow As Long Set objIE = CreateObject("MSXML2.XMLHTTP") objIE.Open "GET", "http://oshiete.goo.ne.jp/", False objIE.Send Str = objIE.responseText 'ソースを抜き出す tmp = Split(Str, Chr(10)) '配列に格納する MyRow = 1 '初期値 For i = LBound(tmp) To UBound(tmp) Cells(MyRow, 1) = tmp(i) MyRow = MyRow + 1 Next i Set objIE = Nothing End Sub ************************************************** 上記の二つのコードは どちらもVBAでHTMLソースをエクセルに書き出すコードなのですが 結果が違います。 なぜなのでしょうか? 実際のソースを確認したら CreateObject("MSXML2.XMLHTTP") の方が正しかったです。 CreateObject("InternetExplorer.Application") は何が取得されてるのでしょうか?

  • vbaで配列に値を格納する場合

    vbaで配列に値を格納する場合 変数の宣言はどちらを使った方が良いのでしょうか? Sub Sample1() Dim i As Long Dim myStr As String Dim tmp() As String myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub か Sub Sample1() Dim i As Long Dim myStr As String Dim tmp As Variant myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub でも問題なく動くのですが、 Variant型での宣言はあまりしない方が良いですか? あと Dim tmp() As String ならエラーにならないのですが Dim tmp As String だとエラーになってしまう理由がよくわからないので教えて頂けますか?

  • MSXML2で、サイトのタイトルを取得したい

    アクセスvbaです。 InternetExplorerの方法だと、 **************************************************** Sub Sample1() Dim ObjIE As InternetExplorer Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Navigate "http://www.yahoo.co.jp/" ObjIE.Visible = True Do While ObjIE.Busy = True DoEvents Loop Do While ObjIE.Document.ReadyState <> "complete" DoEvents Loop Debug.Print ObjIE.Document.Title Debug.Print ObjIE.LocationName ' 同じ ObjIE.Quit Set ObjIE = Nothing End Sub **************************************************** で、該当のサイトのタイトルを取得できるのですが、 これではなく、 **************************************************** Sub Sample2() Dim objMSXML2 As Object Dim myObj As Object Dim myAll As Variant Set objMSXML2 = CreateObject("MSXML2.XMLHTTP") objMSXML2.Open "GET", "http://www.yahoo.co.jp/", False objMSXML2.Send myAll = objMSXML2.responseText 'ソースを抜き出す ’タイトル取得 Set objMSXML2 = Nothing End Sub **************************************************** の方法で、サイトのタイトルを取得したいのですが、 可能でしょうか? コードをご教授ください。よろしくお願いします。

  • VBA 複数の文字のコードを一気に返すには

    Sub test1() Dim myStr As String myStr = "abc" Debug.Print Asc("a") Debug.Print Asc(myStr) End Sub このコードは、どちらも97が返るのですが、 myStrは3文字です。 3文字全ての文字コードを返すには、 Sub test2() Dim myStr As String myStr = "abc" Debug.Print Asc(Mid(myStr, 1, 1)) & Asc(Mid(myStr, 2, 1)) & Asc(Mid(myStr, 3, 1)) End Sub のようにするしかないのでしょうか?

  • 参照渡しをする時は、渡される側は違う変数を使う?

    参照渡しをする時は、渡される側は違う変数を使うべきなのでしょうか? VBAのお勉強をしているのですが Sub test1() Dim mystr As String mystr = "a" Call test2(mystr) Call test3(mystr) End Sub Sub test2(ByRef mystr As String) MsgBox mystr End Sub Sub test3(ByRef mystr2 As String) MsgBox mystr2 End Sub この場合、test2とtest3ではどちらを使ったほうがいいのでしょうか? test3は、mystr2 というmystrとは違う変数を使っていますが、 test2は、test1のmystrと同じ変数を使っています。 test1と同じ変数を使おうが違う変数を使おうが どちらにしろ (ByRef 変数名 As String) で宣言するから、変わらないのでしょうか?

  • VBAで文字の位置が正確に取得できない

    Excel2003のマクロで、URLを抜き出すマクロを作っているのですが、なぜかurl_endの値が正確に取得できません。何がいけないのでしょうか? 事象 url_endに格納される値がなぜか1376(くらいだったような・・)になってしまう。 url_startには1260が格納されており、<a href=の部分をきちんと取得している。 ソース Sub test() Dim objIE As Object Dim objTAG As Object Dim souce As String Dim url As String Dim url_start As String Dim url_end As String url_end = 1 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = False objIE.Navigate "http://dir.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop Application.Wait Time:=Now + TimeValue("00:00:02") url_start = InStr(url_end, objIE.Document.All(1).Innerhtml,"<a href=", vbTextCompare) url_end = InStr(url_start,objIE.Document.All(1).Innerhtml, ">", vbTextCompare) url = Mid(objIE.Document.All(1).Innerhtml, url_start, url_end) Cells(1, 1).Value = url End Sub

  • ややこしいですがご協力ください

    アクセスからエクセルを起動してエクセルで実行した変数をアクセスに持って帰りたいです。 【アクセス側】_ Sub エクセルの値を持ってくる() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim MyFileName As String Dim myStr As String Set xlApp = New Excel.Application MyFileName = "C:\Users\エクセル.xlsm" Set xlBook = xlApp.Workbooks.Open(MyFileName) xlApp.Visible = True xlApp.Run "'" & MyFileName & "'!" & "Excel_test" Set xlApp = Nothing MsgBox myStr ’★ End Sub 【エクセル側】 Sub Excel_test() Dim myStr As String myStr = "アクセスへ渡す" MsgBox myStr End Sub としたときに、アクセスの MsgBox myStr ★でも エクセルで実行させた変数を持って帰りたいのですが どこを修正すればよろしいでしょうか? ご教授よろしくお願いします。

  • 各変数に何文字格納できるのでしょうか?

    Dim myStr As Variant と Dim myStr As String では、 それぞれmyStrには何文字格納できるのでしょうか?

専門家に質問してみよう