|
「おさっち」です。
googleで、色々検索しました。
エラーの原因はわかりました。
>out_strm.Read m_byte2
「Read」の使い方が、やはり間違っていたようです。
>m_string2 = in_strm.Read(adReadAll)
とすれば、エラーはでなくなりました。
また、Charsetを有効になるのは、Type = adTypeTextのときだけで、
Type = adTypeTextではだめなようです。
それから、Charset = "SJIS" ではなく、Charset = "Shift_JIS"と書いてあるサイトもありました。
実際のデータベースでは、特定の列のみにEUCの文字が入っているので、そこだけを変換するように考えました。
以上を踏まえて、以下のように変更してみました。
-------------------------------------------------------------
Do Until rs.EOF
j = 1
For Each m_Field In rs.Fields
Cells(i, j).Select
If m_Field.Name = "t1" Then
Set in_strm = CreateObject("ADODB.Stream")
Set out_strm = CreateObject("ADODB.Stream")
in_strm.Charset = "EUC-JP"
in_strm.Type = adTypeText
out_strm.Charset = "Shift_JIS"
out_strm.Type = adTypeText
in_strm.Open
out_strm.Open
m_byte1 = m_Field.Value
in_strm.WriteText m_byte1
in_strm.Position = 0
in_strm.CopyTo out_strm
out_strm.Position = 0
m_string2 = out_strm.ReadText(adReadAll)
Cells(i, j).Value = m_string2
in_strm.Close
out_strm.Close
Set in_strm = Nothing
Set out_strm = Nothing
Else
Cells(i, j).Value = m_Field.Value
End If
j = j + 1
Next m_Field
i = i + 1
rs.MoveNext
Loop
-------------------------------------------------------------
これで、実行時エラーはでなくなりましたが、依然として文字化けはなおりません。
なお、データベースの内容は、EUC形式でダンプして、正常に文字が表示されたので、EUC形式であることは間違いないと思います。
アドバイス、よろしくお願いいたします。
|
|