VBA转换TXT文档编码(UTF-8转换为ANSI)

        当我们使用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

你可能感兴趣的:(excel,转换TXT编码)