| 
    
     |  | 「おさっち」です。 
 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形式であることは間違いないと思います。
 
 アドバイス、よろしくお願いいたします。
 
 |  |