Q:在《VBA专题08: 使用VBA操作文本文件》中,我们讲解了如何使用VBA来创建、修改、读取文本文件等操作。我们在示例代码中创建的文本文件内容都是英文,因此一切顺利。然而,如果我们创建的文本文件是中文,结果如何呢?如下面的代码,创建一个含有中文内容的文本文件:
代码语言:javascript复制Sub CreateTextFile()
Dim iFileNumber As Integer
Dim strFilePath As String
'创建的文件的路径和名字
strFilePath = "C:MyFile.txt"
'确定下一个可用的文件序号
iFileNumber = FreeFile
'打开文本文件
Open strFilePath For Output As iFileNumber
'写入文本
Print #iFileNumber, "你好!"
Print #iFileNumber, "这是由VBA创建的文本文件."
Print #iFileNumber, "完美Excel."
'保存并关闭文件
Close iFileNumber
End Sub
然后,使用下面的代码来读取该文件:
代码语言:javascript复制Sub ExtractTextFormFile()
Dim iFileNumber As Integer
Dim strFilePath As String
Dim strFileContent As String
'文本文件的路径
strFilePath = "C:MyFile.txt"
'确定下一个可用的文件序号
iFileNumber = FreeFile
'打开文件
Open strFilePath For Input As iFileNumber
'将文件内容存储到字符串变量中
strFileContent = Input(LOF(iFileNumber),iFileNumber)
'输出文件内容
MsgBox strFileContent
'关闭文件
Close iFileNumber
End Sub
会发生错误,如下图1所示。
图1
这如何解决呢?
A:文本文件包含英文内容可以,但包含中文内容却不行,其原因显而易见,就是文本文件中存在中文。这是由于VB内部采用Unicode编码方式的问题,使用下面的代码解决:
代码语言:javascript复制Sub ExtractTextFormFile1()
Dim iFileNumber As Integer
Dim strFilePath As String
Dim strFileContent As String
'文本文件的路径
strFilePath = "C:MyFile.txt"
'确定下一个可用的文件序号
iFileNumber = FreeFile
'打开文件
Open strFilePath For Input As iFileNumber
'将文件内容存储到字符串变量中
strFileContent = StrConv(InputB(LOF(iFileNumber),iFileNumber), vbUnicode)
'输出文件内容
MsgBox strFileContent
'关闭文件
Close iFileNumber
End Sub
运行正常,结果如下图2所示。
图2
有人说,可以将文件内容先读取到文本框控件内,然后将该控件的内容再转到变量中,这样就可以解决了。我没有试过这种方法,有兴趣的朋友可以试一下。