? ? ? ? 当我们使用VBA语句直接读取txt文档或将其导入到Excel工作簿时,如果遇到UTF-8编码的文档经常会出现乱码,因此我们需要将txt文档的编码转换为ANSI后再读取。下面是我编写的一个将UTF-8编码换为ANSI编码的函数UTF8TOANSI,这个函数只需要一个参数filePath,它是指TXT文档的路径,使用它转换之后会生成一个同名文件加“_ANSI”的txt文档。关于该函数的使用方法,详见《VBA读取txt文档指定行与列的值》一文。
Function UTF8TOANSI(filePath As String)
'
' 将TXT编码UTF8转换为ANSI
Dim fso As Object
Set fso = CreateObject("scripting.filesystemobject")
If Not fso.fileExists(filePath) Then
MsgBox "txt文件" & filePath & "不存在" & vbCrLf & vbCrLf & "UTF8转ANSI失败!", vbOKOnly + vbCritical, "错误"
UTF8TOANSI = False
Exit Function
End If
Dim txtFile1, txtFile2 As String, columnIndex As Integer
txtFile1 = filePath
txtFile2 = Left(filePath, Len(filePath) - 4) & "_ANSI.txt"
If fso.fileExists(txtFile2) Then fso.DeleteFile (txtFile2) ' 检查并删除旧文件
' 开始转换
Dim ADOStrm As Object, txtStr As String
Set ADOStrm = CreateObject("ADODB.Stream")
ADOStrm.Type = 2
ADOStrm.Mode = 3
ADOStrm.Charset = "utf-8"
ADOStrm.Open
ADOStrm.LoadFromFile txtFile1 ' 加载TXT文本 txtFile1
txtStr = ADOStrm.ReadText
ADOStrm.Position = 0
ADOStrm.Charset = "gbk"
ADOStrm.WriteText txtStr
ADOStrm.SetEOS
ADOStrm.SaveToFile txtFile2, 2 ' 输出TXT文本 txtFile2
ADOStrm.Close
Set ADOStrm = Nothing
Set fso = Nothing
UTF8TOANSI = True
End Function