VBA Unix到DOS文本转换代码错误

时间:2017-07-24 19:19:27

标签: windows vba excel-vba excel

我目前正在开发一个代码,用于创建一个文本文件,将数据从Unix数据文件转储到临时文本文件中,我可以在vba中访问该文件以进行数据的后期处理。我的宏只在这个文件是DOS格式时工作,所以我试图将换行从Unix转换为DOS。现在,当我尝试将修改后的文本写入临时文件时,我收到错误。我的代码列在下面

    Filepath = Application.GetOpenFilename(".f06 files (*.f06),*.f06")
    Dim tempFilepath As String
    tempFilepath = Replace(Filepath, ".f06", "_temp.txt")

    Dim realfile As Integer
    realfile = FreeFile
    Dim tempfile As Integer
    tempfile = FreeFile
    Dim FileContent As String

    Open tempFilepath For Output As tempfile
    Close #1
    Open Filepath For Input As realfile

    Do While Not EOF(realfile)
         Line Input #realfile, FileContent
         FileContent = Replace(FileContent, Chr(10), vbCrLf)
         Print #tempfile, FileContent
    Loop

我收到了错误:

打印

    #tempfile, FileContent 

运行时错误54,文件模式错误。

只是想知道是否有人可以看到一个明显的错误,以帮助我修复我的代码!过去两天我一直在搜索互联网,试图以不同的方式完成这项任务,但还没有能够管理它。

谢谢!

1 个答案:

答案 0 :(得分:1)

Freefile返回相同的句柄号,直到您使用该句柄实际打开文件。测试了上面的代码,Realfile和Tempfile都变成了1.这混淆了文件处理API的地狱。

这样做的理想方法是在调用FreeFile后立即打开文件,然后在需要打开另一个文件时再次调用它。最终代码:

Filepath = Application.GetOpenFilename(".f06 files (*.f06),*.f06")
Dim tempFilepath As String
tempFilepath = Replace(Filepath, ".f06", "_temp.txt")

Dim realfile As Integer
realfile = FreeFile()
Open Filepath For Input As realfile

Dim tempfile As Integer
tempfile = FreeFile()
Open tempFilepath For Output As tempfile

Dim FileContent As String

Do While Not EOF(realfile)
     Line Input #realfile, FileContent
     FileContent = Replace(FileContent, Chr(10), vbCrLf)
     Print #tempfile, FileContent
Loop

Close tempfile
Close realfile