加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VBA 读写文本文件的几种方法 

(2017-04-05 09:08:12)
分类: 置顶
VBA 读写文本文件的几种方法
━━━━━━━━━━━━━━━━━━━━━━━━━

1、直接采用Open函数 + Line input命令

Private Sub txt_read()
       
Dim txt As String
        Open 
"D:\dzh.txtFor Input As #'
        '对文件做任何 I/O 操作之前都必须先打开文件。Open 语句分配一个缓冲区供文件进行 I/O 之用,
        '并决定缓冲区所使用的访问方式。
        '打开文件作为数据输入用,文件号为#1
        
Do While Not EOF(1)
            
Line Input #1, txt  '从已打开的顺序文件中读出一行并将它分配给 String 变量
            'Line Input 语句一次只从文件中读出一个字符,直到遇到回车符 (Chr(13))
            '或回车–换行符 (Chr(13) Chr(10)) 为止。回车–换行符将被跳过,而不会被附加到字符串上
            
MsgBox txt
        Loop
        Close #
1
End Sub


2、利用FileSystemObject对象(引用windows script host object model)

Sub TextStreamTest()
    
'**如果引用“windows script host object model”,可以定义如下的数据类型,编程更方便!!!!*******
    
Dim fs As FileSystemObject, As File, ts As TextStream, As String
    
'打开一个只读文件,不能对此文件进行写操作/
    '打开一个用于写操作的文件。如果和此文件同名的文件已存在,则覆盖以前内容/
    '打开一个文件并写到文件的尾部
    
Const ForReading 1, ForWriting 2, ForAppending 8
    '使用系统缺省打开文件/以 Unicode 格式打开文件/以 ASCII 格式打开文件
    
Const TristateUseDefault - 2, TristateTrue - 1, TristateFalse 0
    'Dim fs, f, ts, s
    
Set fs CreateObject("Scripting.FileSystemObject")
    
'FileSystemObject 对象提供对计算机文件系统的访问
    '下面FileSystemObject.CreateTextFile 返回一个 TextStream 对象,该对象是可读并可写的:
    
on Error Resume Next  '如果文件存在,下个命令会出错!获得文件
    
fs.CreateTextFile("test1.txt", False).WriteLine ("This is test."'创建一个文件,返回一个用于该文件读写的TextStream对象
    
Set fs.GetFile("test1.txt"         '返回一个和指定路径中文件相对应的 File 对象
    '错误!f.WriteLine "This is test. ")          '向创建的文本文件中写入一行文本,非TextStream对象,错误!!
    
    
Set ts f.OpenAsTextStream(ForAppending, TristateUseDefault'打开一个指定的文件并返回一个 TextStream 对象
    'OpenAsTextStream 方法提供了和 FileSystemObject. 的 OpenTextFile 方法相同的功能/
    '此外,OpenAsTextStream 方法还可以用于对一个文件进行写操作。
    
ts.Write "Hello World"
    ts.Close
    Set 
ts f.OpenAsTextStream(ForReading, TristateUseDefault)
    
Do While Not ts.AtEndOfStream
        ts.ReadLine
        MsgBox 
s
    Loop
    
ts.Close
End Sub


附:自定义类模块——含多个文件处理函数

定义FileOperation类

Private objTS As TextStream  定义TextStream对象

Public Function OpenFile(strFileName As String, strMode As String)
    
Dim objFSO As FileSystemObject 定义文件对象

    
Set objFSO New FileSystemObject
    Set 
objTS Nothing

    If 
strMode "RThen
        
读取方式打开文件
        
Set objTS objFSO.OpenTextFile(strFileName, ForReading, True)
    
End If
    If 
strMode "WThen
        
写入方式打开文件
        
Set objTS objFSO.OpenTextFile(strFileName, ForWriting, True)
    
End If
End Function

Public Function 
CloseFile()
    
关闭文件
    
objTS.Close
End Function

Public Function 
GetLine() As String
    
按行读取文件数据
    
GetLine objTS.ReadLine
End Function

Public Property Get 
AtEndOfFile() As Boolean
    
判断是否已到文件末尾
    
AtEndOfFile objTS.AtEndOfStream()
End Property

Public Function 
WriteLine(strData As String)
    
向文件写入一条数据
    
objTS.WriteLine (strData)
End Function

Public Function 
SkipLines(intLines As Integer)
    
Dim As Integer
    
跳到指定数据行,如指定行超过总行数,则指定到末尾行
    一般结合文件末尾判断函数以及读取函数使用
    
For To intLines
        If objTS.AtEndOfStream Then
            Exit For
        End If
        
objTS.SkipLine
    Next i
End Function

测试

Sub Run()
    
Dim objTXTFO As FileOperation
    Set objTXTFO New FileOperation
    objTXTFO.OpenFile "D:\dzh.txt", "R"
    Do While Not (objTXTFO.AtEndOfFile)
        
MsgBox objTXTFO.GetLine
    Loop
    
objTXTFO.CloseFile
End Sub 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有