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

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

Private Sub txt_read()
       Dim txt As String
        Open "D:\dzh.txt" For Input As #1 '
        '对文件做任何 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, f As File, ts As TextStream, s 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 a test.") '创建一个文件,返回一个用于该文件读写的TextStream对象
    Set f = fs.GetFile("test1.txt")          '返回一个和指定路径中文件相对应的 File 对象
    '错误!f.WriteLine ("This is a 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
        s = 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 = "R" Then
        ' 读取方式打开文件
        Set objTS = objFSO.OpenTextFile(strFileName, ForReading, True)
    End If
    If strMode = "W" Then
        ' 写入方式打开文件
        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 i As Integer
    ' 跳到指定数据行,如指定行超过总行数,则指定到末尾行
    ' 一般结合文件末尾判断函数以及读取函数使用
    For i = 1 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


  • 8
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在VBA中在文本文件中间插入行,你可以使用FileSystemObject对象来读取和入文件。下面是一个示例代码,演示如何在文本文件的指定行之后插入新行: ```vba Sub InsertLineInFile() Dim filePath As String Dim lineToInsert As String Dim lineToFind As String Dim tempFilePath As String Dim tempFileName As String ' 设置文件路径 filePath = "C:\path\to\your\file.txt" ' 设置要插入的行 lineToInsert = "This is the new line to insert" ' 设置要找到的行 lineToFind = "This is the line after which you want to insert the new line" ' 创建FileSystemObject对象 Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") ' 检查文件是否存在 If Not fso.FileExists(filePath) Then MsgBox "文件不存在!" Exit Sub End If ' 创建一个临时文件以保存修改后的内容 tempFilePath = fso.GetParentFolderName(filePath) tempFileName = fso.GetBaseName(filePath) & "_temp" & fso.GetExtensionName(filePath) ' 打开原始文件和临时文件 Dim originalFile As Object Set originalFile = fso.OpenTextFile(filePath, 1) ' 1 表示只读模式 Dim tempFile As Object Set tempFile = fso.CreateTextFile(tempFilePath & "\" & tempFileName, True) ' True 表示创建新文件 ' 逐行读取原始文件并入临时文件 Do Until originalFile.AtEndOfStream Dim line As String line = originalFile.ReadLine ' 找到要插入行的位置 If line = lineToFind Then ' 在找到的行之后插入新行 tempFile.WriteLine line tempFile.WriteLine lineToInsert Else ' 其他行直接入临时文件 tempFile.WriteLine line End If Loop ' 关闭文件 originalFile.Close tempFile.Close ' 删除原始文件并重命名临时文件为原始文件名 fso.DeleteFile filePath fso.MoveFile tempFilePath & "\" & tempFileName, filePath MsgBox "新行已成功插入文件!" End Sub ``` 请确保将上述代码中的`filePath`、`lineToInsert`和`lineToFind`替换为你实际的文件路径、要插入的行和要找到的行。 此代码将在指定行之后插入新行,并将修改后的内容保存回原始文件中。请注意,在处理大型文件时,此方法可能会对性能产生一些影响。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值