学习Excel技术,关注微信公众号:
excelperfect
Q:在《VBA专题08: 使用VBA操作文本文件》中,我们讲解了如何使用VBA来创建、修改、读取文本文件等操作。我们在示例代码中创建的文本文件内容都是英文,因此一切顺利。然而,如果我们创建的文本文件是中文,结果如何呢?如下面的代码,创建一个含有中文内容的文本文件:
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 iFileNumberEnd Sub
然后,使用下面的代码来读取该文件:
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 iFileNumberEnd Sub
会发生错误,如下图1所示。
图1
这如何解决呢?
A:文本文件包含英文内容可以,但包含中文内容却不行,其原因显而易见,就是文本文件中存在中文。这是由于VB内部采用Unicode编码方式的问题,使用下面的代码解决:
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 iFileNumberEnd Sub
运行正常,结果如下图2所示。
图2
有人说,可以将文件内容先读取到文本框控件内,然后将该控件的内容再转到变量中,这样就可以解决了。我没有试过这种方法,有兴趣的朋友可以试一下。