VBA提高篇_12 文本文件逐行读取,输入输出操作自如

一、VBA打开文本文件的4步操作

在这里插入图片描述

  1. 打开文本文件
  • 找到指定文件并调入内存
打开指定文件 Open

Open   "文件详细路径"  	 For    Input/Output    As   #1
打开   指定文件		为了	输入 / 输出  	代号  1	
  1. 读取一行内容
  • 将每行视作一个字符串
Line    Input   #1,  s
读取一   输入	1号	作为字符串
行文本		   文件 保存到s中

vba的顺序读写模式:

  • 每执行一次Line input ,
  • 就自动向下读取新的一行,
  • 不能向回读取已经读取过的内容
Do While 尚未到达文件末尾
	Line Input #1,s
	Cell(i,1) = s
	i = i + 1
Loop
  1. 是否已到末尾?
  • 如果是末尾就不再读取
EOF 是 End of File 的缩写
EOF(n) = True/False 判断代号n是否读到了文件末尾

用逻辑变量做判断 False 可以直接写成Not EOF,True 直接写成Not EOF,具体看后边示例

4.关闭文件文件

  • 保存文件,清理内存
Close #1
'不关闭文件,则之前写入的数据可能无法真正保存到该文件中

二、文本输入Excel示例

Sub  readText()
     Open   "D:\demo\客户信息.txt"  For Input/Output   As  #1
     i = 1
     Do While  Not EOF(1)   '尚未到达文件末尾
   		Line Input #1,s
   		
   		If Left(s,2) ="北京" Then  ' 判断以北京开头的每行操作/否则不操作
   			Cell(i,1) = s
   			i = i + 1
   		End If
     Loop
   
   Close #1

End Sub

三、 Excel输出文本示例

3.1 Open For Output

打开指定文件并向其中写入数据
如果已经有同名文件,则将其内容全部清空覆盖
如果当前硬盘上没有这个文件,就新建此文件

3.2 Open For Append

打开指定文件并向其中 <<追加>> 数据
如果已经有同名文件,则保留其内容,并<<追加>>写入
如果当前硬盘上没有这个文件,就新建此文件

3.3 Print 打印文件

Sub WriteText()
    Dim i As Integer
    Open "d:\部门名单-1.txt" For Output As #1
    
    Print #1, Trim(Cells(3, 2)); '末尾有分号代表输出不换行
    Print #1, Trim(Cells(3, 3))  '末尾空白代表输出默认换行
    Print #1, Trim(Cells(4, 2))
    Print #1, Trim(Cells(4, 3))
    
    Close #1  '不关闭文件,则之前写入的数据可能无法真正保存到该文件中
End Sub

3.4 工作簿 循环工作表 循环输出文件

Sub writeTxt()
    Dim s As String, i As Long
    Dim w As Worksheet
    
    '打开指定文件(若无此文件则创建)。若已经存在该文件,
    '则之前内容全部清除。改为 For Append 可保留之前内容。
    Open "d:\demo\部门名单汇总.txt" For Output As #1
    
    '扫描每一张工作表
    For Each w In Worksheets
    
    '每张工作表从第3行开始扫描每一行
        i = 3
    
        Do While Trim(w.Cells(i, 2)) <> ""
        
        '将每一行的B列和C列内容写入文本文件,中间用一个破折号隔开
        '三个字符串之间是分号隔开,所以输出在同一行。而最后一个字符
        '后面没有任何符号,所以下一次执行Print时将换行输出。
         
            Print #1, w.Cells(i, 2); "--"; w.Cells(i, 3)
            
            i = i + 1
        Loop
    Next w

    '关闭文件,非常重要!否则可能造成数据丢失!
    Close #1

End Sub

四 、先输入后输出 Demo实战演练

Sub readAndWrite()
    Dim s As String
    '1.0读取
    '打开文件
    Open "d:\残本1.txt" For Input As #1
    Open "d:\残本2.txt" For Input As #2
   
    
    i = 3
     '读取文件
    ' #1和 #2是否末尾
    Do While Not EOF(1) Or Not EOF(2)
        If (i And 1) = 1 Then Line Input #1, s
        If (i And 1) = 0 Then Line Input #2, s
    
        Cells(i, 2) = s
        i = i + 1
    Loop
    
    '关闭文件
    Close #1, #2
    
    '2.0写出
    i = 3
    Open "d:\残本3.txt" For Output As #3
    
    Do While Cells(i, 2) <> ""
        s = Cells(i, 2).Value
        Print #3, s
        i = i + 1
    Loop
    
    Close #3
End Sub



  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pigerr杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值