我目前正在开发一个代码,用于创建一个文本文件,将数据从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,文件模式错误。
只是想知道是否有人可以看到一个明显的错误,以帮助我修复我的代码!过去两天我一直在搜索互联网,试图以不同的方式完成这项任务,但还没有能够管理它。
谢谢!
答案 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