使用FileSystemObject打开CSV文件代码运行无反应,求技术解析
关于FileSystemObject.OpenTextFile的误解与解决方案
嘿,你确实误解了FileSystemObject.OpenTextFile的工作机制——它不是用来调用系统程序打开文件让你可视化查看的,咱们一步步理清楚问题和解决办法:
1. 为什么你的代码运行后没反应?
OpenTextFile方法返回的是一个TextStream对象,这个对象的作用是让你在VBA代码内部读取或写入文本文件的内容,比如逐行提取数据、修改文本等,完全不会弹出任何可视化的文件窗口。所以你的代码其实已经成功创建了操作该CSV文件的对象,但因为没有后续的读取/写入操作,也没有触发打开文件的动作,所以看起来“无任何反应”。
2. 如果想打开CSV文件让用户查看
如果你原本的需求是让系统用默认程序(比如Excel)打开这个CSV文件,给用户查看或编辑,那可以用下面两种方法:
方法一:使用Shell函数调用系统默认程序
Sub OpenCSVForViewing() Dim filePath As String filePath = "V:\evfilesce9i9\apps9\vbe9\dep4\KFTP\KFTP001D_FicherosCeca\30. RFSectorial\RF Sectorial 2018-05\QryCECARFSECTORIAL0239_EVO1_PRO_20180508205535.csv" ' 用cmd的start命令打开文件,确保带空格的路径也能正常识别 Shell "cmd /c start """" """ & filePath & """", vbNormalFocus End Sub
方法二:使用Excel的FollowHyperlink方法
Sub OpenCSVWithExcel() Dim filePath As String filePath = "V:\evfilesce9i9\apps9\vbe9\dep4\KFTP\KFTP001D_FicherosCeca\30. RFSectorial\RF Sectorial 2018-05\QryCECARFSECTORIAL0239_EVO1_PRO_20180508205535.csv" ' 用当前工作簿的FollowHyperlink打开文件,NewWindow设为True会在新窗口打开 ThisWorkbook.FollowHyperlink Address:=filePath, NewWindow:=True End Sub
3. 如果你的需求是读取CSV文件内容
要是你本来就是想在代码里处理CSV的内容,那你的代码只是完成了第一步创建TextStream对象,还需要添加读取操作,比如这样:
Sub ReadCSVContent() Dim fso As Object Dim textStream As Object Dim filePath As String Dim currentLine As String filePath = "V:\evfilesce9i9\apps9\vbe9\dep4\KFTP\KFTP001D_FicherosCeca\30. RFSectorial\RF Sectorial 2018-05\QryCECARFSECTORIAL0239_EVO1_PRO_20180508205535.csv" Set fso = CreateObject("Scripting.FileSystemObject") ' 1代表ForReading模式,打开文件用于读取 Set textStream = fso.OpenTextFile(filePath, 1) ' 逐行读取文件内容,直到文件末尾 Do While Not textStream.AtEndOfStream currentLine = textStream.ReadLine ' 这里可以处理每行内容,比如输出到VBA的立即窗口 Debug.Print currentLine Loop ' 操作完成后记得关闭TextStream对象,释放资源 textStream.Close Set textStream = Nothing Set fso = Nothing End Sub
内容的提问来源于stack exchange,提问作者Mauro
相关产品推荐
相关产品推荐

